If you follow me on twitter you may have noticed just over a week or so ago I managed to break my own website - in fact, I managed to break an entire server by attempting to profile the speed differences between a standard wordpress install (which this site ran on until today) and a site running on the jaoss framework.
This comparison wasn't so I could then write a gloating post about how slow Wordpress is, or how fast jaoss is - after all, Wordpress is nowadays an incredibly feature rich platform which has to be all things to all people, and jaoss simply isn't. The point of the comparison was simply to establish whether paynedigital.com could survive a sudden spike in traffic should it need to. I took voteforleeds.com as a benchmark as it was a site I'd recently built and know the code intimately, whereas Wordpress is a total black box - the inner workings of which I know next to nothing about. The end result was that the same apache bench test I ran against voteforleeds.com without a problem brought down the entire server when run against this site. This had me extremely worried, so three days ago I decided to do something about it after trying the various caching plugins for Wordpress and failing to find anything which really worked for me.
The main aims I had when starting the rebuild were:
- Quick turnaround time - I wanted the project live within days rather than weeks
- Faster response times (e.g. less server load)
- Similar core functionality (frontend wise) to the existing site
- Lightweight - only absolutely necessary features would be included
- Quicker & easier to amend, update and add functionality
- Open Source - this is nothing other people haven't done a million times over, so why be protective about it?
I decided to take the same approach I use on all my internal projects - a quasi Agile approach, using user stories to establish what had to be in for first release and what I could do without. In a single person team this leads to a natural form of BDD / TDD - although I must admit sometimes the 'T's did come after the 'D', though the site is on the whole fairly well tested with unit and application tests (always room for more though!). Jenkins took care of Continuous Integration and towards go-live time started to also automate deployment to the live server. No manual FTP or SSHing has ever been used to get the code live.
Well, this is it. When I say lightweight, I really do mean it - in the true spirit of Agile Development I haven't even built an administration area to manage the site's content, because I simply didn't need it for launch (it's on the list, of course).
In terms of absolute development time - that is, not time spent crafting user stories or other set up tasks, the build comes in at a pinch under 13 hours so far. That's 13 hours flat out and not necessarily at a pace that could be comfortably maintained over a longer build, but it's still a fairly satisfactory turnaround time from complete scratch (every 'app' was written afresh, not copied from elsewhere). It's definitely faster than the old site, though I never got any benchmarks from the Wordpress site so can't make any statistical comparisons. Making the project open source was never going to be a challenge thanks to the wonderful GitHub and the site as it is now will allow any features or functionality to be added with ease.
Mission accomplished - at least for phase one! There are plenty more things I would like to add and the site no doubt evolve significantly from this initial first step. Some sort of rudimentary design wouldn't hurt, nor would an admin area, and it'd be nice to add some fun features and functionality which wouldn't have otherwise been possible with Wordpress. The site is by no means bulletproof or blazing fast, so there's plenty of work to be done there too - but it's an exciting and rewarding start.
I'm sure there are plenty of things which don't work and lots of glaringly obvious improvements, so by all means please leave a comment or get in touch. Thanks!