Why I Built My Website, But Don't Think You Should

December 17 2023

The Premise

One of the things that you might've noticed if you've read the footer of my website is that this website has a lot of handwritten code. I cobbled this website together using Django (a Python framework that was used to build some of Instagram!) and Material Design Components (a framework that defines Google's distinctive style).

After spending months thinking about the website, I was (moderately) proud of how it turned out. So, you might assume that I would recommend others do the same process to make their own website.

But I don't!

This post is about why.

Behind Everything, There is a Purpose

Whenever I'm in a conversation where someone brings up wanting to build their own website, they usually have an idea of what "job" they want it to accomplish. Maybe they are a PhD student that wants to display their research results as well as communicate their findings to the broader public online. Or maybe they're an aspiring sculptor that wants to display photos of their work in a digital portfolio as well as advertise the fact that they do commission work online.

This "job to be accomplished" can typically be done without needing to write any code. For example, if you're a PhD student at a big university, then you might have access to free website building services like SquareSpace or Google Sites through your university. Services like this typically have templates that you can use that will build the website for you and all you need to do is fill in the content. By simply copying a few photos and paragraphs of text, you can have a website up and running in a matter of hours.

If you were to instead build your own website using a framework like Django, then the tutorial alone might take a couple of hours and require you to pick up some elementary python and database knowledge.

Is that extra time and learning worth it? I would argue that in most cases, it is not. The "job to be accomplished" isn't being better served by the website being built from scratch.

What is the "job to be done"?

The concept of the "job to be done" isn't my idea. It was first introduced to me by Clayton Christensen in his book "How Will You Measure Your Life". In the book, Christensen describes a very interesting challenge: a fast food restaurant was trying to increase the sales of their milkshakes.

At first, the restaurant invited in a number of customers who fit the "quintessential milkshake consumer" profile and asked them what they would like to see changed about the milkshake. The customers provided some suggestions, and then the restaurant made these changes over the course of multiple months. Despite the changes, however, the sales remained about the same.

Then, a colleague of Mr. Christensen's got involved. They did a lot of pondering and study of the customers and discovered some interesting things (which I won't spoil here), but their most impactful interventions came from discovering what exactly was the "job the milkshake was being hired to do".

The customers in this scenario were hiring the milkshake to be a "long-lasting food" that they could consume during their long morning commute. Thus, the way to make the milkshake more appealing to the customers was to make it last longer and be easier to pickup during the morning commute.

This idea of the "job to be done" is useful in more than just business. It can be applied in any situation where you are trying to accomplish something, but know that there are multiple paths to get there. Like in the case of our website.

Think really hard about where you're trying to go, and then brainstorm multiple ways to get there along with their pros and cons. Ask other people that accomplished the goal before you about what they did or did not do. Then, don't simply emulate the person or approach that is most impressive to you! Instead, pick the path that gets what you want out of the process with as few unnecessary hurdles as possible. (For example: If you don't need to learn Python, then don't mimic me!)

Maybe you'll talk to someone like me that will primarily give advice of what not to do. But that's okay. Even that information can be helpful in saving you time and headaches.

You can decide how long you want to take in this "thinking" stage, but I encourage you to take more time than you think you need. I know that time is always wasting away, but the "thinking" stage isn't a waste of time. It might delay you for a day or two. But it might be the difference between you having a website at all or not. In business, it might be the difference between your next quarter being profitable or not.

Acknowledgements

I want to thank my friend Leo Medrano for proofreading and giving feedback on a version of this post.

Appendix: What is the "job to be done" for my website?

When I first wrote this, I didn't think that it was necessary to share the "job to be done" for my website. The "job" of this website doesn't really help in communicating the message of this blog post. But I was later convinced to list some of my goals for the website and I will let you decide if you think that they are being accomplished by my approach.

As background, when I first started programming, I learned a lot by programming my own website using just HTML and CSS. With this new website, I wanted to learn more about:

  • How to Build Your Own Blog System for a Website
  • How to Define My Own Custom Visual Theme Across Multiple Pages of a Website (Including Dynamically Generated Pages)
  • How to Create My Own Web API
  • How to place a web app on Heroku
There were likely other ways to accomplish these goals, but I think that I did an "OK" job of accomplishing them with my approach.