TL;DR

Relaunching and extending the scope of the 3Protocols site to include a blog required thoughtful consideration of scope, requirements, and available technologies.

  • I carefully considered the site’s requirements; namely that it must be easy to maintain, SEO friendly, and highly affordable to run.
  • As a web developer who prefers and specializes in Ruby, I chose to build the site using the Static Site Generator Jekyll ; this allows me to focus on writing using Markdown and avoid being distracted by HTML and CSS.
  • I chose AWS S3 and CloudFront for hosting the site; this allows me to easily deploy the site and cache it for fast delivery.

The Task at Hand

For every software developer maintains a website and blog, I’m sure 90% of them have also made reference to the old saying:

The cobbler always wears the worst shoes

… Or maybe it was:

The cobbler’s children have no shoes

Whatever of these you prefer, the point is that many software developers don’t find the time to build their own website or blog because their efforts are reserved for solving problems for their clients or users. Yet, sharing my perspective about pragmatic product development is important to me. So, I proceded, but not without some requirements.

3Protocols Site Requirements

  • The site must not be a technical distraction after launch and must be easy to maintain
  • The site must bias towards allowing me to focus on writing and publishing content, not HTML and CSS
  • The site must be very SEO friendly and cacheable by a CDN
  • The site must be highly affordable to run

The Solution

There’s a rich ecosystem of static site generators (SSGs)that are built on top of Ruby, Python, Javascript, Go, and myriad other languages. The core value proposition of SSGs is that they require no server-side processing (pages load very fast), are very secure (no server-side code to be exploited), and are very easy to deploy. As a developer who specializes in Ruby, my choice of SSG was Jekyll.

Jekyll lets me write the site and post content in Markdown, create a deployable site with a single command, and then upload the contents of the site to an AWS S3 bucket – which was infrastructure I was already using to host the previous version of the site. From there, I use CloudFront to cache and distribute those static files.

Which solutions missed the cut?

  • Wordpress – I’ve used Wordpress in the past and while it might be great for some usecases, mine was not one of them. Wordpress frankly offers too much functionality for my needs and requires more infrastructure to run than I’m willing to maintain.
  • A custom-built Ruby on Rails blog – I could have fine-tuned a site and blog to my needs, but in this classic “build vs buy” scenario, I choose to “buy” or utilize tools that are already proven to work.
  • Static site generators built on other languages – I am comfortable with my current toolbox of langauges (Ruby, HTML, CSS, Javascript) and learning new ones would have ballooned the scope of the project.
  • Hosting my site on GitHub Pages – This aligned with my selection of Jekyll and it’s a great choice for many software developers and teams. This likely would hacve been my choice if I didn’t already have my existing AWS infrastructure in place.

Future Improvements

  • To make editing even easier, I’ll be looking to fully automate deployment of updates to S3 without manually syncing.
  • I’ll continue to refine the design and layout of the site.

A summary of technologies used by this site

  • Jekyll - Static site generator
  • Ruby, SCSS and good old fashioned HTML
  • S3 - For hosting the static files
  • CloudFront - For caching and distribution of the static files
  • Cloudfare - For DNS