I've been a professional programmer now for about five years. I've been coding for perhaps a little over seven years, in that time, besides tasks in my day jobs. I have completed absolutely nothing.
No side project I've ever worked on has ever been completed, bar a few freelance jobs here and there. That isn't because I've never started any either. Anyone who knows me, knows I go home and code until the early hours most nights. So what the hell have I been doing?
Well I've been trying to run before I could walk. I've been so utterly distracted by 'shiny things'; i.e new technologies, new frameworks, new languages, new approaches... I've effectively learnt how to start a new project in a thousand different ways. But I've never actually learnt how to finish what I've started.
I've been working on the same start-up now for about four years, now I've read all the books on how to make a successful start-up, and if there's one thing I know very well, it's that you have to release early, create an MVP, do the bare minimum. So why is it that four years later, I've crafted an auto-scaling, multi-zone, cloud infrastructure for my start-up, of which is entirely useless. Not one single complete feature.
This same start-up, I wrote in 10+ interconnected gRPC microservices, three databases, built on top of my own Golang microservice framework. I'm embarrassed as I write this, but I feel this is a part of accepting something all programmers go through.
I'm learning now to cut through the noise, cut through the hype and just use whatever tool gets the job done. Okay so writing a cloud infrastructure is probably more exciting than just using a single server instance, but ultimately which gets the project done and out the door? What's the point having a perfectly orchestrated cloud stack, for a bunch of hyper-complex, incomplete code, that only I can work with?
Okay so it was all valuable learning, but sometimes you have to separate learning from doing to some extent. Or risk never getting anything done.
I'm challenging myself now to do the opposite, keep things extremely simple, unglamorous, dumb, sometimes ugly. But done. No more big re-writes because there's some hot new JS library. No more microservices for the sakes of it, no more overly ambitious build pipe-lines. NO MORE TRYING TO REWRITE THINGS IN HASKELL. JUST. GET. SHIT. DONE.
Update: I've had someone with a lot more experience than me respond to this post, with some awesome advice to anyone in a similar rut as me. Thanks again, Neil!
Update 2: Another great response
Update 3: And another!
If you're using AdBlocker, fair play, I don't blame you. But please consider chucking me a couple of quid: https://monzo.me/ewanvalentine
- Changelog Newsletter
- Shipit Newsletter