What is a shipping skeleton?
I was listening to an episode of the Weekly Dev Tips podcast titled "Setting up new projects with guest Heather Downing" where Heather described her three golden rules for setting up new projects, which were:
Create a repo - not local i.e. GitHub or somewhere
Add a "File > New project" app - something really simple or from a template i.e. a "Hello world" app
Set up continuous delivery - again focusing on the simplest pipeline you can create (using whatever tools you are comfortable with) to get the application deployed to a separate hosting environment every time a change is pushed
I enjoyed listening to the episode and thought that it was great advice, well delivered. It also made me think of a concept I had read about some time ago that Roy Osherove has described as a "Shipping skeleton".
Osherove describes a shipping skeleton as:
An empty solution with nothing but a “hello world” output, that has the basic automated build and deploy cycle working. You should be able to ship this empty hello world project with the click of a button, in a matter of minutes.
Why create a shipping skeleton?
The concept has always been appealing to me as:
The focus is on doing the simplest thing - complexity will come later, but just getting a shipping skeleton up and running makes you feel like you're off to a good start and gives you confidence that you have a solid foundation in place
The continuous delivery process can grow alongside your application - it's much easier to have it in place from the beginning and it forces you to think about planning and maintaining the delivery process alongside the application as you plan and maintain features
Although I had always thought the shipping skeleton concept was apealing I must confess I had never actually put it into practice. Feeling inspired by the podcast I thought that it was past time that I remedied that - the problem was that I didn't have a new project with which to practice so it was time to make one up!
What's the plan for this series?
In my day job I typically work with a Digital Experience Platform called Xperience (formerly Kentico CMS/EMS) and I started to wonder what a shipping skeleton for an Xperience application might look like. So for this series my aim is to create a shipping skeleton for a new (and entirely fictional) Xperience project.
The rough goals I have in mind are:
Create a "skeleton" Xperience application and push it to a repo on GitHub
Automate the provisioning of a hosting environment that I will deploy the skeleton app to
Create a continuous delivery pipeline to provision the hosting environment and deploy the skeleton app
Document and create some kind of template to make setting up an Xperience shipping skeleton as easy as possible on new projects
Now I have my plan in place I can start working towards my first goal, which will be covered in the next article in this series.