What is success? How do you define it, how do you measure it? With software projects, it is easy to say when a project is complete but a complete project is not always a successful project.
So hear, at an abstract level, is my definition of a successful project. The project…
- solves the underlying (“big-picture”) requirements: It is possible, even common, in the translating the initial (or user) requirements into derived requirements that the “big-picture” objectives are lost. You see this reflected in tools and products that are functionally correct but more difficult to use or fail to provide the experience the user wants.
- informs future work: A successful project can inform future work in two ways. First directly, the work done on one project may be reused in subsequent projects. The second is through acquisition of new knowledge(1) .
- mentors junior people on the project: Every project is an opportunity for junior people to develop new skills and deeper understanding of the what they are working on(2) .
17 years ago, on my first project as very green consultant,
I made the mistake of doing exactly what the customer asked me to do. Their request was to help them automate the routing of signals around a complex multi-level model.
I did what they asked, I learned a lot; efficient recursive programming, how to handle complex regular expressions, error handling for ill-defined systems. The customer received a tool that did exactly what they asked for and they used it for the next 3 years.
So how was this project completed yet not successful? First I didn’t step back to ask “what do they need?” The customer thought they needed a way to route signals; in truth they needed a better model architecture. The reason that they stopped using the tool 3 years later is that they realized this for themselves and developed a better model decomposition.
The second way in which this project failed is that it did not inform future work. By its’ very nature it was a dead end tool; keeping them trapped in an inefficient model architecture. While I learned things that information was not applicable for my customer.
How to start succeeding?
Between the title of this post and my measures of success the answer should be clear. At the start of my engagement I should have talked with and listened to my clients; that would have lead to the understanding that their architecture was in poor shape, I would have understood their underlying(3) requirements.
Once you have the true objectives in mind make sure to review them periodically to ensure that the project has not drifted away from them. Think about how the current project can inform future work, either directly through reuse or through education. If it is for reuse budget the time in development to enable future reuse(4).
(1) There is a practical balance to be struck when learning new things on a project. The time spent on learning new methods / tools should not slow down the progress of the project. Ideally the knowledge would be gained organically while working on the project.
(3) I am using “underlying” and “base” requirements to refer to the “big-picture” requirements from which all others are derived. Given that the term for these big-picture requirements vary from field to field I hope that this will still be clear.
(4) Enabling reuse requires additional design and testing time. A general rule of thumb is to allocate an additional 10% ~15% of the development time. I will write more about reuse in a future blog post.