Three months ago paynedigital.com was relaunched on a completely bespoke hand-written platform, replacing a stop-gap Wordpress site. It's the perfect time of year for a bit of reflection, so I thought I'd write up how the site has evolved in the time since its launch. It's a bit of a self-indulgent, stat-heavy and technical affair, so if that doesn't sound like your cup of tea then feel free to enjoy something more useful instead.
Although I was pretty happy with the initial functionality of the site on (re)launch, inevitably the last 93 days have seen some changes. A quick look at the changelog on Github shows there have been 149 commits since September 17th, consisting of 91 changed files, 3,306 additions and 447 deletions (i.e. added a lot, removed some excess fat). The changes are largely feature-oriented rather than bug fixes, some of the highlights being:
- A basic admin area (September 20th) – the site went live without one, but raw database editing soon gets boring!
- Burn After Reading mode (September 30th) – allowing one-time preview links of unpublished articles to be sent to colleagues and friends (aka part-time proof readers) for review exactly as they would appear when published
- Shortlinks (November 7th) – handy permalinks to redirect any short URL to a longer local or external link (like this, this and this)
- Comment email notifications (December 4th) – to give users more control over their engagement with the site
- RSS feed of latest articles (December 13th) – as quite a few people asked for it!
- Related Articles (December 19th) – the most recent addition, to fill a glaringly obvious cross-promotional gap.
Of course, none of these features are anything more than you'd expect from a basic Wordpress / CMS installation (except for perhaps the BAR mode), but it's satisfying and re-assuring to know they are all hand-written features which do just enough to accomplish what I need them to do with no waste of code nor speed. This sort of laser like focus might seem unnecessary on a simple website, but they're key philosophies which apply with ever increasing relevance as the size and complexity of a project increases and applying them is a discipline which can—and should—apply to even the smallest of projects.
Mini Milestones: some numbers
- 60 releases since launch, all of which have been automated and none of which have broken the site. The percentage of releases-vs-builds is about 24%—actually quite low compared to the continuous deployment model I hope to eventually hit.
- 249 builds in Jenkins CI, 47 of which have failed due to broken tests. Still, better a broken build than a broken website!
- A rough average build time of 6-7 minutes, up from 2 minutes at first launch (blame the extra Selenium tests!)
- 310 unit and application tests providing 78% code coverage—not bad, but not good enough!
- 8,115 page views over the course of a few hours* after bootbox made it to the 5th most popular story on Hacker News.
- 0.08 rough load average during the Hacker News invasion (a completely unofficial figure gleaned from running top as the traffic came in). It was satisfying to see that the catalyst for the rebuild and the extensive profiling and caching techniques were getting their due reward. (The web server is a 512Mb VM running a typical LAMP setup and numerous other VirtualHosts).
* I'm not for a minute suggesting this sort of figure is exceptionally high, nor should it trouble a decent system, but it was the first significant high-volume, short-timeframe traffic this site had experienced
Effort Vs Reward—was it worth it?
Absolutely. The effort of developing the site (and subsequent improvements) is completely dwarfed by the benefits which come with having a bespoke, finely-tuned platform moulded perfectly to my needs. It's not all plain sailing by any means; tasks such as comments, email notifications, admin capabilities and RSS feeds range from the surprisingly complex to the mind-numbingly mundane—particularly when coupled with the self-enforced regime of Test Driven Development—but they're worth it. The result is a robust, quick, flexible system which although not without its quirks does exactly what it needs to and carries no change-inertia. I'm not going to pretend it's a world beating CMS, a Wordpress beating blogging engine or even a Symfony2 topping framework, but it's a happy medium which dispenses with all but the necessities and delivers the perfect solution—for me. That said, you may find some (or all) of it works for you too—so why not peruse the Github repository?
The site will no doubt continue to evolve at its own pace and in its own direction—largely in response to internal requirements or external demands. It still needs a proper design and a better administration system, but for a side-project I've become rather fond of it and am looking forward to seeing how it evolves over the course of next year (watch your back, Wordpress!*). The site itself is not at all a full-time focus; it fits around plenty of other projects, experiments and consultancy work, so in fact receives precious little time—a positive side effect being that every new feature undergoes significant scrutineering before making the cut.
if nothing else it nicely reflects the ethos, attitude and technical approach of the company it embodies in a transparent, sink-or-swim manner—all bundled up in one publicly available project with a permanent record of its history etched in the open source world. I'm not big on shouting from the rooftops, so I'm only too happy to let the site and the beauty of modern-day open source do the talking for me.
And so of course to the only way to end a reflective, end-of-year write-up: Merry Christmas, and a Happy New Year!
* This is a joke, obviously.