As a software developer#
by Lohn "Human Terror" Hochstein @norootcause
As a Software developer, you may be called upon to perform some of these
tasks in your career. How well a CS degree prepares you for these tasks
(and whether it even should prepare you for these) is left as an
exercise to the reader.
- Make a behavioral change to a medium-to-large system that you don't
understand.- The system is "slow". Figure out why.
- Review a colleague's code and provide meaningful feedback. The code
may be in a part of the codebase that you don't have any personal
experience with.- Write user-facing documentation (this includes API docs).
- The system is down. Help get it back up as quickly as possible.
- The system is down. To get it back up, you will need to perform a
number of repetitive manual actions. Alternately, you can write a
script to automate them. Determine which approach to use.- Solicit advice from a colleague about a design problem you're
facing, given that you've thought about the problem for a lot
longer than they have.- Identify that progress will require a meeting, organize the meeting,
run it, and capture the outcome.- Propose, in writing, your favored solution to the technical problem.
Solicit and address concerns from your colleagues.- Communicate the status of your work-in-progress to your manager in a
way that both reflects your uncertainty and is useful for your
manager.- Take part in quarterly planning of development work, prioritizing a
set of proposed work.- Advocate for reliability-related work, since it will never be driven
by customer asks (although they will be upset if the service goes
down).- Analyze a system outage to understand how it happened (one of my
personal favorites).- Migrate your service from one platform to another without impacting
customers.- Convince a team that consumes a platform you provide to migrate from
the old version to the new one, and then retire it.- Figure out how to interface the system you are working on with
another system, that is poorly documented.- Make a change to a system that was implemented in a
language/platform that you have little-to-no experience with.- Debug a build that broke inexplicably.
- Review someone else's design proposal, and provide meaningful
feedback.- A technical decision needs to be made, and the stakeholders are
sharply divided on the proposed approaches.- Marshall support for your proposed technical approach through
one-on-one conversations with potential supporters.- Identify how your organization's power dynamics constrains the
types of technical solutions that are actually possible, so you
don't try to do something that has no practical chance of
succeeding.- Use the whiteboard to help bring your peers to a shared
understanding of some technical issue that you are working on.- Effectively coordinate with your peers when dealing with an ongoing
outage or other incident. (Hit the tweet limit, so stopping for
now)....(I'll randomly do some more as it strikes me)...
- Instrument your code to make it easier to reason about its behavior
when it's running (i.e., improve operability).- Describe, in writing, examples of the human activities that your
software system is intended to support.Develop a deeper understanding of a system that you now work on but
^Wdidn't build.Look into the history of how an internal system came to be
implemented the way it was.