Maintaining and developing Ash Framework is essentially my full-time job. Here is what it looks like.
I occasionally work on our client projects at Alembic, something I actually really enjoy doing. Chris McCord talks about the benefits of using our own tools in anger, and I completely agree.
I’ll be focusing here on those days when my time isn’t spoken for by clients for the majority of the day. I’m also not focusing on the technical content of my day, but on the mindset and methods I use to Get Shit Done.
I have a problem
You’re going to see it soon enough, but the truth is that I have what is effectively a pathological level of concern for the members of the Ash community. My relationship with my work and how I balance it is something that I’m actively working on transforming. In fact, that is a part of why I’m writing this newsletter!
It helps me to write. It makes me feel like my output can be measured in more than bugs fixed and features announced. It gives me an avenue of expression to the users that I spend my days working on behalf of, and makes this all feel that much more like a conversation.
So write I shall!
Wake up
The first thing I do in the morning is look at my phone to see what issues/requests have come in overnight. Like before I get out of bed. This is probably the number one thing that I’d like to change. But every day is so wildly different depending on what sorts of things have come in from users on that day.
If there is a serious bug, then it takes priority over my feature work. If there are a lot of new people getting started that day, my morning will be filled with conversations helping them get started. If some of my clients have had questions or have requested PR reviews, then that has to happen too. It’s a very dynamic way to work, something that I both appreciate and that exhausts me.
Start the loop
I honestly don’t know if this is something that other people do, but I practically live my life in the loop. The loop is a simple concept, geared towards managing a firehose of incoming work, and helping an anxious programmer feel like they aren’t leaving anyone hanging.
I have a list of the kinds of things I have to do each day. Starting with work generating items at the top, and deep/engaging work at the bottom. For example, my list looks something like this:
Check email, Discord, Slack, Reminders, ElixirForum, Bluesky, Twitter
Fix serious bugs
Answer questions
Implement next item on roadmap
Announce new features, or write new content
Fix minor bugs
When I get to the bottom, I go back to the top. I’ll skip items if I’ve done them recently enough that new things shouldn’t have popped up. My priorities may change from day to day, but it doesn’t deviate much from this pattern.
5-minute rule
As I’m going, if anything comes up that would take less than five minutes to handle, I handle it on the spot, no hesitation. This is one of the main reasons community members get support as quickly as they do. They don’t get “filed away for when I have time”.
This is actually a commonly occurring rule in productivity systems, but I have one personal change to it that makes all the difference.
When something comes up that would take more than five minutes to handle, I find any part of it that will take five minutes or less to perform, and do that immediately. For an issue report, this might mean finding some clarifying question that I can ask the reporter that will help me when it comes back up in my loop. For a feature, or a project, this might mean “identify a few large themes in the request and write them down” or “re-summarize the effort in my own words.”
Taking on new work
For anything that takes more than five minutes, I will first comment to indicate that I’m aware of the item if necessary. Then, I’ll do one of two things:
Mark it as unread. This is an escape valve for when I really just do not have time to consider the item at all.
Decide when I’m going to consider the item again, and push the item off until that time. 9 times out of 10, this means I put a scheduled reminder into Apple Reminders.
When scheduling work, an important part of my mindset is that I’m not necessarily committing to do it at that time, only to consider doing it at that time. It can be a commitment, i.e in the case of time-sensitive items, but it does not have to be.
When a scheduled item comes up, I either handle it, or I push it to another time after applying the 5-minute rule. In this way, all the needles get pushed forward at least a little bit whenever they come back up in my loop.
Nothing gets lost
By operating this way, I ultimately do not miss even a single item that comes up as I’m working. If I ever load-shed incoming work, I do it consciously. I don’t miss notifications, emails (inbox zero is the way). If I ever do, it’s because I didn’t have something adequately hooked up to my loop (like I wasn’t watching a GitHub repository I should have been watching) and so it’s easy to rectify.
This means confidence for those interacting with or depending on me, and a feeling of control for myself.
Context switching is key
The way that I work necessitates switching modes often. I go through my loop hundreds of times a day. Sometimes stopping in the middle (at natural break points) of feature work to make sure that all the plates are still spinning. Everything I’ve read says that context switching is the death of productivity. Either I have a unique ability to context switch, or that isn’t exactly correct.
Close the loop
One thing I’ve found is that it can be very difficult to break out of this loop when it’s time to shut down. I’m so used to feeling confident that all my inboxes are cleared. I struggle often with putting my work down at the end of the day.
Something I’ve noticed that helps is setting a quit time at the start of the day, instead of trying to do it when you’re “done with your work.” So my loop these days has an item at the top that says “schedule shutdown time.”
And this is what I do, day in, day out
I honestly have no idea how unique this mental model for getting my work done is. Maybe it sounds wildly obvious to those reading it. Maybe everyone has a loop built in, and the fact that I’ve formalized my own loop a bit is weird. Maybe it takes 763 licks to get to the center of a Tootsie Pop. The world will never know.
I enjoyed this post. How does your workflow look like? How do you get started and what tools do you use?
I admire your work and how you deliver many features in short periods of time. I can learn 1 or 2 things from your workflow.