Sunday, May 28, 2023

Nine ladies don’t deliver a baby in a month.

 

Nine ladies don’t deliver a baby in a month.

While estimating migrating our persistence layer from server-side encryption to client-side encryption, my team estimated our project will require 60 developer weeks. The team created a detailed plan for each milestone and estimates for each, giving a high confidence date for each project. And then stated with multiple developers we can reduce the total time. Which obviously makes sense, when I asked so with two developers can we deliver it in 30 weeks, and three in 20 weeks. Some of my team members agree with visible hesitations on their faces. As theoretically 60/2 is 30 weeks and 60/3 is 20 weeks, so their engineering brain agreed but experience struggled with that answer. So, we agreed 30 weeks is not the answer, and I asked what would happen if I put two people on this project, or even three, my engineering lead struggled with the answer in coming up with an estimate. He asked for an additional week to determine that level of detail to conclude what will our expected delivery time.

While the above scenario is common, but often unanswered, and my team and I struggled with this very question i.e., can nine ladies deliver babies in a month. As business and project space become more ambiguous, identifying details of each deliverable and surrounding complexity often impacted our project plans and delivery windows. We heavily relied on cushions and ensured the team had necessary time to weed out complexity while meeting project timelines.  But even after baking in cushions, the team was up against the timeline and barely delivered projects or needed few more days near the end to deliver big projects.

While, as I expect last minutes delays and last days push is part of our delivery experience, I wanted to take an opportunity to document some observations and identify learning opportunities for future self.

Why multiple engineers don’t necessarily double the speed of delivery?

Cost of Increase in Collaboration (a double-edged sword):

The obvious part I missed while adding multiple engineers on the same project is that multiple engineers come with cost of increase in collaboration. Keeping multiple engineers equally aware of project space required the engineers to share context, ensure each task is detailed that enable the other engineer to effectively deliver on that task independently. Creating benefits of better detailed documentation, while maintaining each engineer on the same page requires more communication, and sometimes rework due to non-alignment. And, as of right now I have never accounted for a collaboration multiplier while adding multiple engineers.

Is Divisible:

When dividing projects tasks, I often miss can I really assign a task to multiple people at once. If all tasks can’t be assigned to multiple people, how many tasks can only be done by a single engineer at a time. And, if each project such as design, launch coordination, security reviews are singleton tasks, how do we bake them in our planning. Historically, long term projects will still have up to 20 percent of task that require individual to derive them in the beginning, and post implementation, up to 10% of a project estimate time i.e., an individual to coordinate launch and release efforts with multiple stakeholders. Leaving only 70% percent of time for implementation that can be parallelized between multiple engineers. While 70% percent tasks can be parallelized, it does warrant a close analysis especially for short term projects and 70% percent parallelization between multiple engineering will come with the cost of collaboration highlighted before.

Estimate Accuracy?

My team that does a very detailed job during design has figured everything about the implementation, so why we are still falling behind. When we discussed this among our team, we realize we often do great job in reviewing documentation and have a great idea what we want to implement. But engineering components much like life don’t behave exactly how we originally estimated. Additionally, each engineers bring their experience that changes the implementation from the original design. Such variations and challenges during implementation continue to require us to add some percentage of cushion to our original estimates to ensure the team has the necessary time to recover from any delays. I generally prefer to keep up to 20% to account for unplanned off days, sick days, re-work in implementations, and any technical delays.

Project timeline estimates with risks listed above:

·       Estimated dev effort: 60 weeks.

·       Projected Dev effort: (60 weeks + 20% of 60 weeks) i.e., 72 Weeks

·       Projected Single Dev effort: (20% of inception i.e., 72 weeks: 14.4 Weeks + 10% of launch coordination i.e., 72 weeks: 7.2 weeks:  22 Weeks (14.4 weeks + 7.2 weeks))

·       Projected Divisible effort: (70% of 72 Weeks) = 50.4 Weeks

·       Number of projected engineers: 2

·       Cost of collaboration (TBD by team: in my team: .2): (50.4 *.2)/2 = 5.4 weeks

·       Total Project Divisible effort time (Estimated Effort + total cost of collaboration): 25.2 + 5.4 = 30.6 weeks

·       Total Projected time to deliver: 30.6 + 22 weeks = 52.6 weeks (round to 53 weeks)

What did I miss in the above timeline: Unplanned long vacations, team attrition.