Monday, June 17, 2019

Configuration vs Extension

When you develop a component that will be used by others, there is no chance to avoid the dilemma of taking the route of configurability or extendability.
Both options are tools for allowing customisation of the developed component...and there is a need for both.

Configuration can be a setting or parameter that changes the behaviour of a component, and such it is usually managed via configuration files or setters/getters on services.
Learning the different configuration options and combining them to something functional can be a daunting task...and is not always proportional with the development skills of one individual. 
The most common example for configuration are the different variations of loggers...log4j...commons.logging...java logging.... 


Extendability...if there is such a word...(or open of extension)...is when you get a basic functionality in the core library and you are allowed write code that extends the default functionality. For instance the Java collection framework is not very configurable but it can be extended to a great length...you can always write your own List or Map...hence the existence of he fastutil library.
Extendability is the O from SOLID principles.


Interestingly the trend imposed by Spring and similar frameworks goes in the direction of configurability ... and it's overwhelming .... just look at the amount of configuration options Spring boot (an application framework) has....out of the box...and those are only a few common ones...
...and on top of that add the annotations...that one million of them...with similar effect...just written in code.


Extendability is where developers work...and write code ...to extend functionality...or create a new one. That's where a skill is needed...to navigate the API and understand how a code works...to be able to extend it...and this is not learned fast.


Keeping track of all the options of a framework is a significant challenge...and is a form of technical debt...and while it is effective in creating applications fast...is it as effective when you need to maintain these applications?

Is this lexical knowledge the most important thing you are looking for in a job candidate? 
Why are you asking explicitly for Spring boot applications in those interview use-cases? ...how about just asking for an application that does the things you are interested in...and examine the skills one has in creating one...even if it will end up in a Spring boot application.

I know....there is no time for that...

No comments:

Post a Comment