posted on Sunday, November 27, 2005 12:07 AM
by
chrisdonnan
Slice the Work Vertically, Not Horizontally .. IoC/DI Frameworks
I have been debating with a client about how to 'slice up' the implementation of a piece of software development/ refactoring. Some folks on the client team were advocating what I consider to be a fairly deadly approach to developing software. They were basically advocaing a waterfall-ish approach to developing the software... Build the backmost layer 1st, then the next, the next, you get to the UI in the end, etc.
I stumbled across this http://codebetter.com/blogs/jeremy.miller/archive/2005/11/26/135098.aspx blog entry from Jeremy miller. He is on my feed list these days.... And I quote....
Slice the Work Vertically, Not Horizontally
The metaphor of software development as construction is common, but horribly wrong. Approaching software development as constructing a structure on top of a foundation, then adding the finishing trim can be a slow, painful path to project failure.
Time and time again I’ve learned or observed that projects go much smoother when you build vertically instead of horizontally. What I mean by this is that you build a new system by creating a feature at a time with the entire stack of UI, business logic, and database work to make the feature fully functional. As you build new features you religiously eliminate duplication to avoid creating a Stovepipe anti-pattern and harvest reusable code.
One of the more disappointing project failures I’ve observed was the very first .Net pilot project in a VB6 shop. I wasn’t involved with the project, but I had a stake in the project as it was going to prove the viability of .Net for application development and also be a pilot for doing iterative development.* Unfortunately they blundered by crafting an iteration plan that called for them to write the entire data access layer first, the business layer second, then finally put together the user interface. It failed miserably. When the project was cancelled midway they didn’t have the slightest bit of deployable code because they had focused solely on the backend database. One of the other things they found out was that the data access they coded wasn’t exactly what the business and UI layers needed. In other words, they had wasted effort by speculatively creating code that turned out to be unnecessary.
He hit the nail on the head. YOU NEED TO HAVE DEPLOYABLE CODE ALL THE TIME. The risk of waterfalling is all or nothing. Either you finish the building, or you do not. I was just happy to see someone else using my terms exactly "Slice the Work Vertically, Not Horizontally" to describe how to do development work!!! The whole article is actually great - I suggest the full read.
He also references in this blog entry one of my favorite papers http://www.objectmentor.com/resources/articles/Principles_and_Patterns.PDF . Read it if you have not :)
He also references using IoC/DI frameworks. Please - dev community - get behind IoC/DI frameworks and ideas. Seperation of implementation and abstraction is KEY and these IoC/DI tools REALLY help make this stuff a help you!
All in all - he touched on a few near and dear to my heart items. I just had to give my 10 penny commentary :)
-CD