Product Engineers: It’s a thing

Are you a computer engineer? Do you fancy your code should look like an art? Do you think complex systems should be built? Do you think everything should go through process? If answers to all the above questions is, YES!, then you should definitely read ahead.

There are two types of engineers and you can be both, Batman also has two personalities:

  1. There are engineers who solve really hard engineering problems like., developing a new programming language, security protocols etc.
  2. There are others who build things with available resources.

Why this classification? Because it defines the expectations and priorities. If you are working at a company then you are being paid for the knowledge you have to build things that make company successful and as much quickly as possible. Your prioritisation decides will the company achieve what it needs and how quickly.

Now what does your company do? The chances are it is building products/services for people to consume. People who doesn’t know your “technology”. The success means for such a company is to win the market and be the sole provider of the product and service. And building things takes time, hence the idea of hacking or hackjob or jugaad. That’s what product engineers do.

Product engineers make things that work as fast as possible because the end goal is not the engineering but the product. A product that works. The user does not care about the complexity of the engineering. It can awe them but primarily, it should work like it is supposed to. It is the engineer’s job to make sure of that.

Product engineers solve engineering problems when the uptick for business is greater than the time spent in dealing with it.

Won’t it lead to mess? It will. Deal with it. No, I am not just brushing this problem off. I have a solution for this.

Whenever there is a lean time solve this problem. Organise everything. This is an iterative process. This strategy must sound like getting stuck in loop and yes, team will get slowed down over-time. Take some time out when it is absolutely required like too many errors happening, code maintenance has become a real issue, it is taking longer to do a five minute hack-job. Because it must be understood that the goal is different. Goal is to make the product win, right now.

Languages: Best way to learn the concepts

If one wants to pioneer software engineering, they must learn languages.

Computer languages are similar to languages that we speak. People who speak multiple languages are generally good at understanding complex things because of the rich vocabulary. The more languages a person knows, wider is their horizon. It has been scientifically proven that learning languages rewires the brain and improves the memory. The same can be said about programming languages. Every language has its own paradigm and concept that its built on. Even if a person doesn’t want to use the language, I believe they must read about it. It’s the best way to understand different concepts, principles and constructs and to come up with a new one.

Every programming language is built on an idea and more often than not, it is unique. Programming languages are usually built on new fundamental ideas about software engineering and solve certain types of problem really well. That’s why functional programming languages are different from object-oriented from procedural languages. One can take principles from these languages and re-construct in the language of their choice if they want to, for example now many regular programming languages support functionalities of functional languages.

After learning few languages I have stopped thinking in terms of languages. I use my understanding of languages to map solutions of a problem. I then try to find the constructs which can help me in implementation in the easiest way. Easiest way may not be a best way but then that is a trade-off that one has to take while building a product.

More often than not, one doesn’t need to build the best product but only the product that works.

Once a person get hold of few languages, it also become easy for them to learn new languages because the major part of any language is redundant. It’s only the new concepts that take time and they are not many usually. Often the learning curve is not steep if the language is of the same paradigm that you are used to. Usually a person doesn’t need to work on more than 2-3 languages at a time and that is enough to implement the foreign concepts from the different languages. Although, it takes time to reach that stage but it is achievable. Hope to see you there!