Over the last 25 years, I have done various things, failed many businesses, and ended up having a lot of lessons.
I mostly talks about software engineering and creating products with help from software and technology.
I have been writing software for more than two decades. And always have been curious about software engineering as a craft, mainly regarding how to write “good” software. I feel the quest just got started; and, it has grown into more curiosity, resulting in more reading, studying, and learning about writing better software, creating better products.
Software design and development are still in their infancy. It’s pretty new, although it has exploded in the last few years. Writing good software has been a challenge, and the ever-evolving landscape makes it complex.
While the software is very flexible and malleable, writing it in a modular, expandable, and pluggable way is complex.
Writing software requires us to express our intent precisely, and most of the time, we end up writing tactical solutions with no longevity and scalability. Having a tactical yet scalable and strategic yet faster development cycle is a balancing act that everyone needs to learn.
Computer languages have a very rigid structure. That forces us to express our business logic and intent precisely. Defining that is an arduous task unless we follow specific articulation, understanding, and reasoning practices with rules and acceptance criteria.
Software design is a very creative process. Over the years, it has resulted in many experiments around different aspects such as design, architecture, languages, and paradigms. There seems to be an explosion of trying out new ideas, new languages. We have seen paradigm-specific and even domain-specific languages evolve over the last 40 years.
We are now settling down in the phase of distributed computing, big data, functional programming, and many more exciting ideas extending into the field of artificial intelligence - the use cases which seemed distant now have become a commodity. And these evolutions led software engineering to be a very creative field.
Yet, I have experienced very few organizations emphasize software engineering as craft and software engineers as craftsmen. I hope it changes over time because it’s a fundamental change to make an impactful product.
Writing code for computers is an easy task, especially when you have an abundance of code samples on the internet. The arduous task is to write code that humans understand. The code operates your business solutions that, in turn, provide frictionless product experiences to our users.
Technology has become essential for product growth. The scale of the “technology-backed” products goes into multiple areas: understanding and solving complex software engineering problems related to computer vision, estimation, or getting consumer’s intent using data, artificial intelligence, and machine learning.
Technology is the most effective tool to achieve the impossible.
After spending a uniquely amazing, crazy, and full of learning journey from 2015 to 2020, I left gojek and joined Sequoia Capital to pursue my aim of “doing something for the community.” One of the main driving forces was giving back to the startup community by helping companies with their technology and product-based challenges and learning from them to spread that knowledge to others.
So, if you want to talk about building products, software engineering, or just about people, do drop a line. The easiest way to get to me is Twitter.