This was a question I received over a hearty discussion at a colleague’s venue. I thought of writing about this type of question, as its likely been heard by many people as it I have. The question is not a issue but only a reflection of problem that affects the IT industry as a whole.
For those who do not come from an programming or Computer Science background, a stack is a way to store data (Search Online: Data Structures) it acts as a one way in, one way out method. Imagine a stack of plates, you wouldn’t be able to take out a middle plate, not without the danger of tipping over the rest of the plates. Just like a stack of plates, IT services are layers of protocols that are interdependent placed on top of one another. In the case of the conversation the word ‘stack’ is used by people in programming to describe popular technology infrastructures such as MEAN Stack (what this means is Mongo DB, Express.js, Angular, Node.js) or LAMP Stack. The stack obsession has become a sort of a religion within the development community. The newcomers to the programming community are often encouraged to start learning with MEAN stack. I do not recommend this to variety of reasons. But this has become a rite of passage to programming. Before you pick up your pitchforks let me explain. Technologies in MEAN or LAMP or etc. are important and plays very specific role in solving problems, so it’s not the stack I am against. It’s the approach to solving the problems. As IT professionals our role is to act as the oil that greases the gears that drive the economy. Majority of the software that we produce and maintain do not inherently produce anything but supports the individuals, businesses and governments that produce goods and services.
I’ve cited an article by Richard Clayton at the very end that highlights this issue in more technical aspect to help you understand why MEAN or LAMP is not a solution but an approach.
Let’s take a hypothetical case, imagine that you’re an architect building a house. How would you go on about this? In my case I’ll look at the problem this way
- Get the home buyers requirement for the house
- Make a plan of the house
- Get a list of tools and materials to build the house
- Estimate time needed, set milestones
- Start building
But in the case of stack minded “IT pros” it goes like this,
- I know a stack (material needed to build)
- Build the house using the stack
- Make up the plan as you build
- Adjust the plan to fit the stack
- Totally miss the client requirement and over-bill
Now observe step 3 in the case of the architect, it reads “Get a list of tools and materials to build the house” this is where you’d decide the stack. Once you understood the problem and got a plan to solve the problem.
Unfortunately, the process resembles the case I have a hammer, now I want to build “X”. Reasons for this type of thinking pattern are mostly a combination of one or more underlying issues. These are few I could think of
The fact that people are always seeking novelty (I’ve read this on a book called Sapiens [link]), we tend to ride the waves of next big fad until it winds down.
- Employers seeking quick fixes and trying to release the next big idea App, ironically not investing in the right areas.
- Pros become stagnant on learning new skills.
- Employers not doing their strategic research before jumping onboard a technology to impress shareholders
- Due to group think we ignore the fact the group may be collectively wrong, without this unquestioning behavior large pool of people end up endorsing bad practices
Anyone with a good understanding of logic and math can learn programming. But Software engineering isn’t programming. As an engineer or IT professional you’ll be using many tools and it’s up to you to decide what fits the use case. Process of making the idea a reality is what’s important.
If you are reading this to decide what approach I would take to solve problems, my advice to you is
If you know programming:
- Learn to understand the client requirement and the use case. Then do a proper research on what is needed to be implemented.
- Use first principles to learn and implement the solution
- Read the Docs
If you are new to programming:
- Understand the basic algorithms and how to optimize them.
- Understand how different hardware and software work
- Hopefully I could do a better write up on this
Above is not a complete list but may be a simple pointer for some people. You are welcome to criticize and help me improve as well.
For any solution that you produce in your professional life there are three objectives to live by. Your solution should be:
So again, my answer that day to “What’s my Stack??” I answered “What stack do you want??”