I used to work for a university trying to modernize how people got student and financial data. Over half my work was playing politics rooting out people who refused to change and going above their head. We had one guy who didn't want to update a script on his end to include the bare minimum amount of 'security': a hard coded plain text password. It took me months and I had to go to his office to update his script and he complained about it the entire four minutes it took
“Due to budget constraints, resources will shift from $oldThingy to $newThingy. As a result, $oldThingy’s availability can no longer be maintained at the previous level.”
Then randomly kill oldThingy for more and more hours each day.
This reminds me of QEMU internals. Virtual hardware support is paramount in an emulator, so nobody wants to break old code that was probably written by an expert who knew that piece of hardware better than you ever will.
I remember my engineer being such a hardass on using v2 of our API and when I went to implement a feature, v2 didn't even have ANY of the endpoints I needed
If the APIs are meant for public consumption, requiring feature parity makes a lot of sense. But when it's for internal use by your own developers, waiting means you are making a bunch of new API endpoints no one will ever use. People will write more and more code using the older endpoints and those endpoints will start getting changes that your new ones will need ported over.
I think if you are going to force people to use new endpoints, you'll need them to either write the endpoints themselves or have a team member who can write it for them and account for this while planning. If getting a new endpoint requires putting in a JIRA ticket with a separate backend team, 4 planning meetings, and a month wait, people are just going to stick with what currently exists.
I suspect that starting your own version of the API is the Software Designer / Software Architect version of Programmers' "I know best so I'm going to do my part of the code my way which is different from everybody else's".
Mind you, at the very least good Software Architects should know best, but sometimes people get the title without having the chops for it.
It gets worse. Half the site is MVC, half is blazor. We depend on mainframe connections and external vendors, who in turn have their own API, which we have a wrapper API for.
The entire grahql fusion schema got nuked about two months ago, and we're still panicking to fix it.
And each of our environments are half environments, that mesh with one another to create a data integrity hellscape.
I've seen this often. The app is marketed as being "api" first as if that's some benefit to the user of a SaaS application. However in reality much of the team is constantly busy patching the old legacy V1 api to keep it running. And management won't authorize the budget to create a new api version that replaces the old one, because it still works right?
Public facing web apis have always been a pet peeve of mine. So often the team uses the api their own frontend uses as the public facing api customers should use for integrations. Which on the surface seems smart, why implement and manage two apis that's just overhead. But in reality the apis suitable for a frontend (or often that specific frontend) isn't suitable for integrations at all. They both have a completely different target user and completely different requirements.
But hey we'll just market it as "headless", because one could totally put in the years of work and money we put in to create our front-end, if they really wanted to. Totally realistic thing that happens.