Over the years, I have been driving various software development projects. These projects are from small to large; simple to complex; from a few weeks to a few years. In this blog post, I will illustrate the common thread that makes a software product and project successful. I define a successful product as a running software product that the stakeholders are happy with that is completed on time and budget.
Most custom software development projects start with high level discussion with the product user/owner. This discussion eventually leads to product features, project scope, project release plan and more. In some agile software development frameworks certain terminologies are used to describe the above work products- Epic, User stories, Issues etc..
If the project is medium to large, it can be decomposed to multiple mini projects (releases) with distinct boundaries in terms of features, timeline and resources.
Decomposing the software project to a number of releases that can be implemented and delivered by a two or three developers is the most important factor in the success of a software project. Each of these releases are independently deployable with its own project plan with many iterations. Each iteration is similar to a sprint in the scrum framework. In each iteration, the 2 developers work closely with the end users and product owner to hash the details of the requirements, design and develop the solution.
Limiting the development team to 2-3 members increases agility, open communication and focus. This also speeds up the feedback loop between developers and product users. The development team can engage in discussion with the product user/owner multiple times a day. Interacting with product user/owner is a very important part of the development teams task. The discussion with the product user/owner revolved around clarifying the requirements, demoing the product, and setting the expectations.
Each product release consists of one or more iterations. Each iteration result in a functioning software that may or may not be put in production. Duration of iteration ranges from 2 to 3 weeks. The purpose of each iteration is to produce working software. Each iteration involves clarifying requirements, designing and developing solutions, demoing the solution, and gathering feedback from the product user/owner.
It is important to keep the development team intact for the entire period of the product release. The purpose of the release is to produce a functioning software that can be deployable with one or more features that can be used immediately by the product user/owner.
In conclusion, the central part for a successful software development project is scoping the project into multiple, independent , simple mini-projects (releases) that can be handled by a team of 2-3 developers.