How I Work
November 02, 2021
I really enjoy exploring new ideas and the process of distilling them into something. These ideas range from challenges that crop up at work or something I wish existed for myself and others. Often these ideas end up taking shape in the form of code and sometimes also have an intersection with the tangible world. While how I work is probably not all that unique it’s something that I genuinely enjoy so I figured I’d jot it down. Some of the example images below are from a web app, Rhythmisch, I finished a few months ago.
When inspiration strikes I try and write down the idea quickly. I’ll jot down the thought either in Bear on my phone or in one of my notebooks that I try to keep nearby. I’ve been using Muji notebooks for years, they’re great. I usually end up plastering them with stickers. Without recording the idea I find that it keeps bouncing around or I eventually forget and regret it later. An idea might have a short shelf life. Many of the random thoughts end up being less exciting later, already done but better than I could have imagined, or just silly… and that’s alright, it’s fun to daydream. What’s most important is knowing what the idea’s purpose is. It might be to have fun, learn a new technology or tool, or solve a concrete problem, but whatever it is, it’s important to track throughout to help guide design decisions.
The ideas that I decide to dig into I end up exploring usually with more notes and very rough sketches or diagrams. Quite a bit of time is spent in the notebook skimming through the idea and its layers. It’s a pretty cheap method for trying to orchestrate the mechanics of an idea and discover what kind of primitives and structure is needed. If the idea has an interface or some other experiential components I will try and capture at a high-level and what sort of vibe they should have. If there are previous works or inspirations I’ll look those up and note them. Sometimes an idea will require other services, technologies, or general research and those will get thrown in the notebook, too.
A blocker here will be the name. I can’t proceed without having a name that I can rally behind. Sometimes I’ll go as far as make a logo, too. There has to be a good story behind the idea.
At this point with a bit more context I’ll do a gut check and decide whether or not I’m still excited by the idea. An implementation can take months and if I’m busy it’s perfectly fine to leave it. If I have the time (or if I’m getting paid to think about the idea) I’ll get to work. I try to keep the idea trim so it has a decent chance at shipping and is easier to host and maintain.
Planning usually consists of a transferring a bit of the tangibles from the notebook to a documents in Notion. I’ll try and figure out some of the tasks and what needs more clarity. I’ll fill these digital notes in with finer details and links to inspirations and resources.
Next, I might do a spike and prototype or visualize the idea in some way, using the design primitives I’ve established earlier. Usually, the lower the fidelity the better. If I’m working on visuals I might still be drawing in the notebook and then move to Sketch. If it’s a library I might write some pseudo code of the API on how I would like it to work. If there are dependencies I might try external services and APIs and make sure they provide what I expect.
Typically, once I have settled on some concrete ideas I’ll break them down into specific tasks in Notion. With these tasks I’ll start building. This part is pretty encouraging with the thing starting to feel more real. Progress moves along and within 3-6 months it is about ~80%. It’s the last 20% of refinements, tweaks, finding edge cases, and trying to nail the implementation that ends up taking nearly as much time as the initial 80%. It’s tempting to want to add more but getting the first version shipped in a form that I can be proud of becomes the priority.
Being able to celebrate a first version and share it is one of the most rewarding parts of the process. Throughout the process it’s pretty normal to set something down and come back to it later. In the last few years I’ve tried not starting something new without trying to go back to a previous idea. For hobby ideas I find working on two concurrently to be the sweet spot, jumping between them as I feel inspired.
Here are some of the projects I have released:
- Rhythmisch, a web app to help make habits
- GraphQL Mocks, a GraphQL mocking library
- COPR, a tic-tac-toe artificial intelligence in CSS (yes, stylesheets)
- Vorfreude, a countdown chrome extension, pulling relevant images from flickr
- Vouch, a promise library written in javascript, re-written in typescript, and should not be used in any production systems (but hey, I really understand promise mechanics now)
- This blog
- … and more projects coming soon!
What’s your process for shipping things? Let me know.