I'm on a team with a senior developer who has been with the company for a long time (maybe 15 years) and works exclusively on the backend architecture of our 25-year old product. Recently, as part of a modernization effort, our team was tasked with updating the product so that web applications can talk to the product using JSON. To solve this problem, this developer wrote a custom translation layer that transformed messages from web clients over HTTP (JSON) into messages the product can speak and vice-versa.
In the beginning, this layer was fairly simple - it just translated messages back and forth between the web clients and the product. However, over time, this layer has become more and more complex; this layer now can transform messages, run message validation, make database queries, make network requests to 3rd party systems, loop over data, execute complex conditionals, and more. It has grown to the point that I think it's accurate to call it a full-fledged programming language.
We are the point where all new business logic is written in this translation layer. I feel that this is a Bad Idea™ for a number of reasons:
- There's very little documentation on how to write code in this translation layer
- As a result of #1, there's now a very steep learning curve for anyone joining the team
- Developing new business logic almost always requires assistance from this developer
- In fact, each sprint we give him "API support" tasks on our scrum board that are dedicated to helping other team members through issues while developing in the translation layer.
- The development experience is poor, since all our development tools need to be written by this developer
Perhaps the most infuriating part is that we also have a Node server in front of this translation layer. However, writing business logic in this layer is discouraged by this developer (and our architect, who is a bit disconnected from our team) primarily for consistency - he doesn't like the idea of having business logic in two places.
How can I convince this developer (and the rest of my team, who are fairly passive about these kinds of issues) that this is a bad idea? How do I combat the inevitable argument that writing business logic in Node would be inconsistent with the patterns we've already established?
Or, is it possible that I'm being arrogant in assuming that this developer's approach is wrong? He has more years of development experience under his belt and has a lot of institutional knowledge.
Some background: I have about 5 years of experience, 2 of which have been with this company. I lean more towards front-end development if I have the choice. The translation layer mentioned above has been developed on for about 2 years, but has not yet been deployed to production. See the comments for some additional technical details about this translation layer.