When to Bail and When to Sail
08 February 2015
A couple years ago, I decided to learn PHP since I had a website and I felt that my knowledge of web development was lacking without it. I started off with a few simple PHP pages, and didn’t really intend to go much farther than that. I knew that creating my own web platform would be pretty futile, since as one person who didn’t really know anything about how frameworks worked under the hood, I likely couldn’t come up with something better on my own. The plan was to learn PHP, then switch over to something that was already an accepted solution. Always up for a challenge however, I kept going and a few pages written with a smattering of PHP evolved into an actual piece of software that did more than show a different greeting every time the page was loaded. I knew what I was doing, but I pushed on anyway because things were going pretty well - I had a simple blog, pages, a login system - and they worked fairly well. I kept thinking of ways to do it better so I improved as I went, and added new features. The framework evolved from a few lines of PHP code to an actual framework with over 5,400 lines of source code and over 1000 commits. My main goal wasn’t to build a new web framework so much as it was to hone my skills as a developer, but I kept pushing forwards despite my better judgement.
Unfortunately as a project reaches that size and continues to evolve heavily, it becomes incredibly difficult to maintain independently. It became a challenge just to keep everything working, let alone to add the new features that I wanted. I had no support in my efforts (everyone else was sane enough to keep their distance), and components of my site broke frequently as I improved other sections. I started to set up Travis CI but I started too late, and putting together all the tests was tedious and did not turn out to be work that I enjoyed. I finally started looking into alternative frameworks for my site because it was just too much work to maintain my own and I wasn’t getting the enjoyment out of it that I started with. My desire to work on the project started grinding down and sections of the framework stayed broken for longer periods of time. I eventually came to terms with the fact that the project had reached its peak, so I decided to finally put it to rest, turn my back on the smoldering pile of PHP code that ran my website and find a different solution.
Although I eventually chose to bail on it, Thenaterweb was a valuable project. It was useful - kind of - for a period of time, but turned out to be a huge learning experience. It’s interesting to look through the history of the code to watch my skills, and therefore the code, evolve and improve. What started as what should have been a few days of PHP work to learn a new language turned into a huge saga of learning standards, working with databases, feeds, and all manner of other things. Probably most importantly though, I learned when to bail. It’s easy to keep slogging through the mud on a project hoping to see it to some end for the sake of ego or accomplishment, but some things are never destined to make it to that point. Thenaterweb was a prime example - it wasn’t intended to exist, but always seemed to be going somewhere and I was intent on getting it wherever that was. Although it was difficult, I was able to put my ego aside and move on to bigger and better things. Bailing on a project can be hard, particularly as an engineer (we’re known for having big egos), but some projects are meant to be laid to rest without being seen through.