One framework to rule them all?
As we grow as software developers, our point of view and expectations change significantly. I’ve learned through experience (some costly) that planning plays a crucial role in defining whether your product will go through a sustainable growth toward a log-lasting life or will be another disposable, short-lived product that reflects consumerism.
At first, from the chaos landscape, we tend to make comfort-zone decisions, relying on our experience to choose components, languages, tools. In that scenario, our focus is mainly based on solving the problem at hand.
Soon enough we use to get efficiency-oriented, and the immediate (still short-focused) brilliant idea is “I gotta choose a framework”. No problem with that: you choose one framework that suits your current range of problems and helps you build things more rapidly. All is fine… for some time.
With more experience (and time, and the client’s evolving expectations) you start to face issues that are not addressed by the adopted framework. OK… At that point you can:
- Develop custom solutions, ignoring the framework – but it seems a bit like going back in time or
- Add another framework (or part of it) to solve just the new issue – which can prove too cumbersome sometimes.
Finally you pivot the way you address the problems… You start seeing a pattern in the way problems evolve. Then, you start to understand that long-lasting solutions can be made only when you:
- build a logical view that gathers everything (classes of problems) that you’ll probably need – architecture;
- list solutions that will help you improve your efficiency in solving each class of problem – frameworks/components;
- find/build the bridges needed to glue the frameworks into the architecture you envisioned.
You don’t need to list or integrate all composing elements fo your architecture beforehand, but it’s very important that you plan how things can be put together when the time comes. In doing so, changes will be embraced more easily, because you’ll be able to change components, aggregate frameworks with less effort and deal with new classes of problems with minimum stress.
Even though it requires a time investment, the benefits are undeniable – you can deliver long-lasting products, with sustainable growth and focus on more complex, value-added and profitable solutions.