I left my corporate DevOps job, to become a fully freelance full-stack web developer - this is a quick post to share some thoughts on it.
Till 2019 mid-October I was a DevOps engineer at a global networking and telecommunications company. Meanwhile, I was already working part-time as a hobby web developer, so naturally, I had been considering to go full-time web dev. The stage was set, I knew my client, I had a running project. Clearly, it was not a leap of faith, but when I finally decided to change jobs in October, I was terrified.
You should know about me that I'm not shy to execute a rapid and wild career change. At one point I went programmer from bartender - discussion here:
Still, this time was different. I must admit I admired the company for contributing to my career, and I wasn't comfortable to leave them hanging. They accepted me three years ago as a non-experienced university student for an internship. In one year they made me a full-time developer and taught me everything I now know about software. It was an extremely fruitful period of my life, and I was immensely grateful for being able to learn programming, development workflow, tooling, and all about the industry. They helped me enter the world of software when I was just a guy from the street, and I will never forget that.
Yeah. They made it really hard to leave, I give them that...
After my first two years, I felt a bit stuck. I admit I'm not an easy personality, I thrive in progress, but I can't stand stagnation. I'm healthy when I can operate at the edge of my capabilities, so that I always learn something with every step, always exploring. If you have ever ended up in corporate software, you know it's nothing like that.
The what and why of industry software development and its weaknesses is a big topic. We can talk about it for endless hours, preferably at a bar counter, given enough beer and wine. I'm not going to get lost in this, but I'll mention a couple of things that really made me consider going freelance in the first place.
A lot of times when some new trend comes up, companies rush and start implementing them in huge overcontrolled waterfall processes. It usually starts on the top, in the head of a selected group of architects. They are like some privileged mages, disconnected from the rest of the company, sitting in a position which was acquired through company politics, connections, and/or age. They usually know nothing about recent trends, and the last code they touched was Fortran and Cobol. At the High Tower these
ancients architects sit down and summon figure out some arcane over-architectured tomes blueprints.
These blueprints are then passed down through 666 levels of management until all the visibility and project control is lost in the intertwined threads and yarns of corporate society.
In the end, it arrives at the actual developers, and when someone shouts out that 'But that's not how an API works' it's already late. The abomination must be wrought into code.
Corporate resources + Sunk Cost Fallacy 💸
In the world of startups, you can seriously jeopardize your business if you launch or even start to create a product without extensively studying your targeted consumer group. If you neglect research you can easily end up with an unsellable product.
But this is not the case in a large company! There, if the management wants a tool to be used, trust me it WILL be used.
The situation is especially uncomfortable in the case of inner source software - so code that we write for our colleagues. The corporate bureaucracy that comes with the work usually generates an immeasurable amount of technical debt, and developers must do all kinds of abominable workarounds to comply with unrealistic designs. In the end, the product must be launched and used, whether the targeted users like it or not. And if those users are within the company that can create a very toxic atmosphere.
You don't notice these things first, but slowly during the years they really drove me away from corporate software development.
After the summer my freelance career started simultaneously with two projects. It was a frontend job at first but it quickly escalated to be a full-stack one as the expectations of my client grew. I learned an immense amount of things in the last few months, and my life changed greatly. Suddenly I had to realize that it's much harder to justify something I wrote if there's no one to do code review for me. The expression of Work-Life balance also started to make sense suddenly.
A freelancer friend of mine warned me several times that I must really pay attention to this or I can easily end up burnt out, or depressed. Indeed the risks and responsibilities that come with being a contractor are considerable sometimes. Not having fix hours can be great sometimes but you can quickly end up messing around during the day and then doing overtime after midnight.
Actually nowadays if you read an article about containers, cloud and site reliability solutions - so basically DevOps stuff - even these are worded for small businesses and web developers because this market is bursting. As a result, picking up and integrating new tech can be hard at a large software company. Previously I always felt overwhelmed when I was working on some DevOps solution with some new tech tool. Reading the tutorials all the help I got was how to make the tool work for some small web app when what I wanted was a setup for the management of many gigantic native telco network applications.
Making smaller web apps feel very similar to when I was just creating small tools for fun when I was just a hobby developer. Sometimes working alone can be hard, but I'm happy that I can be more creative and independent.