Strap on in, this is gonna be a long one.
A quick recap for those of you who have joined in my absence:
My last job was a disaster area. Working for the company in and of itself wasn't bad, but like many small companies, no one actually knew what the hell it was I did and I ended getting tasked with a lot of responsibilities that I really wasn't qualified for. I was "the computer guy" and eventually was expected to fix anything that blinked, beeped, or even had a button on it (I posted about this occasionally way back in the days of Community Server blowing goats). I eventually left for my current job.
Which is a hell of a lot better. There is an actual dev team with IT being separate, we use version control properly, we have code reviews, we (mostly) do Agile with sprints and retrospectives and story pointing and all of that fun stuff. It's still a small-ish company, but it's bigger than my last one and has overall been a much better experience.
I was hired to work on the web team, which was re-writing the website in the latest and greatest buzzword laden stack you could imagine. TypeScript, Knockout, MVC, MVVM, Less, you name it, if it was hot we threw it in there. A few months after I was hired, there was an open call for anyone who wanted to get cross-trained on our internal, desktop software. I thought to myself, "sure, getting cross trained is almost never a bad thing and I can learn some new stuff on the way" so I signed up.
It was exactly like internal legacy software most of us have worked on at some point or another. The UI was Winforms. The DAL was half Entity Framework and half some custom ORM a contractor had created years ago. One of the internal namespaces had a typo that had never been fixed. There was one specific form that had a code-behind file of something like 12k LOC and was backed by a stored procedure to match. Data imports were handled by SSIS. There was even a dusty, dark little corner of the application that was written in VB6 that no one liked to talk about but it was stable and, as such, wasn't going anywhere.
So for a few sprints I bounced back and forth between the hot new sexiness and the old tired dog. Until business decided that the company needed more developers working on the legacy system, and I had already started training on it so I was going to stay there indefinitely. I was not consulted on this decision. But whatever, it's still okay. Not the best thing in the world but I can work with it. We worked in a re-factoring/updating story every sprint and slowly but surely we're improving things. We're replacing Winforms components with WPF, we're removing cruft that never should have existed, taking business logic that for some reason was in stored procedures and moving it to a more logical location. It was good. It wasn't great because we still had to support a lot of ugly shit, but things were definitely getting better.
Budget time roles around and we start sketching out a plan for the next year. We're going to get rid of this massive Winforms component that contains way too much logic and drives something like 50% of the UI. We're going to start re-designing smaller forms in WPF using MVVM. We're going to cull a lot of deadwood sps that never should've existed in the first place. We're going to put a stake in the heart of VB6. We're finally going to fix that fucking namespace typo. There was a light at the end of the tunnel. We research various 3rd party libraries that we're going to need to buy/get subscriptions for and submit the budget for our team.
(There's an entire product line disaster in here that I'm going to just skip for the sake of brevity (lol yeah right). I might write another post about it later)
Three months later, the company decides that it wants to make part of the internal app available on the website. "I mean, if we've got software over here that does one thing, and software over here that does other things, why can't we just link them up?" Well SSAE-16 audits for one. Also because the in-house app relies on AD authentication, and about a 1,000 other reasons why.
So we scrap the existing plan to slowly upgrade-in-place. What the business wants and when they want it is just something that is not possible with the resources that we have available. We eventually compromise and crap out an API (entirely separate from the legacy application) that does what they want (duplicating code and logic from the existing app). This is sufficient...for now. But they want us to keep building it up, and want to expand this on-line offering significantly. So we abandon our plan for the year. The legacy desktop application will still exist, and it will still serve the purpose of being our main in-house workhorse, and we will still support it, but the majority of our energy will be directed towards porting at least some of it to the web. Well this is not ideal but it could be worse.
Spoilers: it got worse.
Business wants more web features. We need to expand the shitty API that we threw together to meet an impossible deadline. We start brainstorming.
Then disaster hits. (This is probably the time to note - we are a pure MS/.NET shop. Hosted in IIS, db is MS SQL Server. Website is written in TypeScript and C#, etc etc).
The CTO goes on a trip to Rackspace. I don't know exactly what happened (I assume a brain slug attached itself or possibly some sort of severe concussion), but when he came back he issued an edict - "NO MORE WINDOWS DEVELOPMENT". Something to do with Docker and containers.
So now we need to keep our original unrealistic plan but do it in an entirely new tech stack. That no one on our team knows. Yay.
Around this time is where we're told that we are not getting any additional budget beyond what we requested originally, Also yay. Here's a condensed version what I had to say about it in our work chat:
So to recap - we have roughly 9 sprints to rewrite large parts of the application, on a new stack, with a new architecture (including watertight or least minimally leaky devops), with 3 people, and 0 budget. Not to be overly pessimistic but are alarm bells ringing for anyone else?
So that brings us roughly to here. I'm spending most of my time learning Node/Express and Python (which, by the way, seems to be an exceptionally bad language for all of the praise it gets) and re-implementing existing code in new languages, while operating under an insane deadline and creating a ton of technical debt. Dear person who has to maintain this code: I am truly sorry.