A Welcomed Change

I've been a software developer for as long as I can remember. I still remember tinkering away on Netscape Composer building websites in the 2nd grade, which I suppose puts me around 7 years old at that time. It was fascinating! Every little puzzle you solved, every connection you made between the HTML tag and how it was represented on the screen, just made for an immersive and rewarding experience. I'll never forget how long it took me to fully grasp how linking to another static page worked. Days my friends, days.

This fascination only increased over time. After building websites and learning HTML, I moved onto PHP which opened up a whole other realm of possibilities for what I could put onto the Internet. I sold my first website in the 5th grade. It was just a little website for a band where it listed some information, mostly dates and some background information, but also the ability to send an email to the group with a form.

I can't say for sure when I knew software development was going to be my career, but it could have been at that moment. It has just felt like I've always known. I've considered myself lucky in that regard. Always knowing what I was going to do in life.

Not surprising, but I moved on to major in Computer Science, obtaining my Bachelor's at Michigan Technological University. One short month later, I began my career as a professional software developer.

I cannot adequately explain the excitement I had in the early days of my career. Up until then, my exposure to software development was just my own tinkerings and whatever my professors decided to assign me. I had no notion of what "production" meant, multiple web servers, databases, or deployment pipelines. I just used phpMyAdmin to create some databases and dropped my changes into my FTP client.

I think on my second day I was running into an issue where I couldn't find the source of the data that was displayed on a webpage. I was looking right at the database though. The name of the database was right, the table schema was right, but the rows just weren't there. Hours later I come to find out that there's this thing where you have multiple, identical databases, that are hosted in different locations to address scalability concerns.

WHOA! Oh, OK, so I just need to change this connection string thing so I can connect to the database where the data I'm trying to see actually exists.

"Mind... blown"

This was life as a developer for quite some time. Everyday a new problem. Everyday learning about a new solution.

As time went on however, it got less exciting. There just became a time where I wanted to keep learning, progressing as a developer, but the work itself stayed the same. Company politics and arbitrary deadlines lead to a road of bubble gum and duct tape.

For a long time, a really long time, I didn't feel like I was really making anything. I was just patching the system to keep it running, alone. Collaboration wasn't something that was necessarily seen as a strong need. You are given this task, and you should be able to complete it on your own. Communication just takes up time you could be programming.

Everything was expected to just work, without much regard to the part about coding I cared the most about, the craftsmanship. We were a feature factory.

Even though I was utterly disenchanted for quite some time, I stuck with it. My friends were here, the people were amazing, and the benefits weren't to be taken for granted. It was a strong culture.

To fill in the gaps left by work I started blogging. I started going to every conference I could reasonably attend, and even spoke at some. I went on to get a Master's degree. Anything and everything I could think of to keep my passion in software alive. I figured this is how it had to be, unless I wanted to seek greener pastures elsewhere.

Luckily for me, an opportunity eventually came about. I was invited to join a team whose mission was to re-imagine how we develop at the company. We were to focus on all of the problems that plagued us as a company, and find solutions to them. But not just patch the existing system, and maybe make life slightly better, no. Throw out all restrictions, all previous decisions, and build something from nothing, the right way.

Reimagine how we set up our local environments, no more multiple day setups.

Reimagine how we develop our software, no more READMEs, use tooling.

Reimagine how we test our software, no more deploy to production and pray.

Reimagine the infrastructure our software runs on, no more distributed monolith.

I see it as a project born out of empathy. Most everyone at the company is painfully aware of the problems we face, but lack the time and power to fix anything in a meaningful way. We know what the problems are, we know the situation everyone is in, and it's a painful place to be in. Our true north is bettering the developer experience, and by proxy, bettering the company. If our actions do not reflect that, we've fallen down somewhere.

We've been working on this project for a little bit now, and I can't put into words how reinvigorating it is. Actions have meaning, collaboration is a first class citizen, and all of my teammates share my passion for development and doing it the right way.

It is indeed a welcomed change, and I am ecstatic about the future.