This evening I attended the Maryland Agile Project Leadership Network meeting. George Dinwiddie was presenting "There Must Be 50 Ways to Speed Up Software Development." This was a great interactive session that generated a lot of discussion.
I am not going to list the 51 ways George identified to speed up software development. I will leave that to him to post his presentation. However I would like to point out a couple from the list:
- Always build a basic working system and then enrich it. That way you can always stop at any time.
- Use short iterations and don't worry about knowing all the requirements up front. You can always enhance the requirements in future iterations.
- If you don't know who will test a feature then don't build it. It is unlikely to get used.
- Optimize globally not locally
- De-phase the process. In other words don't do all requirements first then all coding. Instead iterate more frequently in smaller chunks of functionality.
- If you are struggling to get work done in a 4 week or longer cycle then shorten the cycle. Two week cycles may be a good length to use.
- Look at Test Driven Development and Test Immediately.
When I put my Architecture hat on I realize that there is one way to speed up development that was not really addressed during the discussion:
- The fastest software development occurs when software development is not required.
This is really what good architecture, whether enterprise or solutions architecture, is all about. If you can deliver functionality without requiring custom software development then that may indeed be the most effective acceleration technique.
This is one of the critical values that a good Enterprise Architecture and experienced Enterprise and Solutions Architects bring to an organization. The most effective results often come from what doesn't have to be done. In other words, using what already exists in a flexible architecture to deliver against requirements without developing new functionality.
In a world where Software-As-A-Service is becoming more commonplace and where the various Ruby-on-Rails, Grails or similar Model-View-Controller frameworks become more popular it becomes more realistic for functionality to be delivered through configuration rather than custom code. If you are developing in Ruby-on-Rails is there a Gem already available to provide the functionality you require in your application?
Can you use an internal or external web service to deliver the data or functionality you require?
One of the challenges I have is to look at how the Enterprise Architecture value can be measured. This is a fascinating issue. If you are an IT Architect and have addressed these issues I would love to hear about your experiences.