Hey all, it’s been a while since I’ve been on here!
Introduction
So, I’ve been working on some real enterprise projects, although, I’ve been experiencing one reoccurring thought:
How can I design this software to ensure that the technical debt is kept to a bear minimal?
I think that I feel the needs to ask this purely because of the fact that I’m only just a mid-level developer, I mean let’s be honest, regardless of one’s skill & knowledge, experience pays off massively with discussions such as this.
I mean I do the obvious, using clean, tried & tested design patterns, solid principles, simplicity, etc. I also know that tech debt is inevitable, regardless of how wizardry your skills as a developer are, any tech project will encounter some degree of tech debt at some point or another.
Specific Example
One specific case I have in mind is how one developer that worked on my current team before I joined, he made an app using Apache Camel, but as it turns out, it’s an overkill use case. Apache Camel quite literally just implements the REST API & links the processors together, personally I think of it as a chain of responsibilities at most in this specific case.
However, whilst I’ve established an appropriate design pattern to utilize in place of Camel, I wonder whether it would be better to utilize an iterator based solution or an array list based solution. Personally I favor the list solution since you can see the precise flow of the business logic, where the chain is initiated.
I mean if the business logic needed to add more complexity, I’d think of adding something along the lines of a factory pattern in-front of the different chain of responsibility implementations.
P.S. Even though I’m using Java, I try at all costs to avoid side effects, while using defensive principles.
If you like, I can also include some code snippets to provide a precise example of the logic I’m referring to?