Being a Full-stack developer, I was offered a consultant position to help deploy a new REST API for a content network. At first, this seemed to be code optimization and development, but it ended up being much more.
Upon arriving at the client, I realized there was no synchronicity between the code in production and the code in the repository, things were synced with FTP (the "S" in FTP stands for "secure"). There was no testing, no versioned staging environment, no CI/CD, and no real understanding of the codebase. The application backbone was several versions behind, and the client was spending large amounts of money on a dedicated monolithic server. I considered my resources, which consisted of a front-end developer and me.
Fast-forward five months. We were using pipelines and had migrated to a better and cheaper provider, we had one click deployments hooked to several private git repositories that had their own environments to test in. We changed the media CDN provider, implementing a new link to both the client's old and new APIs. All this while mitigating problems in the legacy code. I remember feeling proud of what had been achieved in so little time.
Then, the client reminded us that we still had to implement the new REST API with a new front-end crafted by my colleague. It dawned on me that I had strived to get everything up to today's standards, but we had run out of time with the other half of the project. Fortunately, the new API was modular and well written, and since we already had a pipeline and proper documentation, adding new features was a breeze. However, even with these advantages, I did not have time to see the new API develop to its full potential.
Around 4 months later, my former colleague contacted me saying everything was now online and working. I'm glad to have been part of that project, most importantly, I've lost the fear of legacy code. Given hard work and enough time, even the seemingly impossible can be solved.
Andres Becker