Why (I think?) programmers like Agile
Ever wait in a line for your morning coffee? - or to get on the popular ride at an amusement park? or simple be stuck in traffic ? If you're like most people you probably can begin to feel frustrated just at thinking about the idea, let alone when it really occurs.
People hate lines, people hate waiting. In software development we have a similar 'wait pattern', the 'hurry up and wait phenomenon'
If you have every been involved in a programming project with other team members and a project manager, it may goes something like this.
a) You are 'suddenly' thrust into a new software development project, somehow all of the requirements gathering is already done, and everyone is waiting on you to do your part. (You are the bottleneck somehow holding everyone up)
b) The project manager follows up with you each day to find out 'are you done yet?', how much do you have left?, when do you think it will be ready? ..sometimes it feels like this follow-up is hourly, as if the most important thing in the world right now is how fast you get your development work complete.
c) After hours of developing, and testing your work, you are proud to announce you are 'finished'!', only to wait days, weeks, months? to see the fruits of your work actually incorporated into the final product. The project is delayed for some strange reason you don't understand, and someone up the line is complaining, they can't finish 'X' now because they are too busy with 'Y' and it took you to long to finish your part? - And your like: whaaaat?!?
Sound a bit familiar? No one likes waiting in a line for hours, but at least when you do, you have some control, you can decide to simply get out of the line, and avoid the frustration, but when that line is your job - you don't really feel like you have a choice, you sit their scratching your head wondering what the big 'rush' was all about if it was just going to get stuck further down the line anyway.
The opposite of this feeling is called 'flow'. When you are in a state of flow, you feel in control, you feel productive, you have an immediate sense of accomplishment, and can quickly see the results of your work. Instead of the 'bottleneck' holding everyone up, you feel like a contributive team member.
More often then not, Agile will give the programming a sense of flow and not a sense of 'hurry up and wait'. In fact often the software cycle is lead by the programmer. The rate of the system moves at the rate of the developer, it is not being 'pulled' along to fit a specific schedule lead by a project manager.
If given the choice between waiting in a line, or feeling in a state of flow? - which would you prefer?
But there is a problem - Being in a personal state of flow, feeling productive is not the same as a productive project. If in fact development is the 'bottleneck' then switching things around, having the bottleneck at the front of the line will indeed improve the overall speed of the system. But if development is not a bottleneck, if for example the bottleneck is in requirements gathering, or testing (QC / User Acceptance Testing), then putting development at the front of the line, may make developers feel better, but will not improve the rate of flow in the system as a whole.
For a team to be productive everyone needs to feel the impact their work has on the larger picture, to know they are a part of something, and to work to improve the system as a whole, not just as an individual experience. This means that sometimes resources on a project will in fact be IDLE and this is not just OK, it is far better then having a non-bottleneck resource build more and more 'stuff' just to put it on top of the real bottleneck. Doing this is what creates 'hurry up and wait' and correcting it is essential to delivering frequent, high quality delivery that is repeatable and under continuous improvement - If you are NOT doing this, you can't call it 'AGILE', it is simply a faster way to make your existing problems grow faster then before.
Comments
Post a Comment