The first lesson I learned as a startupper is “getting things done”.
It’s easy to say, but hard to do so.
The first things you are gonna deal with is that your personal preference in matter of framework, programming language and paradigms, usually doesn’t fit well with the rest of the team in terms of skills, taste, etc..
In Metwit I rember the first dispute on this kind of topic was over the choice of framework which we would have used for rewritten the old php backend. I was (I am) a great ruby fan, so naturally I tried to encourage the adoption of Rails. My team all agreed that we should use a Geospatial database.
Long story short: Django framework has in mainline a project called Geodjango and we finally decided to go with that, for the sake of maintainability. Turns out that it is far from perfect and a huge bottleneck.
The second thing you are gonna deal with is legacy code.
When I joined Metwit my first job was to resume the development of the iPhone app. It was the first obj-c project of a young developer that then lefted the team. As you can well imagine, the code was bloated and it had tons of bugs. At the time I had two choices: a huge refactor or a complete rewritten of the project. I choosed the first.
Turns out that few weeks later our application to SeedStartup incubation was accepted as long as we could provide an early demo. I could never finish a from scratch project in time, somy choice was right.
The last thing you’re gonna deal with is your personal standards and exceptations.
Doing an excellent work is always a matter of time. Time is most precious resource in a startup. Competitors are breathing down your neck. Shit happens every day. Finally you realized that you should have shipped your work yesterday. You’re fucked.
So my advice is lower your exceptations, ship often and early, listen to your custumers and be ready to pivot fast. (Check out this book if you want to learn about Lean Startup principles)
TL;DR Learn to deal with imperfection or you’re never getting things done.