This is the second in the series of The Well Rounded Developer. See previous post "Network Troubleshooting for the Well-Rounded Developer"
Whether you are a solo developer working directly with your clients, or a software engineer part of a larger team that's delivering a large feature or service, you need to do more than just shipping code. To succeed in your role, you also need good project management skills, regardless of whether there's an officially assigned "project manager". By upping your project management skills, you'll increase the odds of delivering consistently and on time — necessary for earning trust among your peers and stakeholders. In fact, I'd go as far to say that it's critical for your Personal Brand
Just like programming, project management is another skill that requires practice — you'll get better with it overtime. Sometimes you'll grossly underestimate a task, thinking it'll take 3 days ... when it really took 10 days (or more!). Don't sweat it. Project management gets easier the more you do it.
This seems obvious and almost goes without saying, but as a developer, you need to be able to extract the mental image of your customer/product manager. Then, distill them into words, often referred to as user stories: "When I do X, Y happens" or "As a [role] ... I want [goal] ... so that [benefit].
These conversations will require a lot of back and forth discussion. With each iteration, aim to be as specific as possible. Include numbers, pictures, diagrams. The more detail, the better. And most important, beyond defining your acceptance criteria, spell out your assumptions — loud and clear. Because if any of the assumptions get violated while working on the task, you need to sound the alarm and communicate (see "sending frequent communication updates" below) that the current estimated time has been derailed.
When we receive a packet with a length exceeding the maximum transmission unit (MTU) of 1514 bytes, the packet gets dropped and the counter "num_dropped_packets_exceeding_mtu" is incremented.
Most importantly, keep your stakeholders in the loop. Regardless the task at hand is trending on time, slipping behind, or being delivered ahead of schedule, send an update. That might be in the form of an e-mail, or closing out your task using your project management system.
More often than not, we developers tend to send updates too infrequently and as a result, our stakeholders are often guessing where the project(s) stand. These updates can be short and simple: "Completed task X. Code has been pushed to feature branch but still needs to be merged into mainline and deployed through pipeline."
It pays off to break down large chunks of work into small, actionable items.
The smaller, the better. Ideally, although not always possible to achieve, strive to break down tasks such that they can be completed within a single day. This isn't an absolute requirement but serves as a forcing function to crystalize requirements. Changes are, the larger the estimates, the greater chance of it slipping off schedule.
Of course, some tasks just require more days, like fleshing out a design document. For ambiguous tasks, create spike stories (i.e. research tasks) — just make sure these discovery tasks are time-bounded to a few days.
Project management is an essential skill that every well-rounded developer must have in their toolbox. This skill combined with your technical depth will help you stand out as a strong developer: not someone who just delivers code, but someone who does it consistently and on time.
Let's chat more about being a well-rounded software developer. If you are curious about learning how to move from front-end to back-end development, or from back-end development to low-level systems programming, follow me on Twitter: @memattchung