- Published on
Lessons on ensuring on-time delivery
- Authors
đ
- Name
- Mario Adisurya
I admit it, realistic time estimations and on-time delivery was something that I (and probably many of us) could never get quite right. You can easily brush it off and simply just say âthatâs just the nature of software engineeringâ and blame it on unknown factors that seemingly always get in the way of delivering on time. However, after working with some good folk in CGA and reading a couple of great articles on how other companies learned to set and hit deadlines, here are a few things that I myself learned and experienced on the matter.
1. Have a clear definition of âdoneâ that everyone is aligned on
This, in my opinion, is one of the most important points, and that is to make sure that the team is aligned and is clear on what the deliverables are and what the definition of done is. Itâs really easy to make assumptions, for example, developers could assume that âdoneâ means that the code has been merged into the master branch, whereas product stakeholders assume that âdoneâ means that the feature is available in production with itâs respective feature flags, if any, is toggled on.
Putting that extra effort upfront and documenting what the exact deliverables are, if the team needs to do A/B testing with a select test group, etc, can make a significant positive difference with setting realistic and more accurate time estimates.
2. Donât let that scope creep creep in
âScope creepâ is probably a term youâve already heard of many times, and as the negative connotation in the name suggests, itâs something you know you should push back onâbut itâs not always as simple as that, and sometimes you just donât have the luxury to just simply say no. In my experience, there are different levels of scope creep and can range from a small change that wonât have much impact on delivering on time, to large changes that can push out delivery by a couple to several weeks. In the case that itâs a large change or changes, try and push it out to a follow-up phase, or if you donât have the luxury to push it out to a different phase, then itâs important that you at least communicate to respective stakeholders that incorporating these changes will have a negative impact on the expected time of delivery. You definitely donât want to be in a position where you now have extra tasks to do, with no extra time to do it.
3. Get a deep understanding of the technology used
Not having a deep understanding of the technology youâre dealing with (i.e. the codebase, third-party integrations, etc) will make it almost impossible to provide an accurate time estimation. Having a deep understanding of the tech means that you have an understanding of which parts of the codebase has more complexity, or where the existing technical debt is, etc, which in turn will give you a lot more clarity on the velocity of the team in these particular areas. For example, if the feature youâre working on requires you and/or the team to make changes to parts of the tech with more complexity or large amounts of tech debt, then you can account for these delays in your time estimation.
4. Limit the amount of projects in progress
Olya Royall mentioned this point in her article, and this is something that I myself experienced during my time in CGAâthis makes a big difference in the velocity of projects. For example, letâs say that you have a team of 5 developers and itâs decided that 5 distinct projects will kick-off concurrently at around the same time. This means that you will have only 1 developer working on 1 project. It might be something nice to tell stakeholders initially: âthe team currently has 5 projects in progress at the momentâ, but since engineering resources is spread thin, it will take longer to deliver and it turn will make stakeholders more restless due to the lack of delivery frequency. The side-effect of having less developers on a project also means that thereâs the risk of, in the worst case, coming to a stop for a period of time in the scenario that said developers arenât available to work i.e. due to sickness.
5. Put an engineer (or engineers) on a dedicated support rotation
As Olya Royall puts in her article: âItâs easy to fall into a reactive mode with fixing bugs and ultimately miss deadlines.â
At CGA, we experimented with the concept of a âfillâ or âfloaterâ engineer, where they had more capacity to pay down any existing technical debt, be the go-to-person for any technical questions or contribute to scoping out upcoming featuresâessentially, any sort of task that isnât directly involved with any features in progress. This enables the current âfeatureâ engineers to put their focus entirely on the feature that theyâre working on. Even though the team was still experimenting to find the right balance during my time in CGA, this really enabled us to effectively and simultaneously deliver features without distractions, and fix/complete non-feature related issues and tasks.
Thatâs it! I hope you learned something new, and make sure to stay tuned for the next one.
Sources: