Adapted from advice I wrote back in May 2016

Here are my Top 15 dictums for a new developer:

  1. Do what you most dread doing first. Do the hardest thing first. Address the elephant in the room. Tackle the biggest source of ambiguity and uncertainty first. It will make the subsequent engineering planning easier and less stressful.
  2. Divide and conquer. Break up the work into smaller, modular chunks for incremental development. Test those smaller chunks. Don’t wait until you have a lot of untested code before testing it for the first time. Keep your potential surface area for debugging small and manageable.
  3. Get to coding quickly. While having a plan before starting to code is incredibly important, relevant implementation questions almost always arise during the natural discovery that happens when needing to resolve ambiguity at the level of rigor of code.
  4. Illuminate the black boxes. It’s not magic. Seek to understand what is happening underneath the hood.
  5. Utilize the scientific method. When debugging, construct a hypothesis explaining the system behavior and figure out how to test it. Eliminate confounding factors. Be methodical. Isolate the behavior in question. Investigate rigorously.
  6. Write good code. Write the cheapest, minimal, correct code. Remember that code is a liability.
  7. Name well. Naming well is an important developer task. Assume your code will be looked at by another person one day, even if that person is future you. Invest the time now to name things well.
  8. Assume code that you haven’t run yet does not work. Never assume code just works. In fact, assume that all untested code does not work. Errors can and will arise from a variety of circumstances. Always test your code. Test, test, test. It’s difficult to overemphasize this.
  9. Do things just-in-time. Like your code, evaluate lazily. Figure things out as you need to and learn as they become relevant.
  10. Manage distractions. Protect your focus. Context-switching is expensive, not just for operating systems.
  11. Manage your energy. We often think in terms of time: “If only I had more time”. But frequently, instead of time being the limited resource, it’s often energy. Energy level and attitude affect work and output. Be aware of your physical, mental, and emotional energy level. When your energy is low, work on restoring it.
  12. Manage risk. Say no to factors that could endanger the mission. Be wary of downstream consequences for every change. Test. Ensure the staging environment works and was identical to the production environment before deploying. Don’t deploy at times of high risk. Never deploy right before you leave for vacation.
  13. Remember that work life and personal life are intimately intertwined. Work sustainably, live sustainably: they go hand-in-hand. Fires in your personal life will spread to your work and vice versa. Life happens, and it’s OK.
  14. Invest in your development environment. Reduce those little frustrations. Use the right tooling, IDE, aliases.
  15. Invest in yourself. Remember to take time to learn. That is how you become a better developer, how you build engineering capacity, and how you increase your engineering throughput.