One of the essential skills in software engineering is being organized.
I don’t mean how your team organizes its tasks, or the processes you use to divide those tasks up—of course that’s important too. I’m talking specifically about how to make use of your time on a keyboard in front of a monitor, how to navigate the firehose of information, requests and tasks each day.
To begin with, what is “being organized” and why should I care about it?
My just-now-made-up definition is roughly:
knowing what to do in the near-term; able to engage efficiently with what others need from you; ability to follow a deliberate path over medium and long term; engaging with a complex work without feeling overwhelmed and stressed
There are surely better definitions! In any case, I think we’ve all seen what being disorganized looks like: constantly shifting context; firefighting; making little headway on anything and the sense of dread.
🧰 It’s not about the tools
When I first started as a developer intern way back when, I quickly fell into a disorganized state, so I started looking for tools to help. I suppose that’s natural–we write software to solve problems, so it makes sense that we’d look to software to help with this, too.
It took me a long time to realize that being organized is primarily not about software and tools. (Those things play a role, but I’ll leave documenting what I use for another day.) The reason for that is kind of obvious now. You can have the best tools in the world but if you don’t have a set of practices and knowledge about how to use them, they’re not so useful.
🗺 Practices and habits
Instead of the tools, I find it more useful to think about my practices and habits. And specifically my practices and habits, what works for me, not what others espouse in the many methodologies (worth reading about!) for how to get things done. (As with the tools–I am also not going to document the specifics of what works for me in this post.) Am I constantly reacting to things as they appear in my notifications or do I have a system for triaging and prioritizing? Do I make time regularly to look at what I am doing in various time scales (today, this week, this quarter) or am I stumbling around without a plan?
The thing with process is that it’s hard to maintain and requires some discipline and reminders. It’s easy to say “ah cool, once I start using tool X everything will fall into place”; but like tending a garden, there’s a lot of patient, regular work to make sure you’re doing the right things at the right time.
🙈 Neglect isn’t sustainable
During crisis times (personal or organizational) I’ve often seen my process break down, because there’s more pressure to do things immediately, or less time in which to do work. Then I fall back to pre-being-organized habits–responding to things immediately, making no attempt to triage or backlog. That works short term but in any environment with multiple projects and daily interactions with dozens of people, abandoning process quickly leads to a lingering sense of dread and feeling overwhelmed.
⏳ It’s your time & mental health
There’s a trend to be as productive and efficient as possible in one’s day-to-day (e.g. setting OKRs for your personal life; meticulously scheduling the minutia of each day; abandoning cooking 🙀 in favor of soylent). I’m not interested in that. My aim is to reduce my stress and be able to work productively with others on meaningful projects (currently: imagining a world in which every single human being can freely share in the sum of all knowledge).
tl;dr being organized is worth doing, it’s a process that you have to tend to, and you have to find your own path because what works for others often isn’t going to work for you.