There are no really studies of what goes right with software projects, there are collections of things that seem to be good signs that you are on the right track. (ie crystal clear and XP both have things you should check yourself against such as Pair Programming or Osmotic Communication) but none of them have a statement that says if you are not doing this at all you will fail to produce the software you aim for (or may not produce anything at all).
There’s very little written about it because there is no such thing. You can be doing everything right and still fail, it’s just down to the law of averages, you’ll just be less likely to fail if you do things in certain ways.
I’ve watched projects fall apart through no fault of any process or individual, just that the goal wasn’t correct or it just wasn’t the right place at the right time.
But I would say that I have one overriding goal to all my projects that I’m working on and that’s discipline.
I want to be disciplined enough to test first, to not go beyond the boundaries of what is needed, to keep to the simplest thing that can possibly work, to not shoot myself or others in the foot with overly complex or untested solutions to simple problems.
It’s one of my guiding mantras. “I will have the discipline to do this right”. Beyond that I have only a couple of preconceptions over what a really good working team needs:
- STTCPW (Simplest thing that can possibly work)
- Unit tests (the more behavior oriented and encapsulated the better)
- Continuous Integration (the more regular the better)
- Tight communication (Get up and walk to the person, don’t send an email)
Once all these are in place I’m generally happy, if not I’m generally thinking about how to get them into place.
What do you find the most important part of your work?