Software Engineering: Transition from skills-men to work-force
I remember joining a startup as a software engineering intern 12 years back. Used to work directly with the CTO to create products. There were almost non-existent mangers and we had complete freedom over design, coding standards, customer impact and also business. And this was for a product which had a considerable user base and impact. Cut to today, as engineers, we now have to present multiple versions of the software with varying degrees of complexity, robustness and availability, mostly to accommodate for business timelines. Most of the times, the chosen version is the one with best possible business outcome. But that business outcome considered is always short-term and holistic impact is never considered. It’s a transition from creating products to creating value for stakeholders. I don’t want to take the discussion to the horrors of capitalism. But maybe it’s related to that.
In my opinion, skilled labor force is the most crucial counter-force to capitalism. Imagine a chef of a restaurant, whose sole purpose is to keep the restaurant owner happy. He will keep the interests of the owner rather than the food he/she makes. He will probably not care about the quality of produce, inventing new dishes, kitchen cleanliness, or working standards of people under him. McDonald’s insists on using Russet Burbank Potato which is grown through the use of a pesticide called methamidophos (Monitor) “that is so toxic that the farmers who grow these potatoes in Idaho won’t venture outside and into their fields for five days after they spray.”
The true job of a skills-man is to create. Problems happen when skills-men, engineers, bureaucrats and scientists (many German scientists were responsible of spreading the idea of eugenics to impress their Nazi rulers) give more importance to the business than necessary, for money. This is when corruption, low standards, inequality, poor working conditions and bad culture seeps in.
Let’s try to understand this from ROI perspective, and see if it’s really worth it. Senior engineers are given high number of stocks to attract and retain. But looking at it overall, the ESOP % is not more than 5% of the whole company in almost all cases. This is shared among the whole work force. So, I don’t really consider it ownership, but rather just enough to make you feel you will get rich, but in reality will only make you slightly better off, in the best case scenario.
Unionization is also discouraged in tech companies. Forget about comrade, basic social cohesion is slowly diminishing in all tech companies. This works best for companies. I remember a senior employee in my previous company, directly asking us to keep minimal social interactions within the team. According to him, this leads to substandard customer experience because programmers would become lenient with code reviews.
If you look at the tech market, the company with the highest funding has the most resources at it’s disposal. With more resources comes more leverage to introduce competition and fear in the work force. The problem is if we start underselling our intellectual (or physical) labor in fear of competition and job security, it’s easy to get exploited. And I am not approaching this problem from a Capitalism vs Socialism standpoint. But rather from a pure ROI perspective. The shares you hold is just enough to make you believe you own something in the company, but not big enough to actually cause any major improvement in your life.
All of this causes domino effect. College students and hence colleges are only focusing on pure programming, and not humanities, economics, physical well being or even pure science, because that leads to the maximum salary. This leads to incoming work-force which doesn’t set a sustainable culture in companies. It’s difficult for them to grow beyond a particular point and understand problem from different aspects.
Obviously, it’s not our job to fix society, capitalism, politics, corruption or any of that. Our job is to create and make things better. I would suggest the below especially in the tech world.
- Like CAP theorem in distributed systems in which you can’t get all three (consistency, availability and partition), we have WMB (work, money and balance) in real world. Work is the quality of work you are doing in terms of how satisfying it is for you personally, money is how well you are being compensated for your work and balance means your relationships, physical health and mental well-being. You can’t get all 3. If you feel you are getting all 3, you are doing something revolutionary, and you should stick to it. You should make a choice of 2 among this and manage your employer based on that. The 2 choices can also change on what stage you are in your life. If an employer is only giving you 1, then you are definitely being exploited.
- Understand and question business. Most of the times, managers also don’t have convincing answers to back up business decisions. Because they probably did not question people above them. If there is a business decision which is going to impact product quality, make sure to grill the decision makers, and ask them to do better to avoid churns.
- Contribute to open source and keep a check on what’s going on outside your organization. If your day job is not satisfying, contribute or learn about other fields, new technologies. This gives a different perspective which will help you grow within your organization as well. All the big techs would never have existed unless languages like C and operating systems like Linux would not have been created.
- Fight for engineering initiatives and take risks. Business will always want to repeat a particular process/technology to generate predictable outcome and money. Though, it’s very important to keep space for R&D in every project/work (no matter how small) and do it without being apologetic about it. The risks would probably not pay-off most of the times, but the learning leads to overall growth.
- Respect your co-workers. Everybody is different and has different strengths and weaknesses. Not everyone can code fast, debug issues fast, or have all the business context. I have come across people who make a lot of mistakes in code, but can come up with unique design ideas which can make significant impact. So, it’s important to follow the principle of learn and teach.
In my opinion, the most impactful outcome of information technology has always been decentralization of power and resources. Invention of paper, radio, telephone, internet has always empowered people. Technology should help all rather than a just few, which is the reason it came in first place. So, it’s always a good idea to keep that philosophy in mind.
I hope I was able to make my point. Take care!