September was recently my first year at SeatMe, along with my first full year living in San Francisco. It’s been a great year as a programmer, doing some awesome things at a startup that I love, and for life in general, moving closer to many friends in the area. As part of this milestone, I wanted to reflect on what has been accomplished and things I’ve learned along the way.
The Big Picture
Something I attribute to growing older and more experienced is being able see the horizon much easier. There is always the day to day and small details to worry about, but through GTD and getting better at scheduling my life, I can always look at my goals for next week, next month, or six months from now. I have never thought of myself as much of a “detail oriented” person, but the more I track and organize my life, the easier it has become to achieve both small and large goals. Some might find it overwhelming, but with good external tools and practiced workflows, my brain never becomes overwhelmed and I can jump between different scopes easily. A great notion from the book Pragmatic Programmer, introduces the idea of programming as a craft and a tool: there is a time to use your tools and a time to polish your tools. It’s good to know when to get shit done, but additionally when it’s time to reflect and see where you can improve.
A good mix of skills is always useful. I hate hats, as well as the phrase “being able to wear multiple hats,” but the idea fits. If the website is down or dishes need washing or the iPhone app is crashing, and you can help, go for it. Penelope Trunk argues for specializing and while I agree on career focus, when you are in a small company with a diverse group of people, learn as much as you can from them. I think the Robustness Principle from TCP is a good analog: own your job and field, but be open to help or ideas from others because you never know everything.
Trade offs are always being made at a startup. Speed to market versus amount of features. Performant now but not for six months from now. The simplest thing is always the best when starting out, but know what corners you are cutting. Again, being able to plan for now and for version five, and knowing how to get there is infinitely valuable. Sometimes everything seems like chaos but being able to estimate how changes will ripple and planning ahead is great.
On the other hand, having that doing that kind of planning and knowledge leaves you a great deal of freedom. Look at multiple solutions and figure out what is best. As a programmer, you control what gets built. If there is new technology that you want to try and you think it can fit, give it a try. It’s been repeated many times but always be ready to throw out the first version. Build a simple version, test something new and cool; keep using it or dump it and rebuild it in a better way the second time.
Startups Are Hard Work
You will work harder than you expect. Sometimes you will stay up late on a technical solution that doesn’t pan out. Sometimes the business will shift and you will need to rebuild and update many things. Again, trade offs need to be made in a small, fast moving startup and sometimes there are technical consequences. Test hard, keep your product stable, and focus on making progress, but know when to relax. It depends from person to person how they operate and what they need to recover, but figure out what that is make sure you do enough of it to not burn out.
Lastly, don’t forget to enjoy the ride. Things will be good, bad, and everywhere in between. Watching a company grow is fun for me. It’s an evolution, an orchestra, a journey, and for the years you will spend alongside a handful of people, you should hopefully enjoy it. I am!