Along with programming, one of my passions is entrepreneurship. I love hearing the stories behind great companies and learning about the highs and lows. My dream is to be a part of that journey and experience it from start to finish. It's motivated me to learn software development and keep learning new technologies and frameworks to build the next big thing. I suppose a part of the journey is making mistakes and learning from them and let me tell you, I've learned a lot.
Here are some lessons I've learned.
Do your research before jumping in. These are some questions I would find out before starting.
This is where it pays off to work at a big company before you jump into a startup. Working for a big company gives you credit as a professional and gives you an estimate of the compensation you should receive. If you haven't had the chance to do this because of a juicy opportunity at an exciting new startup, find out what other people with a similar skillset are making and ask for that. If they can't pay you, make sure they make it up in equity.
Doing this helps in 2 ways. First, your employer knows how much to consider the value of your work. It is much harder to sacrifice something that cost them 100k a year than something that cost them nothing. Second, knowing that you're costing the company 100k to build something will make you far more motivated to do well and endure any mental anguish that comes with startups.
It's easy to get caught up in the idea that if you work your ass off and pour your blood, sweat, and tears into the company while getting peanuts in return, you'll be rewarded for your efforts with tons of equity and money later on but that's unlikely. Establish the terms of the position before you do anything and make sure that your company delivers on that promise.
Communication is important because it gets people on the same page. The hard part is doing it well and personally, I'm still working on developing effective communication. Part of that involves talking about what kind of communication is most effective to you. I hate long and frequent meetings because I feel they take away valuable time that could be spent building something. For some people, they prefer spending as much time as possible planning from start to finish which is fine in its own sense. For me, I prefer doing first, learning as I go, and iterating for incremental improvements because I believe that empirical data outweighs theory. The style of communication that works best for me is to first discuss the goal and criteria. From there I can find the best strategy for achieving that goal and go to work on executing while giving short but consistent feedback on the process.
Another aspect of communication is being honest about how you feel. For instance, if you believe that client side rendered apps are better than server side rendering for a particular usecase, speak up and defend your idea. That's something that's been difficult for me because I naturally try to avoid conflict whenever possible. I learned, however, conflict is necessary, especially for big decisions. Embracing conflict will result in more robust solutions and force people to think deeply about problems.
This is based on my personal experience and some experiences my friends have had but take anything you read on the internet with a grain of salt.