Focus on technology not the stack
Hello gud ppl! We all have been through all the fancy tech meetups and conferences. We have seen how the big guys tell that their tech stack is great. We have also seen the urgency to catch up with these big guys. They seem to solve most of the problems for us. But sometimes we can see ourselves that we are so focused on these tech stack and services that we miss the important topics that actually build up these technology.
Tech stack are there to solve specific problems
Let us say you had a web application in java. Everything was fine. No security issues. Your developer seems to be bored to solve the same old problem in java. But you have never crossed 10000 users. You never encountered concurrency problem. And suddenly one of your developers hears about go. He tells his team how great it is. Writes blog on it and the entire development team goes crazy about it. They say that the go channels are great. Go routines are superior than thread. Saying so they had never managed thread pools. Never hit race conditions. Now they suddenly need to switch to go for solving the business need of 21st century. If this is your case then its insane! Every programming language offer something better than other. Some are easy to get started and master while compromising performance. Some are difficult to master but give huge performance boost. Some are there for multi threaded application while some are there to perform asynchronous task in single thread. Some have great community support, frameworks and library set. Some needs you to write every thing from scratch. So determine what you need. Same goes for cloud computing. Cloud providers give a lot of options. A simple node application can be hosted in elastic beanstalk, ec2, lambda, ECS… in the same AWS stack. So why get so carried away when new service come to market. Don’t always hear the picky words these providers boast about. List your requirements! If your problems can be solved by simple VPS costing 20$ a month why go after Kubernetes and automation at the first go. Now on the other hand if you are well known about the technology you use. You will know how to benchmark it. You know how can it be compromise and how you can solve it. If your problem are well managed by these tech stack go for it!
Web technology have evolved but not changed
You must have heard about http 2. Its a great piece of art. But do you know why it does not fit into most of our modern web application. Please google it! Now if you must have known how http has evolved. You know now how client initiates communicating with server. Once you know it you should know that the same http existed 10 years before as well. Modern web application heavily rely on this protocol. The TCP under which HTTP works was used in production application before even I was born. Now why are they used till date? Because they are the foundation of web technology. If you know these technology you will never argue on whether AWS load balancer is great than that of Digital ocean. If I need to setup my own HAProxy instance or go for cloud providers. Please list your requirements. You will know it yourself. We all known about relational database. Also we have heard how great document models are. Now you may argue which of them are great. Or you may argue whether Cassandra is better than MongoDB or Elastic Search is better than PostgreSQL. But each one of then provide a very distinct advantages over one another. Now if you look the fundamentals of database engineering like ACID principles, sharding, partitioning. Have they changed? They have definitely evolved but if you look carefully they are still present in the modern DBs. So why not focus on these fundamentals. Find the read write requirement, the structure of your data. Read about the database. Find if it fits your requirement.Benchmark it and there you go!
Support the business not rip off
Cloud providers comes with price. They need to definitely charge for all the management they do. They helps fast growing business to scale faster and its a win win situation. No imaging you developer is a huge cloud fan guy. He hears a new monitoring tools that has been recently introduced. You don’t have 1000 active users yet. The backlogs are piling up and yet he convinces how the magical monitoring tools helps to better track issues in your 21st century business problem. This is a implementation cost of both time and money. You first figure out what monitoring you need and then go for it. If later you find it was a bad move you will most likely loose the business trust. Another most common scenario, imagine you have SQL database and its size keeps on increasing. You then blame the DB saying its slow and bad for our design. But have you used any indexes or have you over used indexes. Have you tried partitioning? Does the DB natively support sharding? Few simple questions may save your team time and money. Always ask question why did your tech stack fail. Its a huge learning opportunity. You are most likely to learn 100 time useful information when you system is at its limit than easily switching to other services or stack. This helps to keep your engineers well informed about the technology than treating it as a black box. You are in a very vulnerable position where none of you engineers know whats going on and the suggestion you receive is migrating to other stack without validating properly what went wrong.
Design pattern never dies
You may have heard about redux. Its a state management library for react. The flux pattern it uses helps to achieve unidirectional data flow making it simple in design. Now if you are well known to flux patter then does any other libraries using same design pattern bother you. Do you need to learn new tech stack every time scratching your head? Design pattern help to better organize you infrastructure code. Basic SOLID principles applies to almost all application. It helps to create better visibility of problems. A well designed code has maximum test coverage. That is the reason why these design pattern are used in popular libraries and software. So why not focus on these design principles and patterns. Now define your problem find which design pattern fits you. Search for proven frameworks which can help you implement it and enjoy. Don’t jump by reading a blog. Well-Define your use case!
Don’t Blame the Tech stack
Lets say you have a websocket base notification system built on node.js. You used popular libraries. You used load balancer to well distribute the load. You have use the most recent version of the database your cloud provider provide. You have a backup plan, disaster recovery plan. Every thing is set. Now when the system is up you get no notification. Neither backup plan work nor disaster recovery. Turns out your dev team had no knowledge on how to sync multiple websocket instances on multiple nodes. Now who do you blame? The main culprit is the tendency to think libraries will do the heavy lifting. Its you who will do the heavy work. Libraries, frameworks and tech stack are the means to do the job.
I believe the most efficient way to uplift the underdeveloped countries is with technology innovation. These innovation if by any chance happens in these place then the whole economy of the region can change. We can be content distributors, game developers, streamers and so on.. Saying so I see many young engineers and their mentors buried in the tech stack. Struggling to keep up with the pace. Most believe biggest tech innovation are not possible here most likely because they treat these technology fundamentals as black box. In fact these few fundamentals powers the overall internet. We cannot always be a outsourcing hub. We need to believe in our-self, our technology and team. We need to gain the business trust and invest in research and development. The information here are based on the environment I have seen so far. If I have written some thing that’s wrong or offending please contact me. Happy Dashain!