A Macro Level Perspective of Software Development
vaidyFebruary 9, 2011
Why is delivering good software on a consistent basis hard? There are many existing answers to this question already. This is our version. A list of things good software should achieve:
- Should solve a real problem
- Should be shipped and maintained within the budgeted cost and time
- Should be easy to use
Update: We’ve now migrated to James Shore’s definition:
Success is usually defined as delivering on time, under budget, and as specified. That’s a flawed definition. Many late projects are huge successes for their organizations, and many on-time projects don’t deliver any value. Instead, think in terms of organizational, technical, and personal success.
What it takes to build such software:
- Great code : Easily Testable, Maintainable & Scalable code across ALL Tiers of the App
- Constant estimating and planning : Has to be woven into the Iterative Release process
- Feedback Management : Collection & Processing of Qualitative & Quantitative Feedback
- Continuous Improvement : A team habit of proactively finding and fixing problems
- Good Infrastructure : S/W & H/W tools to improve Team & Apps efficiency
- High Quality : Focus on all 4 Agile TestingQuadrants
- Constant Communication : Customer Collaboration & Team Interaction along with just enough Documentation
- Great Design : Balancing Form with Function
- Constant UX Focus : Focus on the user’s interactive experience [along with focus on Copy] woven into the Iterative Release Process. This is covered by Quadrant 3 in the Agile Testing diagram linked to above - but I’m mentioning it separately because its usually happens to get less attention.
- Knowledgeable, Skilled and Motivated Team : Important roles include Managers, Programmers, Testers, Analysts, Leads, Architects and Designers