views:

767

answers:

18

I have always used the agile Feature Driven Development process for developing software. What does everyone else use, and why do you prefer it? I prefer FDD because that's what I started with fresh out of college. In college, everything was very free-form and my "customer" was typically my professor, who might not have had much industry experience outside of doing research for the university.

Now, my customer(s) are not so forgiving and I do a lot of work in the medical field. Being agile and having a high level of quality is a must!

A: 

Test Driven Design TDD

The confidence you get from knowing that a code change has not broken something subtle is great

Paul Whelan
I would class TDD as a development practice (albeit a critical one!) rather than a process. XP, Scrum, Lean, RUP, FDD are all examples of what I would call development processes. TDD, pair programming, iterations, etc. are examples of what I would call practices.
Kief
A few years ago, Kent Beck was considering renaming XP to Test-Driven Development. On its surface, TDD is a development practice, but in principal, seen with a broader perspective and applied accordingly, it is indeed a process. It's got quite a bit in common with Lean and Kanban. The best that we can say here is that TDD the development practice, but TDD the process is not.
Scott Bellware
+3  A: 

I go with Agile Scrum, It gives me feeling of 'connected to the team. And have good control over the milestones and indivudual taks.Morning scrums are very useful. We use Agile Scrum project template in Team System http://www.scrumforteamsystem.com/en/default.aspx

Jobi Joy
Yes, I'm a big fan of Agile development as well. Any process that you use (i.e. a Kanban approach or FDD approach) or do you just perform agile milestone by milestone? Agile/lean processing seems to be the new way to go, I am reading more and more on agile development as i grow.
MaTT
We use Agile Scrum- The iterative approach. There is a Project Template you can install to VS2008 so I can controland Track my team totally through that. http://www.scrumforteamsystem.com/en/default.aspx
Jobi Joy
Scrum is a great process
JohnIdol
+1  A: 

Code and Fix !!

Just kidding, TDD is really a wonderful way to go.

Ben Hoffstein
HAHA! Good 'ole C-n-F! That's how it was in college, that's for sure. I'm familiar with TDD, so i know it can be very effective.
MaTT
Sprinkling in a dash of programming by coincidence really helps out when using the code and fix approach, also. :)
muloh
A: 

Cowboy - shoot from the hip... ;)

DGM
A: 

I second the vote for Agile. I am exploring Lean these days, but like with any development process, it's not something you can just drop in on your current group. However, there are features of Lean and Agile that can be eased into your current processes and gain immediate value.

My former project used the Waterfall method and were proud of it. They've since weaned themselves off of Waterfall and on to Prototype, which is a good step.

Robert S.
That is awesome! Change is hard, keep up the good work!!!
MaTT
+4  A: 

Agile development methodologies with a combination of XP Engineering Practices:

  • TDD coupled with Refactoring
  • YAGNI (You ain't gonna need it)
  • KISS (Keep it simple stupid)
  • Refactor to Design Patterns
  • Pair programming with switching pairs
  • Shared Code Base
  • Deploy early and often
SaaS Developer
A: 

+1 for scrum!

DanielHonig
+4  A: 

Whatever the current project requires.

I do a lot of consulting on my own time for various (mostly PHP-based) web dev. I haven't devoted the time to get to TDD for those projects yet, and many of them are using existing frameworks that don't really make TDD all that easy.

At work we're not tooled for TDD yet, so we use a hybrid of agile and old-style spec-based processes. Trying to get a movement towards TDD, but we're a small shop with well-entrenched existing projects (lots on maintenance work) and integration work with ERP systems. I think I could get TDD going on my own integration work (and am making baby steps in that direction) but the other stuff is largely a lost cause.

cori
+2  A: 

Design by Contract with a complement of unit testing

What do you use for contracts?
Gabriel Ščerbák
+1  A: 

There seems to be some confusion here:

TDD is more about how you implement code and not about managing the overall development of a software project. TDD will not help you decide which features to schedule, when to deliver, or how to set priorities.

In contrast, things like Lean/Agile or even Waterfall are about these higher level issues. (My vote is for Scrum which falls firmly into the Lean/Agile area.)

XP (Extreme Programming) is interesting because is blends ideas from both of these areas.

Pat Notz
XP: no documentation at all - it's a bit too AGILE!
JohnIdol
A: 

I work for a company that does both web and systems development. Our development model is Rapid Development. We use the more modern definition of it, so it is similar to Agile Development. Without the XP concepts.

J.J.
A: 

We use scrum too... I think standups can be good in some respect, but sometimes the quick 15 minutes becomes at least 30.

Nicks
+3  A: 

I guess I am old school. I develop to client spec. A vigorous design phase followed by a heads-down development, test, bug-fix cycle. Then, implement.

Once the spec is defined and agreed, no further changes can occur. All changes are to wait for development and bug fixes to have been completed. This prevents scope-creep and allows the software to get written, tested, debugged and implemented. At that point changes become enhancements, new features, etc.

I have come to find that for almost all my clients over the past 10 years, about 90% of the things that they would have "thrown in" during development, creating scope-creep, are thought of as not being necessary. I cant tell you how many clients have thanked me for keeping them at bay. So I dont know what process you would call this but it works for me and for many other developers I know.

Optimal Solutions
Well, that sounds very "agile" of you ;-) Just kidding, I don't know if it would fit under and agile/lean process, but it sounds like you are doing what works and that is important! How do you define what to implement and when? Do you do that as you go or do you split it up ahead of time?
MaTT
It's called "Waterfall". I don't mean this as a knock, troll, flame, or anything, but what you are describing is exactly what is meant by Waterfall development - no going back.
Kief
+6  A: 

At work we use the ICONIX process. It is a subset of AGILE techniques and it is behavioural requirements driven. The ICONIX process aims to be as low-celebration as possible having as little documentation as possible - in order to allow you to easily keep it up-to-date (this is a big difference from other AGILE processes, for example XP practitioners often do not seem to maintain documentation up-to-date after the 1st draft claiming that their code is the documentation).

Here's a practical overview of the process:

  1. Quick Draft of Functional Requirements
  2. Quick Definition of a Domain Model
  3. Model Use Cases on the base of previous steps
  4. Optional - Draw a throw-away robustness diagram for each use case, just to understand relations between your classes
  5. Draw a Sequence Diagram for each use case
  6. Model your test-cases on the use cases
  7. Implement
  8. Test

At each step you review your work as a whole updating your domain model (it's impossible to get it right first time) and adding comments on your use cases. By the end of step 5) you end up with ready-to-implement classes and logic with just little documentation to maintain if you re-factor or change anything:

  • Use case diagram
  • Sequence Diagram for each use case
  • Test case diagram (or test plan)

If you need to add a feature, you add a new use case and follow the whole process.

Resources:

Iconix process website

Iconix Software Engineering website

Books References:

AGILE Development with ICONIX Process

JohnIdol
Wow, great post. Questions though - does this approach work well on "large" projects? The average lifespan of my projects are a little over 1 year. This seems like a great process for smaller tasks; however, i'm having difficulty wrapping my head around it for an entire project. References?
MaTT
In my experience it works regardless of the size of the project. In a large project you split the implementation of features in iterations in an AGILE fashion - each iteration you add features and you go through the process again. Obviously - the bigger the project the more the documentation.
JohnIdol
Most Agile base software development processes are similar to each other... They mostly differ in how much stuffs are getting documented and the length of each iteration...
RWendi
The big difference between most extreme AGILE processes and ICONIX is that you keep documentation up-to-date, you don't just throw it away after each iteration. This is possible because the process aims at keeping light-weight documentation
JohnIdol
Cool. Thank you for the references. I like it! I'll do some more reading on this and see if it is something that could benefit my company. (Or at least my projects)
MaTT
XP maintains no documentation at all? I guess I've been doing it wrong for all these years. I guess the framers of XP have been teaching it wrong as well. I suppose that the community of XP practitioners, leaders and teachers have also been doing it wrong. Either that, or you've misinterpreted XP's stance on documentation based on popular myths :)
Scott Bellware
thx for your comment. My statement is based on 1st (or 2nd) hand experience, people who adopt XP seem to maintain no documentation often with claims that they *document in code*. I re-phrased to make this clear.
JohnIdol
+3  A: 

I'm a fan of Lean Software development, which is promoted by the Poppendiecks, largely based on principles from lean manufacturing, with Toyota as the poster child. It's got a lot in common wit the other Agile methodologies, the focus is on eliminating waste, making use of queueing theory, and a "just in time" mindset (e.g. specifying a story at the last responsible moment).

Lean is often associated with Kanban, which is a method for tracking tasks through a pipeline.

Kief
Right. How do you like the Kanban approach? Do you guys use any tools to monitor the progress? We had a group here use a giant white-board and physically used notes/magnets on the Kanban board. It was really neat and very effective!
MaTT
+2  A: 

We use waterfall where I work but after some pushing on my part we're moving more towards an agile/TDD/CI hybrid model for some of our new projects. God willing, we'll be able to ditch the waterfall method. Every maintenance release we do, our main customer just ignores reqs deadlines and hands us requirement changes right at the last second and then just stares blankly at us while we explain why they can't keep doing that.

MattC
Ouch!!! Good luck with the migration...change isn't easy. Hopefully your company fits well with the agile development. It is working great at my job!!!
MaTT
A: 

My personal leanings over the past few years have been toward Lean Development, with a heavy influence of everything that I've learned from XP. I think it's important to note here that Scrum is insufficient as a development process as it does not inform the work of software development, but the work of trying to manage the flow of software development tasks. My thinking has been informed by ICONIX as well. I think it's a great way to approach a use-case and diagram driven environment without getting bogged down in counter-productive bureaucracy.

Scott Bellware
A: 

Does anybody know anyone who is using ICONIX with TFS?

Rik Garner