The importance of slow progress and self-reflection
“Hey, since you’re learning to code, do you think you can make me a website?”
I am sure we all have heard this question before. This comes with the scope of being a web developer. The first time I heard it was in March of 2016. My wife was a graphic designer who wanted to enter the UI/UX field. She wanted to showcase her skills in an online portfolio.
“Yeah, I can do that for you. Shouldn’t take long.”
It took three months.
I realized very quickly that I had bitten off too much. However, when I was gullible, I was also determined. I put everything in that website. When I wasn’t working at my job, I was either coding or searching stackoverflow.
Mostly searching Stack Overflow, a lot of it.
Despite the tension and stress that project inspired me, I couldn’t be more proud when I first saw it live on my browser.
That was my job. I had done it.
Using her new website, my wife was able to find a role as a UX Designer in New York City. We both quit our jobs and moved to Seattle. This marked the beginning of my head-first dive into programming.
Two years later
“Hey, do you think you can update my website?”
It was June 2018 and a lot of things had changed. In those two short years, my wife went from UX Designer to Product Designer, to Leading Design for a startup. She wanted a new update to reflect that growth.
“Yes, I can do this.”
I tried to sound as confident as possible, but I was hesitant. I remember how long it took to build his website for the first time. I was not sure if I had the stamina and mental stamina for the second bout. It had tired me.
When I started going through the old code, my confidence was shaken even more. I hadn’t seen it in two years. It had not aged well. While the UI was still working and looking good, the front-end was a mess. It looked like it was being held together with duct-tape.
In terms of “code smell”, it sounded like dumpster fire.
While my wife only wanted an update, navigating through that codebase was painstaking. Starting from scratch was going to be easy. I wasn’t thrilled with the idea of starting anew. But when my wife had gotten a lot older over the years, so did I. I took this as an opportunity to reflect on how much I had learned.
The day I started building my wife’s new website, I knew it wouldn’t take 3 months. I was able to do more in a week than I was in that first day. In the end, it only took a week for the update to finish.
While I was impressed with how quickly I was able to make it, I wasn’t quite sure why it was so fast. Sure, I had two more years under my belt, but what did I really learn in those two years?
I wrote each HTML file from scratch. To maintain consistency, I duplicated any repeated elements. Unfortunately, this meant that changing one page meant replacing many.
automating the build process
Another reason it took so long to build the first website was that I had no concept of the build process. For the whole 3 months I was building my wife’s first portfolio site, I was doing it all locally on my machine.
Whenever I made a major change, I had to have my wife come over to check on the changes on her laptop. If that wasn’t bad enough, when it came time to push my changes to the production server, I didn’t know where to start.
I was so focused on getting the website working that I didn’t even think about how I would get it on the internet. I had never heard of DigitalOcean, Docker, or Heroku.
The only hosting service I knew of at the time was GoDaddy. Godaddy uses cPanel to upload files on the server itself. Unfortunately, cPanel only allowed one file to be uploaded at a time.
Took hours. And whenever I need to change any assets, I have to re-upload those edited files manually.
With those mistakes in my memory, I invested in improving my build process. I automated my CI/CD workflow using Docker Compose. With a docker-compose up -d command, I could deploy the entire site to production.