I went to school to learn how to program. In fact I went to one of the best Computer Science schools in Canada – University of Waterloo. While there I took all of the hardest courses I could fit into my schedule including 2 of the “big three” – Graphics and Real-time Operating Systems – which lead to many (MANY) nights in the lab that I never got home until 5am.
I love writing software and I love reading about it. In fact I estimate I do about 3 to 4 hours of reading every day!
Over the last few years I have tempered my reading about computer related topics with learning entrepreneurship skills. Things like sales, marketing, accounting, financing, leadership, and networking. This evolution has changed me. It opened me up to a lot of new ideas and points of view.
There are a lot of entrepreneur skills that make a lot of sense for software development.
Great sales people split test and measure the results of any particular approach they take. They change headlines, colors, fonts, layouts, images etc to try and gather data about what works best. They never stop testing new things. Gathering these types of statistics overtime will improve the sales process and make drastically more money for the business.
I have not seen many (if any) applications that are taking this type of approach to optimize. Imagine how much better software could be if there were easy ways to gather and visualize how it’s usage changes between versions as a result of UI changes or how real-world performance changes with a new algorithm or data structure.
Entrepreneurs biggest problem is that they have lots of ideas but it’s hard to finish. It’s tough to get though the resistance to actually ship something before another idea comes up to provide an escape to avoid the fear of failure. Solutions to dealing with this natural tendency is to not self sensor, be stupidly ignorant and stick to the core idea, and anticipate the resistance by pushing through with more focus as the deadline looms.
These are things that I think programmers should embrace. The first version of a program should be written as quickly as possible, with little thought put into performance or maintenance. Anticipate that as you get to the later stages of writing a program the parts remaining will get harder and harder to get through (because you’ve skipped the hard stuff along the way). When you get to the last few bits of a project the only thing remaining is usually the stuff you hate doing – UI code or graphics or tedious clean up. Expect it. Focus. Do the work.
Good entrepreneurs know that their opinion on their own ideas is fairly useless. Not until the product is available on the market where customers can prove it’s value by opening their wallet is anything for certain. Until the idea is proven in the market place it’s value is a guess.
Likewise until a program is in the hands of users, programmers are just guessing at how it will be used, by whom, and with what level of knowledge. Therefore just get it out there and measure these sort of things after the fact. Don’t make too many guesses about a product before letting people use it. And recognize that until people use it your are just guessing.
Most of the entrepreneurs I have met exude a tolerance for taking risks – for going after the big ideas. Have that same boldness for your own software development work and you’ll accomplish great things.