“Ideas are easy, implementation is hard.” Does this sound familiar?
If you read the same blogs as I do, hang out on the same websites, listen to the same podcasts, you’ll have heard this gem a thousand times. But rarely are we offered advice on what to do about it. How do you get from idea to product? How do you get through that implementation phase and see your app released to market?
So many side-project developers hit the coding equivalent of writer’s block. We have the idea, we know how to write code, but we can’t seem to progress our app. Disparate bits of code, and Word documents filled with feature lists languish in folders called ‘Ideas’ or ‘Projects’. They sit there as a constant reminder of our failure to see things through, perpetually signalling to us that we’re not one of those people; that we’re not Mark Zuckerberg, Jack Dorsey, or Stewart Butterfield.
The American writer Anne Lamott wrote a great book called Bird by Bird. Subtitled “Some Instructions on Writing and Life,” it offers up pearls of wisdom that are as well suited to the solo developer building an app as they are to a writer beginning work on a novel. Her two most helpful pieces of advice are: Short Assignments and Shitty First Drafts.
Just like a writer is not writing their whole novel in one sitting, you’re not building your entire app today. You need to focus on one small thing, not the entire app with all its dependencies, complexities, and unknowns.
As you start out, there are a host of things you don’t know, problems that have to be solved that you haven’t even begun investigating. You’ll need to work with technologies you’re unfamiliar with, build layers on top of layers into your code, interact with third party services that you know are going to be buggy or difficult to understand. You’ll have a feature list as long as your arm, a vision in your head of a polished UI, and a fear of releasing something sub-standard that gets you mocked on Hacker News.
Anne Lamott’s advice to writers in a similar situation is to focus on something small when they sit down in front of their keyboard. A paragraph where one character meets another, a setting introducing a small town. No more. Forget the novel, the grand themes, the huge scope of what you want to achieve. Today, the writer’s job is to write that one paragraph.
For the developer, when you sit in front of your screen your job too is to build one thing, and to keep that one thing as small and as simple as possible. Today, a database schema with a few interacting tables. Tomorrow, an API with a single endpoint that returns data from that database. The next day, a page in your app that calls your API and displays that data.
One small step at a time. No need to investigate authentication at this stage. Park that for later. Ditto for building your database on Azure or AWS. Keep it local and keep it simple. This way you achieve something every day. You progress your app each time you sit down to work.
It’s the slow accumulation of all these short assignments that grows your side project from idea to fully implemented product. One small step at a time.
Shitty First Drafts
A published and acclaimed author presents an almost picture-postcard image to the world. That image is often of a great writer who writes poetic or flowing prose, captivating characters, and engrossing novels. But it rarely starts out like this. Not for Hemingway, not for John Grisham and not for JK Rowling. First there was the shitty first draft. Then the second draft that was better but not quite there yet, and so on until a polished novel appears on the shelves of the local bookstore.
If a writer doesn’t finish a first draft, they’ll never finish a second or a final draft. The same goes for every developer working on a side project in the evenings and weekends. Allow yourself the luxury of creating an imperfect and clunky alpha version of your app. Don’t be the perfectionist who writes some great modules of code but never releases a version 1.
You’re working in isolation with no eyes on you. It’s more important that you get that early version finished and released than it is that every line of code is optimised and every feature immaculately constructed.
Your early users will be few and far between. As you grow your app you’ll have time to edit and improve: to polish the code, refine the UI, streamline the user experience and add richer features. If you try to make it perfect in every way before you release that first version, or if you stop work because you don’t think you have what it takes to build a great product, your app will never see the light of day.
Facebook, Twitter and Slack were not built overnight. However polished they looked when they were in their prime, there was a shitty first draft. If your early versions are messy, that’s ok. You can clean up the mess later. And who knows, inside the mess you may discover the soul of your app, that special something that makes it truly unique and yours.