Working alone
2024-01-01
So far in my career, I have only ever worked with myself as a developer. I have certainly had productive (and dare I say good) relationships with project managers and business stakeholders. My consultancies just never seem to lead me into situations where I must work closely with another software engineer.
Maybe that's not a problem yet. I'll happily learn to work in a software team if a situation demands it. Even so, I can't help but wonder whether I've developed some bad habits working alone.
Frameworks?
My favorite web frameworks are FastAPI (because of my receipt scanner product) and Flask (because it's what I started with). Both of these frameworks seem fairly minimal in terms of the design decisions they impose on your project.
Sure, this made it a little difficult to start, and sure, I had to spend more time on my project to get the same feature mileage, but they make me feel like I'm in control. It's a comfortable state of mind for me.
It turns out that I like making my own design decisions. Doing so forces me to learn. If I make the wrong decisions, I (hopefully) understand the fundamentals of the tools enough to rescue the situation.
Even so, I can't shake the fear that maybe my design decisions are wrong. Maybe they're so catastrophically misguided that they sink a project*. Maybe they're so inscrutable to anyone but me that it becomes impossible for others to contribute to my code. And maybe these fears are themselves misguided, but I don't have the experience to tell.
Maybe I should just master a heavyweight framework like Rails. I've tried it, and I think I can -- it just isn't as fun to me. Not as a solo dev, anyway.
Testing and automated deployments
When I operated my receipt scanner product for the first time, I used to literally use VS Code to SSH into the single server that hosted the webhook API server. I deployed changes by writing the code on the server and restarting uvicorn.
I'm not a complete savage. I did manually test my code before I deployed, and I did have a GitHub repo that stored the history of the codebase. However, to my knowledge, I was supposed to automate these processes, i.e., write code in a non-live environment first, make it pass some tests, and then have some automated agent deploy it onto the servers. Automating these things means exposing less surface area for me to f**k up.
Yet I didn't do it. I only had a handful of servers to manage, after all. It was much simpler to deploy by hand in the moment. Regardless, I should probably be trying to break this clickops habit.
Code
One of the consequences of working alone is that you never have to show your code to anyone. I think this may ultimately be a bad thing. Even though I do my best to keep my code intelligible to my future self, my future self is still me. I don't know whether my code is any good to other people.
My code is an expression of my understanding of a problem. I have a history of understanding problems in pretty bizarre ways that are sometimes wrong. What happens when this leaks into my code? That stuff will have to be maintained.
The bus factor
I'm concerned about my bad engineering habits because my business's "bus factor" is one. Only one person, me or Joben, can get hit by a bus before the entire operation stalls. If he gets hit by a bus, we get no new business. If I get hit by a bus, we can't conduct business. I'm trying to be better on both the business front and the dev front to raise our bus factor.
* - This hasn't happened yet, but I've had some close calls with RabbitMQ.