Being a startup guy!

 Working in a startup requires a lot of commitment, as well as the right attitude to sail the tide. In this blog, I would like to share my experience, as a software developer in a few startups in my career. We do many mistakes in the process, our software won't get even get shipped, or we have to do multiple iterations to get a proof of concept working. This will be a good learning experience, at the same time, it will also be frustrating to the core! I categorize the traits the startup guy needs into two parts here: attitude & aptitude.

Attitude first...

Of all the traits a successful developer possess(or develops), I felt "perseverance" is the most important. In the startup world, we are building something from scratch, we don't know what the current path leads to, and we have to restart many times from the beginning. We fail many times, get back to the whiteboard(square one!). Many a time, the goal would itself change, since the company is exploring multiple ideas or requirements at the same time. We need to apply a never-give-up attitude here. Books helped me to get this attitude, I personally recommend to read the history of successful companies and see how long it took for them to get to the successful stage. Most of the companies took a decade, easily. One classic example is Pixar Studios(read about John Lasseter). It started in 1986, they made lots of small footprints, and their first successful venture was Toy Story released in 1995. When Steve Jobs, invested in it, he didn't want to run the company for profit, but to build it first! Investors may not wait this long, but the visionary founders will!

Another thing that we should inculcate is, "I win or learn, not lose". Something we try to develop in our kids that applies to us as well. In one of my previous startup, we were evaluating a chip for our product, and we put into 6 months of effort in prototyping it, and later the chip for dumped for another chip from a different vendor. All the 6 months of effort was wasted, that was the initial feeling we got. Later, while developing software on the second chip, we were able to build the prototype much faster and were also be able to reuse some of the work done with the previous chip. In another occurrence, we built one router from scratch, spent 1+ year in development and was kept in the shelf by the parent company, because it was 8 times faster than the existing products, and also much cheaper! The things that I learnt in that project is still helping me in designing a complex multi-threaded system. There are so many such projects, which never went out of the office.... there is so much to learn and move on!

Share & scale.. sharing the design with the team is another important aspect of the game! The developer needs to share what she/he has written with other members, particularly with the new joiners in the team, which will make the team more productive. Don't end up being a bottleneck or single point of failure! This will also free up our cycles, and venture into other modules.

Aptitude next...

In the early stage, we tend to write more code, not worrying about reusability & testability. We need to take a few steps back and think that the software we write today should be reusable, modular and unit testable. While developing the software, the unit test infra should also be developed, and we need to spend time in unit testing the code. This will have long term benefit than short term when the software & team scales up. It will be challenging, particularly when the code is rapidly evolving. But starting it in early-stage will lay the foundation of good quality software.

There are 100s of other reasons a startup could succeed or fail, I have shared my experience as a software developer. Happy coding!

Comments

Popular posts from this blog

1K is 1000 or 1024?