Learnings from the first 18 months working for a startup.
I’ve been working for Instacarro for one year and a half now, since it was just and idea. Looking back, we have overcome a lot already, each member of the team have come to grow personally and professionally in so many ways that is surprising for that relative short period of time.
Now I'd like to share some of these reflections and learning to those pondering to take the jump and quit their jobs and start working for a startup. Hopefully I share you some useful things.
Don't worry about being prepared.
“Actually, no one is really prepared unless have done it before.”
Startups' purpose is to build a new products, often with an untested business model, commonly for a market not identified yet. If you can describe what is an Startup with a word that would be “Uncertainty”.
Working for a Startup is different to working for a traditional corporation in so many ways that anyone, no matter how good skilled he/she is, would be shocked by the shift. So feeling lost some times is normal, just be willing to give the 100% every time.
Be prepared to learn a lot and fast
In startups things are in constant change. The business is constantly challenging you with things you never had experience with. In order to keep the pace you need to be able to learn fast and adapt to change. This I think is the most valuable ability you could have.
Do you love solving problems?
A Startup in its early stages is a mess, a mess with lots of problems that needs to be solved so the company can stabilize and grow. In order to have a successful career in this world you should be comfortable solving problems (a lot, everyday) and not feel overwhelmed by them.
“Team work beats the x10 developer culture.”
In Instacarro we've overcome many challenges not because we're a team of top players but because our diversity and background. It is better to be in a team where everyone work together to reach the same goal than a team of experts that work alone.
“Don't grow alone. Improve yourself, improve your team.”
I think one important thing for a team is that the members have the auto motivation to learn new things and grow everyday, but more important is that everyone is in the mood of sharing knowledge and experiences and mentoring other members and help them grow as well.
The Boy Scouts Rule
“Leave the camp a little bit cleaner than you found it.”
I think this is the most important piece of wisdom I’ve learned on this trip (you should read Clean Code by Robert Cecil Martin). It doesn’t matter how skilled the team is, it just vast the lack of willingness of few members to comply with this rule to see the code turn into a mess. But the beauty of this rule is that applies to everything in live.
More often than not the team won’t understand the domain problem of the business for a new Startup that's because not even the CEO have the data required to define those things. In this circumstance the team should not got into questions like what is the best platform, programming language, framework, tools or architectural patterns for the project because we don't have enough data to answer that yet.
Decisions should be delayed until the team have a better understanding of the domain. In the mean time the team should go with what they know the best and build a prototype in order to be as efficient as possible.
Don't be a perfectionist
In startups resources are scarce and things have to happen fast, very fast. The company burns money and needs to get to the next investment round before it goes into bankruptcy but for this to happen KPIs have to look great.
That's why we as developers need to understand very well what are the needs of the business as well as the “why” behind it. We need to be pragmatic about what can we deliver, we must always look for what is the minimum work that deliver the most value to the business, and let anything else for later.
But don’t do a mess
What I said above doesn’t mean you have to avoid the best practices such as Unit testing, Integration testing, Code Review, Software Design and Software Architecture, in order to deliver faster because you will regret it later on. It means deliver smaller parts continuously. Good products are built upon iterations each one adding some kind of value to the previous work.
Be careful with tools
“Don’t marry your domain model with third party tools.”
In the early stages of a Startup the team will be in the need of integrating with many third party tools. That's because of the lack of resources, time and definitions of the capabilities of business and the domain to build it ourself.
There is nothing bad about integrating with third party tools, but one thing is for sure: if you don’t hide the implementation of that tool behind an abstract interface then you’re damaging the business. Any tool the team integrates into the system have to be implemented in a way that can be easily replaced with another tool or a custom in house implementation if need.
A new language
One of the first gains I got working from Instacarro is that since the operations are in Brasil the members of the development team (based on Dominican Republic) learned the basics of Portuguese because of the day by day interactions with people from Brasil. I really liked it and I have plans to improve my Portuguese skills.
I've learned to be more than a developer
In conclusion, I think that the best benefit you can get from working for an startup is that you will learn about other areas that are not your own. Also you will learn to deal with people and to be a team player.
When you are part of the first employees of a company and the team have to build the company from scratch you see your self involved in duties that go beyond your comfort zone, and as a result you end up learning a bunch of new things that span your point of view and make you a better professional.