Navigating the unpredictable waters of project deadlines has been one of the toughest challenges in my journey from a software developer to a CTO. Accurately predicting them is like trying to catch a shadow—always just out of reach.
I am sharing strategies from my past experience on how to effectively manage project deadlines in software development, using an example from Google Maps. Learn how to set flexible deadlines, communicate with different stakeholders, and maintain project stability to ensure successful delivery.
I've tried various strategies, such as sandbagging and adding buffers for unexpected issues or testing feedback, but none of them have been successful. Excessive sandbagging is inefficient, while tightening schedules compromises quality and can lead to engineer burnout when unforeseen problems arise. Encountering unexpected issues is part and parcel of the software development process.
I ultimately learned that deadlines are a shifting goalpost, influenced by changes in scope, competing priorities, and resource availability.
As we develop new features, we may discover that certain existing features need to be altered or are affected in ways we did not initially anticipate.
We establish clear deadlines but often find ourselves surprised by a production bug or a feature request from the sales team to secure a major client.
Sick leaves often come without prior notice. In fact, people often don't provide advance notice of personal leave unless it's for major events like weddings or international travel.
Having explored the pitfalls of traditional deadline strategies, let's now look at a more flexible approach inspired by Google Maps. This method can help us manage our deadlines more effectively.
With over a billion miles of mapped roads and a billion monthly active users, Google Maps updates the estimated time of arrival (ETA) every 30 seconds. It also has a 5-minute margin for short trips.
What can we learn from the experience of Google Maps and apply to software delivery?
• For smaller projects lasting up to 1 month, set the delivery deadline to the beginning of the week, specifically week X.
• For medium projects lasting up to 3 months, set the delivery deadline to be within the first or second half of a specific month.
• For larger projects that span over 6+ months, set the deadline to a specific month, X.
The flexibility mentioned above ensures a level of certainty for feature delivery while providing a buffer for the development teams.
It’s crucial to keep updating your stakeholders if the deadlines are still changing just like how Google Maps keeps you updated of the new ETA.
It's essential to understand that deadlines are communicated differently to each stakeholder. Consider a three-month project expected to be delivered in June.
• For clients, provide an approximate deadline of late June.
• Internal stakeholders should be assigned a slightly earlier deadline, such as June 15th.
• For the development team, set a more stringent deadline, such as June 7th.
This buffer allows for various use cases and maintains the stability of features for all stakeholders.
The internal development team will have from one week for User Acceptance Testing (UAT) feedback, performance issues, final styling issues, and minor fixes and two weeks to address any client feedback regarding blockers or must-haves. End users often provide insights beyond what we could anticipate during planning and development.
Using this method, deadlines can be managed efficiently. It ensures that various team members are aware of their responsibilities and the timelines they need to adhere to.
In summary, adopting flexible deadlines, communicating effectively with stakeholders, and learning from dynamic systems like Google Maps can significantly improve delivery accuracy and team morale.