There are an endless amount of things to learn as a software developer. It can be difficult to know what to focus on to ensure you advance in your career. Learning to manage uncertainty and the unknown is one of the most important skills to master. Experienced developers quickly (and effectively) identify, reduce, and plan for uncertainty.
What does managing uncertainty look like?
Early on in a developer’s career the amount of what is not known can be overwhelming. To combat that feeling one can become eager to learn as much as possible as fast as possible. This will lead to burn out and can even cause stagnation. Instead start by identifying the specific uncertainty that needs addressing.
Let’s use a made up example: Christine is a junior developer who is two months into her first software development role at Company ABC. She is uncertain about many things, including how to use her new tools, the processes that Company ABC has for releasing features, and just general best practices. Christine lists out everything she doesn't know and selects the top 3. Christine uses Edmond Lau’s definition of leverage to decide what is most important (to learn more check out his book The Effective Engineer). There will be a long-lasting impact on Christine’s team if she can resolve or reduce these 3 uncertainties:
- How can I better use my integrated development environment (IDE) to read and write code faster?
- How can I write better tests to ensure quality code coverage?
- How can I understand a new area of the code base to prepare for upcoming work?
Next she refines this list to be more specific:
- How can I better use my IDE to read and write code faster?
- What are the quick keys to search and find code in my IDE?
- What are the code completion and templating tools in my IDE?
- What add-ons or tooling can I add in my IDE to auto generate common code snippets?
- How can I write better tests to ensure quality code coverage?
- What resources can I use to practice working within our testing framework?
- What is Company ABC’s testing strategy?
- What golden examples do we have available to reference?
- How can I understand a new area of the code base to prepare for upcoming work?
- What current resources and subject matter experts are available?
- What does the data structure look like and how is it displayed to our users?
- What do the tests say about how this code should work?
These will be easy to address! Christine can search existing developer blog posts and technical guides on the internet. She can also use company resources and ask her coworkers for support. She schedules 30 minutes everyday, for the next two weeks, to investigate these questions. She also uses that time to practice what she learns. Christine does a walk through of the new area of code with Jerry, who is very familiar with the code. She now understands at a high level how that code works. She is prepared for the upcoming work.
It's now time to estimate and plan the next increment of work with her team. Christine shares what she understands of the work and what she knows she still needs to learn. She also shares her new reduced capacity and that she will be taking 30 minutes everyday to learn and improve.
The team strategizes about how to tackle that upcoming work. They decide a senior developer will pair with Christine. This plan will ensure that the work gets done on time. It also ensures she has immediate support in understanding the remaining code uncertainty.
How do experienced developers manage uncertainty?
The uncertainty grows as software developers progress in their career. The resources available to reduce that uncertainty shrink. And the type of uncertainty changes.
Let's fast forward 10 years and Christine is now a senior developer tackling new problems. She is ready for the unknown. She is currently investigating how to integrate SMS into Company ABC’s mobile app. She suspects that delivering this project will require significant effort. To prepare for this project Christine starts to list out everything she doesn’t know.
There are many techniques to identify and prioritize project uncertainty. One great way is story and assumption mapping explained by Teresa Torres in her book Continuous Discovery Habits. Christine generates her list by considering her past projects. The “surprises'' in other large projects were great learning opportunities. Checkout how Jobber learns from “surprises'' in this article about Post Mortems. Christine also asks her Designer, her Product Manager and subject matter experts at Company ABC to refine and add to this list.
SMS in the mobile app project:
- How can we immediately show new SMS in the UI when user is looking at the app? Does our existing infrastructure enable this?
- How can we send a push notification to our users when they receive a new SMS?
- How can/should we track usage of SMS in the app?
- How can we …
Next Christine works with her team to identify the riskiest uncertainty in the list. These are questions that, if answered "no" or "not possible", would stop the project. They are often about the feasibility of a solution. By answering these questions up front the team won’t waste time on an impossible project.
Christine schedules time for her team to answer these specific questions. The answers look promising so she then organizes a mini-hackathon. This is a time-boxed event for her team to build a working prototype as fast as possible. Christine and her team complete this work with a better understanding of the code. They also reduced some secondary uncertainties, including the decision on whether to use a library or build a UI to display SMS. And lastly, they add new uncertainties they discovered to the list.
Christine can use what she now knows (and what she now knows she doesn't know) to better estimate and plan work. Her team estimates the work considering time to develop, resources and the remaining uncertainty. She assigns higher estimates to the parts of work with higher uncertainty. Next she provides a realistic project timeline to her stakeholders. The SMS in the mobile app project will take 3 to 4 months considering existing commitments.
It's unrealistic to reduce all uncertainty up front. Christine plans to tackle the parts of the project with the highest uncertainty first. Christine and her team can inform their stakeholders about new discoveries as early as possible. Then together they can decide to adjust the project timelines or pivot to a different project.
Why is this important?
Identifying, reducing, and planning for uncertainty allows companies to better compare projects. Companies can identify the higher leverage projects to work on now. Managing uncertainty well also allows teams to build and maintain trust with stakeholders.
Christine has successfully delivered on her last two projects. Her stakeholders at Company ABC are confident she will meet her commitment with this new project. They can appropriately plan their own work around the 3 to 4 month timeline.
To be successful like Christine, start accepting and welcoming the unknown. It’s in this uncertain space where important growth opportunities live.
How well do you manage the unknown?
About Jobber
We are hiring for remote positions across Canada at all software engineering levels!
Our awesome Jobber technology teams span across Payments, Infrastructure, AI/ML, Business Workflows & Communications. We work on cutting edge & modern tech stacks using React, React Native, Ruby on Rails, & GraphQL.
If you want to be a part of a collaborative work culture, help small home service businesses scale and create a positive impact on our communities, then visit our careers site to learn more!
Top comments (0)