this is not advice, even though it’s phrased that way. This is just some stuff
that feels like it’s working for me right now so I wanted to write it down. I
will go back to writing about strace again soon.
The premise is – I have a job. I work on a pretty small team, and so what I
personally get done is a pretty large part of what the team overall does. So
given that I work on a good team that helps me do things, what can I
personally do to be better at getting things done?
Have a vision (maybe even the right one)
We talked about this in How do you decide what to do?.
This is the “can I explain what I’m doing to someone at a conference?” test. When I can’t do this I find it really hard to get things done. This is because without a framework for what I’m doing (“make our infrastructure cheaper to run! Make it easier to debug problems! Improve reliability by making it harder for humans to make mistakes! protect our customers from fraud”), it’s really easy to get stuck in small day-to-day decisions about what direction to take.
I asked a coworker one time about how to have a vision if I wasn’t even sure what the Right Vision Was! He suggested just picking a vision that seemed mostly reasonable and then moving that way until I learned more. This was actually really helpful.
Focus (do one thing at a time, maybe two)
When I actually focus on a thing, I’m always amazed by how much I can get done. If I do more than about 2 things, then all of the things take forever to get finished.
I think “focus on one thing” is not good advice how higher-level people (like executives who need to keep track of a huge number of things going on in their organizations). But for me (an individual software engineer), it works best if I just pay attention to one or two things at a time.
Learn how to break things down
I think this is how you get from ‘vision’ to ‘focus’ – you can’t actually execute on all the parts of your vision at the same time. I think I’m getting better at being like “ok, I’m going to this Distant Container Island, I’m first going to go pick up some provisions in the Lagoon of Configuration Management”.
This is a hard thing to do but I think I’ve gotten better at it over time.
Try to get something done every day
So, there are all these daily productivity hacks, like not checking Twitter
too often or only checking your email 3 times a day, or whatever. I don’t know
about those. One reasonable heuristic for me is – if I’m doing an Important
Thing (“do one thing at a time, maybe two!”), then I should try to make at
least some progress on the Important Thing every day. If I do that, then I’m
definitely always getting stuff done.
Talk to someone when I get stuck
I get stuck sometimes! I’ve tried to stop feeling bad about telling someone when I’m stuck, and just go talk through whatever I’m working on with a person who usually helps me get unstuck (hi, Franklin). Asking questions is a superpower.
Don’t be scared of small problems
I’ve noticed that when I work on things, there is usually a weird maze between the Start Point and the Thing Actually Being Done. The maze is full of unexpected problems and OH MY IS THAT HOW THAT SYSTEM WORKS OH GOODNESS OKAY. I can figure out some of the biggest problems in advance by writing a design document, but there will always be surprises.
I used to get a lot more scared when something unexpected happened like OH NO WHAT IF MY PROJECT WILL FAIL EVERYTHING IS TERRIBLE. I’m trying to learn to be more optimistic and just think “ok, well, something weird happened, there are always weird things, it will be fine”. So far it’s working.
Do whatever’s necessary
This one comes straight out of my company’s value system. Sometimes I need to edit code in a codebase that, say, belongs to another team. Just to do a small thing. I have occasionally tried to ask them to write the code for me. This works approximately 0% of the time and takes weeks. What DOES work and is pretty fast is to:
Talk to someone on the other team about whether what I want to do seems reasonable
Ask them to pair for 30 minutes with me to get me started
Finish writing the code myself
So it turns out to get things done I have to do a bunch of things that I do not know how to do and am not necessarily qualified to do. Usually I can just do these things and it is fine.
I’m still not sure if this is useful but – sometimes I find it super useful to have an arbitrary deadline for a task, especially a big one. Like “You should be done with this in 6 weeks”. I don’t want it to be like “… or else you’ll be fired”, but I think deadlines are helpful to see when something’s growing in scope uncontrollably or is taking a lot longer than you thought. Then maybe I can cut features!
Believe in yourself
This is very feelings-y but it is pretty useful for me to believe that I can actually do the thing I’m setting out to do. That’s all. Often when I try to do a thing it turns out that I can do it, so this is basically reasonable.
I can do a lot!
It turns out that I as a human can do a lot on my own! Like, outside of work I made this zine, and I think it’s been useful to a ton of people! I’m really happy with the outcome. All I really had to do was have a small vision (“teach people how to debug their computers better”) sit down and focus for a while on a few weekends, be willing to ship something that wasn’t perfect, and have a deadline (I wanted to hand them out at Strange Loop this year).