Many of the people over at BarCamp are working on/struggling with the transition from programmer to entrepreneur. While I was never a truly "hard core" programmer (meaning lock me in the basement with Mountain Dew for a week and I'll come out with 100,000 lines of code) I did have to make this transition. Also, doing the entrepreneur thing for the last few years with HelpSpot has really given me some insights into why many people fail at this transition. So here's a few observations:
Code is 5% of your business
One of the biggest issues I see is developers getting caught up in the code. Spending countless hours making a function perfect or building features which show off the latest technology. Now you have to write code to be in the software business. It has to be high quality code that isn't filled with bugs or is insecure. However, the best code in the world is meaningless if nobody knows about your product. Code is meaningless if the IRS comes and throws you in jail because you didn't do your taxes. Code is meaningless if you get sued because you didn't bother having a software license created by a lawyer.
I see way too many entrepreneurs in the forums and blogs talking about code issues when they should be discussing and learning about the business aspects. Of course that's harder then talking about code, but nobody ever said this would be easy!
Design is everything, relative to the competition
Your product has to be nicely designed. Standard programmer square boxes with gray backgrounds don't cut it! Remember though that your design only needs to be nicer than the competition. So if you're building a back office IT system there's no need to bring your design all the way up to the level of a 37 Signals type app. Of course it's great if you do, but the goal here is simply to make it clear for your customers that you have the nicer design when they compare your product to the competition. People DO judge books by their covers.
Get used to thinking long term
There's nothing a programmer likes better than turning code around fast. Getting bugs in and squashing them. The problem is that most non-programming related tasks in a small ISV don't happen quickly. You really need to think long term. Things like getting your marketing and product positioning in place can take months to years. There's no instant gratification like you get from writing code, so you must always force yourself to think long term. Where do you want the product, marketing, and sales to be 6 months from now?
Admit that you don't understand the end user and rectify that
There's a good chance that the software you are writing is in a domain you are not an expert in. That's where the opportunities are and that's great, but you have to realize that you need to do more than just research the market. You need to understand the actual customers. Talk with them. I know you don't want to but it's an absolute must. Without talking to the actual end users you'll never know what features you're wasting your time on and which ones you don't have that are critical.
A big mistake people make here is implementing the feature set of the competition to get started. That's a bad move. It's like when you copy your friends homework. You both end up with the same mistakes. By talking to the customers you can avoid the mistakes your competition has already made.
Love your customers
Many software developers come from a back office IT background. In most of the IT shops I worked in there was generally disdain for the customer (internal customers). It's not surprising since IT is often asked to do far too much with far too little.
It's time to put all that aside though. I see a lot of ISV's who seem to carry this over and there's no place in commercial software for it. The only way to be successful is to love your customers. That means meeting their needs as much as possible and going to great lengths to do so. When you can't you need to explain why. When they choose a competitors product be respectful and remind them the visit you again if that product doesn't end up meeting their needs. I've found that I've switched lost sales back to me simply by being nice to the customer on their way out the door.
Remember to design for ease of use. Even advanced users like easy.
Your user interface is no place for fancy technology tricks. Keep is simple. Advanced users love simple just as much as newbie's. The most important reason to keep is simple is for your trial users. A trial user is only going to give you a few minutes of their time. If you waste it by making them figure out a complex interface you can bet they'll be off looking for another solution.
Remember to bounce your ideas off people who aren't working on the project
Make sure to always take time to show off your latest builds to someone who's not very involved with the project. Fresh eyes will often find big holes in your user interface. Even if the person doesn't know much about your domain, you'll be surprised at how many issues they'll point out that you've never seen before!
Don't be afraid to pull things out
There's nothing I hate more as a programmer than pulling perfectly good code out of an application. Alas, you're going to have to do it. Through the process of developing you're going to discover features that should never have been. Ideally you'll find this out before actually shipping. When you find these features you need to pull them before they cause any trouble.
For example, when I was half way through developing HelpSpot I discovered that one of my features just wasn't working. I had built this tool for importing customer information into HelpSpot. This was a bad idea because it basically turned HelpSpot into a half baked CRM. It meant my customers would have to keep HelpSpot in sync with their real CRM and generally made the UI more complicated. So I scrapped a few weeks of work and pulled it out.
It turns out to be one of the best decisions I made. Rather than the syncing I came up with the Live Lookup system which allows customers to run queries against their existing CRM from within HelpSpot. It's turned out to be a unique feature which is used by the majority of HelpSpot installations very successfully.
Patience is a virtue
There's invariably a lack of time to get all the things done you need to. What would normally take a day takes weeks. Try to learn patience. I've found that I have to actively work at this or I get frustrated that I'm not making enough progress. Avoid setting up dates and expectations with your customers when possible. Don't promise something in a month if it might take 3. I'm still working on that one myself :-)
Treat it like you are learning to program all over
Remember when you first learned to program and you read every book. You bought 8 different books on that first language all of which basically said the same things but you read them all anyway because you couldn't get enough. That's how you have to treat the transition from programmer to entrepreneur. Read everything you can get your hands on about your target market, running a small business, marketing, general management, time management. Ideally you should read it before you even start coding. The mistakes you'll be able to avoid by doing so are well worth the time commitment.
As always I look forward to your feedback. If you have made this transition yourself, please add your tips for others to learn from.