Perfect is the enemy of good
Voltaire is alleged to have delivered this pearl of wisdom that resonates across the ages.
Perfect is the enemy of good.
Were he alive today, the great philosopher might have penned an update with the beginner web developer of 2019 in mind.
Interesting learning opportunities are the enemy of getting the basics right first.
Setting up a personal profile site is the Project 0 of every aspiring developer. The excellent Dev Ed podcast gave me the idea of doing my learning in public, and what is a web developer without a website?
Cue several hours days spent playing around with virtual servers on Azure to host the fantastically interactive, data-driven projects I flattered myself I would be delivering in mere weeks.
Hello World
be damned, I was going to set the web alive.
I think you know how this one ends.
Needless to say, you’re reading this on a static site built with Jekyll and hosted on GitHub Pages.
Here’s how I got here:
-
Virtual servers on Azure, this is how Big Tech hosts its web apps so that’s what I’ll do too.
-
Blimey this is a bit complicated, and could be expensive. I want to be a developer, not a cloud administrator and so far I haven’t written a single piece of HTML. Hm. Let’s take a look at WordPress.
-
Ah OK, this is a bit hands-off. I could create a website/blog without getting my hands dirty, but I really need somewhere to play around with look and feel. Maybe some frontend apps using all this React stuff people are talking about.
-
What about Netlify/Wix/… and so on?
I chose GitHub Pages after reading Jonathan McGlone’s step-by-step guide. Jonathan also hosts using Jekyll/GitHub Pages, and he posts a really good rational for this here.
Essentially, you need to select and maintain the aim:
Selection and maintenance of the aim provides a focus for coordinated effort and a reference point against which to measure progress. Following this principle prevents unnecessary activity and conserves resources. The single aim must pervade subordinate opeations so they contribute to achieving the end-state.”
To ensure that they remain valid, plans must be checked continually against the strategic objectives.
This is the first principle of war, part of British military doctrine. It was developed for these chaps:
Whatever your politics, the principles of war contain great relevance for those embarking on any endeavour with a goal in sight. (Maintenance of morale is a particular favourite.)
Back to the world of web development, how do you select and maintain the aim as you go about becoming a better developer?
Is it your objective to administer a database in the cloud? No.
Do you really need to create and host backend driven web apps at this stage in your learning journey, when tinkering on a local server and hosting the code in GitHub would do? Probably not.
No, my personal journey is the most efficient path between now and a job as a junior developer when I finish my current employment in November 2020.
Perfect is the enemy of good.
I learnt a new tech term a few weeks ago that updates Voltaire’s wisdom for the modern age: the Minimum Viable Product.
The MVP’s main premise is not to fuss around with perfection whilst your competitors are capturing market share. Release the Minimum Viable Product and act on feedback very quickly. For me this meant:
- Stop wasting hours browsing Google Fonts and Typewolf.com finding the perfect serif typeface for headers and sans-serif for body text.
- Stop playing around with creating an 8-bit avatar profile photo.
- Stop trying to understand every detail about Ruby, Sass and Git (the technologies that underpin a GitHub Pages + Jekyll deployment).
- Stop getting distracted by embedding Google Analytics and Disqus commenting to engage with all the site visitors you don’t have.
Instead, get a basic site up and running and make your first post.
So here it is: the Minimum Viable Product, hosted on GitHub Pages, using the default Jekyll theme minima.
Voltaire didn’t make websites, but if he did…
It’s ready for your feedback, though you’ll have to contact me on Twitter as I haven’t deployed the comment function. 😆