I’ve been a software engineer for a little over a decade now, and I like to think I’m a pretty organized person. I have a system for everything, and these systems help my mind and my day run more smoothly.
Organization isn’t something that comes naturally to everyone, so today I thought I’d share some of my strategies that help me have a productive and fulfilling work day.
I’ve organized them below sequentially, walking you through how I start my day, things I do throughout my day, and how I end my day.
Start of my day
Startup tasks and message checking
To get oriented each morning, I check several things:
- My calendar
- My todo list
- Slack
This usually takes just 5–10 minutes and helps me get ready for everything going on that day.
If I have an interview to conduct, I’ll block off time on my calendar before the interview to prepare and after the interview to submit my feedback. If I have a 1on1 with my manager, I’ll add an item to my todo list to prepare notes for what I want to talk about.
If I have emails or Slack messages that need my attention, I’ll either respond to them right away or add an item to my todo list. As a rule of thumb, if the message only takes a couple minutes to respond to or take care of, I’ll just do it right away. If it’s something that will take longer, like someone asking me to review a pull request or a tech spec, I’ll add that to my todo list.
Good morning and morning report
Next, I go through a small routine of morning tasks. This involves saying good morning to my teammates over Slack (we’re all remote) and sending out a short morning report of noteworthy things going on this day.
The morning report usually includes our sprint goals, pull requests and tech specs needing review, and any relevant upcoming events or action items. The morning report only takes a couple minutes to write, and it helps keep everyone on the team on the same page.
Accessibility tip of the day
I’m passionate about web accessibility, so each morning I also send out a short “Accessibility Tip of the Day” in Slack. This tip of the day is a short tidbit of info, usually focused on engineering, product, and design. I’ve been doing this for about a year and a half now, and I’ve written 300 tips so far! (You can find them on LinkedIn under the hashtag #accessibilityTipOfTheDay.)
Urgent tasks and unblocking others
At this point I’m usually about a half hour into my day. If there are any tasks that urgently need to be done, and they can be done quickly, I’ll try to knock out several small things in the next half hour. This usually includes short pull request reviews. I always appreciate people quickly reviewing my code, so I try to do the same. This helps unblock other engineers who are waiting on a review, and it helps keep the work moving along.
Throughout the day
One big impactful thing
What the rest of my day looks like will vary based on how many meetings I have or if I have an interview to conduct, but on my todo list I always have one big thing that’s my main goal for the day. If I can get this one thing done, I’ll consider it a successful day. This could be something like completing an important Jira task, writing an RFC, or finishing a blog post draft for our engineering blog. Whatever the task is, it’s usually something that I need 2–3 hours of uninterrupted time to complete.
This “one big thing” strategy has a lot of different names, and you may be familiar with ideas like:
Paul Graham’s essay “Maker’s Schedule, Manager’s Schedule”, where he argues that software engineers (“makers”) need about a half day of uninterrupted time to get any meaningful work done
Brian Tracy’s book Eat That Frog!, where he encourages you to do the hardest thing in your day first
Mihaly Csikszentmihalyi’s book Flow, which describes a “flow” state of intense enjoyment, creativity, and/or productivity in which you lose yourself in what you’re doing
Oliver Burkeman’s 3–3–3 method, in which he advocates for spending three hours on an important task, doing three smaller tasks, and doing three maintenance tasks each day
The rocks and sand in a jar analogy, which teaches that you should focus on the big important things first (If you have large rocks, small rocks, sand, and a jar, the order in which you put the items in the jar matters. If you put the sand and small rocks in the jar first, you’ll find that the large rocks don’t fit. But if you put the large rocks in first, then the small rocks, and next the sand, you’ll find that there’s room for all of them. Prioritize the big important things, and there will be room for the rest.)
Several smaller things
I dislike context switching, so after I’ve finished my one big thing, I’ll do a batch of smaller things all in a row. This could be reviewing more pull requests, writing or improving a wiki, reviewing a tech spec, responding to new messages, completing a shorter Jira task, or reading a short blog post.
Note taking
I learn best through written communication. I’d much rather read something than watch a video or have a meeting, and I’m much better at organizing my thoughts when I write them down.
For just about any task I work on, I open a scratch pad in my Notes app to jot down my thoughts. When working on an engineering task, I might write down bullet points of what the problem is and how I’m planning on solving it. When troubleshooting something, I’ll write down the steps I took and what did or didn’t work. This helps me work through problems and also makes it really easy to send my notes to other engineers if I need help.
This written log usually isn’t something that I ever need to look at again after I’ve finished the task, but it does sometimes come in handy when I encounter a similar problem in the future and want to see how I solved it in the past.
Todo lists
I’ve mentioned my todo list already that I create and review each morning. Throughout the day, if a thought pops into my head for something I should do, I add it to my todo list right away. This allows me to go back to whatever I’m actively working on without needing to worry about remembering this other new thing.
I’ve found that the more information I can get out of my head and written down, the less cognitive load I have, and the less I need to remember.
Strategic timing
You can get a lot more done in a day if you do things in the “right” order. For example, if I know that I have two hours of meetings in the afternoon, I try to get a pull request ready before then. That way, someone can review my code while I’m in meetings, and (hopefully) my pull request will be ready to be merged as soon as I get out of my last meeting.
Similarly, if I can get something up for review in the morning, that leaves time for me to switch to other smaller tasks while I wait for a review (the rocks and sand in a jar analogy).
End of the day
Shutdown routine
I end my work day in much the same way that I start it. Before signing off, I review my calendar for tomorrow, and I add items to tomorrow’s todo list.
Both of these things are a shutdown routine to help clear my mind so I don’t keep thinking about work for the rest of the day. If a work thought does pop into my head during the evening, I’ll quickly write that down on my todo list so I don’t have to worry about trying to remember it tomorrow. This helps reduce the cognitive load, lets me focus on my family, and also ensures that I don’t lose any “aha” moments when a sudden stroke of insight occurs.
Conclusion
I’ve more or less followed this routine for years now, and it’s helped me immensely. I hope something in this piece has resonated with you and will help you too! Thanks for reading.
Top comments (0)