The year is 2024 and this site has been around for over 10 years now. In that time I have refactored the nuts and bolts of this site 4 times and learned a lot each time. The first time was to really learn web dev and build something I thought was cool using the bones of a wordpress theme I bought on Themeforest. The second time was to really learn Ruby on Rails and jQuery / Angular by taking what I had already built and modernizing, rip out the last bits of PHP / Wordpress and move to something that I had much more control over and freedom with. The third time was to really learn a deep frontend framework, the elixir (and soon after back to rails) dance was enlightening too but the real focus was learning React. Since finishing Locuscorev3 in mid 2018 and throughout my time at Simpli.fi I let the site languish because I honestly just don’t like working on side projects (that don’t generate income) while focusing on a full time job.

One of my responsibilities at Simpli.fi was dependency management, making sure that the various repositories stayed relatively up-to-date with the (stable) versions of their open-source libraries. One big point of contention amongst the more frontend focused full-stack devs was the version of VueJS and the myriad javascript npm packages that we used, updating these packages between major versions was a herculean effort that the comprehensive test suite only somewhat helped with. It could take months to jump up a version because often these frontend libraries and packages were in flux and the new way often meant a near complete rewrite of the way that you currently did things. The bigger your app the longer that rewrite could take and Simpli.fi has quite a big app. In the back of my mind though, there was always something else… a nagging feeling of my own dependency hell, my own big app that was slowly getting more and more behind.

I started looking at my dependency hell in earnest in May of 2024 after poking at it a few times and quickly realized the depths of the undertaking. To just deploy a new version of the app to Heroku I needed to update: Ruby from 2.7.3 to 3.1.3, React from early version 16 to 18, Rails from 6 to 7, Postgres from 9 to 16, the list goes on. The backend dependencies like Ruby / Rails / Postgres looked difficult but seemed like they could be wrapped up in a few weeks of earnest effort. Most of my backend was a relatively simple JSON API that relied on a few gems to cover most of the functionality, if I ripped out the gold plating and the admin part of the site it would be even easier. Unfortunately there was a problem though, the frontend dependencies.

The landscape of React (and all major frontend frameworks really) has shifted quite a bit since 2018, components as classes were out and components as functions was the way, relative imports were out just to name a few. Sadly changing some lines that amounted to boilerplate code was the easy stuff though; entire packages like D3 had completely fallen out of favor as the world had moved on to bigger and better javascript graphing frameworks, material ui (which I used extensively for forms) had completely changed their API to conform with the new React and NPM standards. I didn’t even make it to Redux before I started really questioning what I was going to gain if I took a month (or three) to dig my way out of this dependency hell but before that I felt like I needed to ask “How did I get here?”

The mid 2010s was quite the time for Javascript, web 2.0 was in full swing and new JS frameworks popped up left and right, it felt like any self respecting frontend or fullstack web developer needed to learn one of the many options to stay in the know. For me that meant building something, grappling with the nuances of implementation and understanding what made the framework tick. I don’t regret the time I spent to learn React, if I had infinite time I would absolutely dig myself out of this hell and keep the train moving as the control and freedom that a good JS framework provides (after you hit your stride and escape the boilerplate) is without parallel. Javascript has an extremely vibrant community in the form of NPM packages and the sheer number of wonders you can build stimulates the mind. Which is why I walked away.

Every line of code that you write is a chain, a debt that you will have to pay back in the form of maintenance. Sometimes you can sidestep the maintenance with a refactor or rewrite but you can never escape outside of just deleting code / features so then the question becomes, what is necessary? I heard about Github Pages way back in 2015 as an option but paid it no mind as I was too deep in the complexity-for-the-sake-of-learning mindset. Why have a static site generator when you have the world at your fingertips with a strong frontend framework, API, decent enough app hosting platform and DNS? One answer is certainly cost as Github Pages is free or nearly free if you choose to deal with DNS but what actually lead me there was an escape from my own code.

Here’s a link to part two where I talk about my experience with Github Pages and the Jekyll “backend framework” that runs it.