Implementing an effective software development process: Agile, Scrum, CMMI and where to start
The common way of organizing software projects in most software firms is (or was) the waterfall method. Most firms don’t choose this process deliberately, but grow into it, because it’s a natural human way to get organized. It has its parallel to the construction world: you have an idea of your dream house; you hire an architect who captures all your ideas and puts it into a drawing; the drawing gives a very clear picture of the house and matches with the picture in your mind; you accept the drawing; the drawing goes to the construction firm who tells you what it’ll cost to build the house; and so the project starts. In most cases, the construction firm gets it right: the house is like the picture. What they frequently don’t get right is the timing, but as we’ve grown accustomed to that, we accept the delay and we’re happy to move into the new house.
I think there are 2 crucial differences between construction and software development, which agile and scrum address:
- It is very hard (maybe even impossible) to clearly picture the software application before it exists
- It is much harder to organize, because the thought process and the execution don’t follow linear patterns
Whatever process you want to implement, however you call it, there are two things that can improve a software development process drastically (those two are also central parts of scrum and agile):
- 1. Create the picture in steps instead of upfront.
For smaller projects, this might be over-organization, because the picture can be made clear upfront. For bigger projects, it brings substantial improvement. Define the high level requirements of the project (create a rough picture), then cut out a part that can be completed within two weeks. Divide that part into clearly defined tasks and start building. Anything that has been built in those two weeks has to be tested and reviewed thoroughly and based on the results, the part and tasks for the next two weeks are defined. This gives a more flexible approach to building the picture and gives an opportunity to ‘steer’ the project in the right direction.
- 2. Organize communication
In the waterfall method (and the natural human organization method), the requirements are supposed to be clear, so we let the programmers do their work and expect to see the result when the deadline is due. Whatever happens in between, we expect them to fix. The problem in this organization is communication or the lack of it. Scrum and Agile have daily meetings as its cornerstone. Every day at a fixed location, with fixed people on a fixed time, the team discusses three questions: 1. What have you done yesterday?; 2. What will you do today?; 3. Where are you stuck?. Especially this last question is what brings a leap in productivity. Programmers often bang with their heads against a closed door. If you don’t hear them banging, they sometimes keep doing it for a week, believing that they’ll catch up the time they lose later on, trusting that they’ll get through that door. Daily meetings ensure that everyone hears the banging and puts the brains of the team into opening the door.
From these two, the second has the biggest impact and is the simplest to implement. If you are not ready to implement a whole new process, start with organizing communication. While building a house, the supervisor walks around daily and will see it when someone can’t get the door in place. He will walk to the person and ask what’s happening and will organize help to fix the door naturally. In software development, the door is invisible, the solution to fix the door is not straightforward and programmers find pride in solving complex problems and will try anything (for days in a row) to solve it. Communicate, ask the three questions every day and your projects will start moving faster and more fluid.
Hugo,
A simple and clear article. I like it. I agree with you. The sense of urgency the daily meeting will bring from the start is really valuable.
I do like to caution though that – if we didn’t bring the other Agile values such as self organizing teams and servant leadership, to the team, this could back fire in the sense that this could become a micro management tool. It might end up as a Project Manager is trying to figure out what the status is every morning – which is not the intend of the daily stand up meetings. Speaking of standing up – if we didn’t have a good facilitator for the meeting, the daily meeting could end up 30+ minutes meetings and that will quickly add up.
Those are some pitfalls we got to watch out for. Do that make sense?
Manoj
Pingback: If offshoring doesn’t provide the desired results, what do you focus on? | Bridge-Blog