Saturday, 16 January 2010
Over the last decades a few trends have been made visible within application development. Methodology is one of them, introducing a.o. RUP, Agile and XP. COTS and code generation is another, trying to reduce the number of errors by pushing back the human contact with code
Apart from benefits, there are concerns here.
Methodology has put more focus and the project and timely delivery itself, forgetting that an application only spends 20% in initial development, and 80% of its lifecycle in maintenance. The human factor has been greatly increased by these methodologies, mirroring the increased dynamics of business
On the other hand, software building has greatly decreased the human factor
In both cases, documentation has suffered from the trade-off. Its level has shifted upwards towards business and functional design, and become more global than detailed. With the effect that the application itself is not very well described at the operational IT level, making errors a lot harder to solve.Which is causing the cost to shift from the project phase to the maintenance phase. That is good for the project bookkeeping, but very bad for the enterprise bookkeeping: it is a lot more costly to solve errors than to prevent them, and it is even more costly to solve them in a later stage as opposed to an earlier stage
This increased cost has been noticed, and has caused a surge in offshoring. In these areas margins are very low, so what I call "target-driven programming" is an even bigger goal here. Linguistical and cultural differences make for extra barriers, causing a lot of rework to be done during the delivery phase - getting even further away from up to date documentation
So, we're off worse than before. We're delivering more functionality within less time against less cost, but due to increased business all this code has to be maintained more often. And the knowledge to do that has become just as dynamic as the delivery phase, exponentially increasing the cost there. What does the code do? What is its functionality? How to test so errors can be reproduced? Many questions that now take more and more time to answer
Is Agile bad? Is code-generation? Yes they are, if you think they are one-size-fits-all solutions. And you might know my take on those by now.
Code-generate away and hand-code the remaining 20%-30%. But document it very well. Agile away and only write down the bare necessities during delivery. But document it very well when the application is live.