Monday, December 10, 2007

Time to Give Up!

You are a great software programmer and one morning in the shower an idea hits you – you are all excited. You spend the morning doing some market research and realize that while there are tools out there that resemble your idea none of them does exactly what you want to do. Great!

Countless sleepless nights follow and finally you have a product – you form a company, put up a website and release a public beta. Now you need to let all potential users now of your great creation. After a few days you realize that what you had thought was the easy part is turning out to be the harder one! Messages for products that you believe are inferior to yours seem to be everywhere while your message does not show up anywhere. The prices for advertising seem sky high considering your “budget”. However, with persistence and hard work you manage to round up a few hundred people who download your product.

A month later your tally says that your “baby” is on the hands of over 300 people and when a handful of those start sending you suggestions you are ecstatic and are seriously thinking of quitting your day job. You jump into implementing those suggestions and find yourself spending hours upon hours enhancing your product … this is a critical pitfall that deserves serious consideration but we will leave that discussion for another day so that we don’t divert from the subject of this discussion.

The big day comes, your hard work will finally pay off – version 1 of your product is released! You have managed to collect some hard cash from friends and relatives. You put up your first pay-per-click ads and now can’t wait for your first print ad to appear on that prestigious magazine and your banners to appear on those all popular newsgroups. These are exciting times!

The magazine finally reaches your desk and your confidence shakes a little – your quarter page ad for which you paid dearly seems almost invisible compared to the competitor’s full page. But hey, your product is better then theirs – users will eventually discover that, right?

Days fly by, you keep watching those downloads and wait for the first sale. Finally it comes and it is time for celebration! Now the money from the sales will start feeding the marketing and you can almost feel the g-force of the take off and anticipate the relief you will feel when you will be flying!

A lucky few will actually manage to take off – the evolution of that successful “branch” is outside the scope of this writing – it will be the subject of a future blog entry.

So, let’s go back to the case of the un-lucky many who never manage to take off.

It has been a few months since your first ads appeared and you are disappointed with the results (un-fortunately no one ever told you that a potential customer needs to see your ad about 17 times before being converted into a customer). You can’t afford to get paid help so you start seeking out partners to help you with marketing and further development.

It’s been 6 months – you have spent all the money you borrowed, you have poured every once of your energy juggling between fixing bugs, responding to potential customers and trying to send your message out and you are due for another shock – two of those competitors with inferior products have just released new versions of their software and they are blowing their horns hard. You can’t help notice that they are touting new features that you introduced 6 months ago – it both flatters and angers you! Yes, you are the innovator, they are copying you but unfortunately no one knows that except for them, your competitors.

You don’t have the marketing muscle they have but you can beat them with a superior product so you decide it is time to give it another push to get a new version out there – a version that will outshine theirs and take their customers away…

The more time and energy you pour into this venture the harder and harder it becomes to even consider giving it up. The forgone opportunity cost is huge – should you have accepted that offer to go work for let’s say google when you had just started this you would be a millionaire by now!

So, the question is: how can one tell whether the additional required effort is actually increasing the chances for takeoff OR simply raising the walls of the self-built trap making it ever harder to get out of it? When is it time to give up your dream?

The numerous factors involved make it impossible to come up with a definitive answers – it really depends. But, here are some guidelines to consider – nothing ingenious but helpful guidelines that are often ignored by enthusiastic entrepreneurs:

1. Conduct a financial review every 2 months. Estimate the potential of your product as best you can. Develop three basic scenarios: a best case, great success scenario; a worst case, miserable failure scenario; and a drag along, “midway” scenario. Assign $ potential and probability of happening for each scenario for the next 3 years. Example: successful -> $2M revenue / $500K profit / 20% probability of happening; midway -> $1M revenue / $50K profit / 50% ; failure -> $250K revenue / $200 loss / 30%. If you add the numbers in this example up you will find that you are predicting that you will make a likely profit of $65K for the next 3 years. Is it acceptable considering what you are having to put in? Chances are that when you are just starting you will assign a much higher probability to the success scenario and things will look bright but keep doing this simple exercise and refining those numbers as you gain more experience and deeper knowledge of the market. It is a great exercise that will help wake you up from your dreams and give you a much needed dose of reality.

2. Consider your financial situation periodically and set checkpoints on the way to make sure you are not diving too deep – you need to have enough breath saved to avoid drowning. If you can afford to keep going and you are passionate about what you are doing then by all means keep going, you will find that the numbers (see the paragraph above) after having taken a sharp dive from the early highs will start improving as your product eventually gains acceptance in the market. There is no doubt that good times are ahead if you can persist long enough. You should do this “checking” every two months in conjunction with the checking mentioned above.

3. Carefully monitor what your competitors are doing – if you notice that they are shying away from the products that compete with yours and focusing their efforts on other products it may be that they too are not getting the numbers, so, maybe the demand for your product is just not there.

4. Talk to people who have been successful and ask for their advice – see what they think of your idea. Share the situation with them and ask them pointblank whether they would advice you to give it up or continue pushing it. Many of those successful people have a highly developed sense of when it is time to quit and assuming no conflict of interests are involved their advice is invaluable.

5. And of course, talk to your customers and potential customers as much as you can – ask them what they think of your product; does it provide a good value for them; would they recommend it to someone else, etc. It will give you a fresh perspective and help you focus your efforts on the right areas.

I am sure there are many more checks and indicators that you can, and should consider when deciding to keep going or giving it up. So, please feel free to not only comment on the above suggestions but to list your own suggestions as well. There are many bright programmers with entrepreneurial spirit working on all kings of great products that can be “saved” by a structured, cold hearted approach to evaluating their grandiose ideas.

To all entrepreneurs out there – the biggest favor you can do yourself is to diligently scrutinize your idea periodically to determine whether it is worth to keep investing on it. How you do it, what factors you consider etc. is all up to you and not critically important – making sure you actually do it is what is really important.

Hope this helps many and doesn’t annoy any :)

Friday, December 7, 2007

Don’t do it yourself!

A few years back I met a friend of mine who was in the software components business and while he was explaining to me what his components did I was thinking "who in the World is going to buy those?”, “anyone can now easily do what you are offering with a few lines of code”. However, knowing that my friend was a very smart fellow I gave in, downloaded and reluctantly started using his components here and there in my code. To my surprise it did not take long for me to fall in love with those drag and drop components that took care of setting everything for me.

I started keeping a simple log indicating the minutes I was saving every time I dragged one of those components on my forms. When I wrote 3 minutes on my first log entry a “forget this” thought was floating on the back of my mind but I decided to do it for one whole week…

Have you ever looked doubtfully on a credit card statement where the biggest expense item is $50 and yet somehow the total adds up to $3K! If you have, you understand the doubt I had when those “pitiful” minutes added up to a total of 170!

That was like a wake up call – the proud programmer in me had kept me away from exploring the vast repository of off the shelf components – “I don’t need components, I can do those things myself – not only will my code do the job better but I will have complete control over it and I won’t have to rely on a vendor or another when things don’t work, and besides, I won’t save much time anyway” was my usual reasoning. But, man had I proved myself wrong!

The more I explored the market the stronger became the realization that there are hundreds of extremely intelligent programmers out there pouring their knowledge and energy in creating those incredible, time and frustration saving components but I had “shunned” them – to my own detriment!

Since then I resolved to never ever write a line of code that I don’t have to – I take my time to know and test what’s available out there and I start every project with a list of components and parts that I can use. Nowadays, a much bigger portion of my time is spent in architecting than in bricklaying and it feels good.

A recent meeting with a few bright guys from an IT department prompted me to write this and issue a call to all programmers out there – PLEASE DON’T DO IT YOURSELF if you don’t have to!

PS if you feel the urge to refute this on the grounds that it is better to do it yourself sometimes depending on the situation please don’t waste your time – yes, there are cases when you absolutely must write it yourself but that is not the point here.

Thursday, December 6, 2007

Why should a .NET/SQL Server developer care about database comparison tools like xSQL Object?

Any .NET developer who has worked with SQL Server has at some point had to deal with the challenge of transferring database changes from the development db to testing or production db. It's always the same, you start your "application enhancement" project with a clear vision of the outcome, you potentially identify the database objects, tables, views, stored procedures, functions etc. that you may have to tweak, completely revamp or build from scratch.

As you move along new changes and additions to the database structure (aka schema) become necessary - you keep making those changes to the database and depending on your type (from highly organized to totally messy), experience (from decades of experience to a rookie programmer) etc. how you handle those changes may vary from the "meticulously document everything" approach to the "I will remember those changes I am making" approach.

While the "document everything" approach is commendable it does unfortunately come with a hefty price tag - a lot of extra hours will be spent on that documentation and to make matters worse no intelligent programmer who gets the adrenaline rush from coming up with ingenious approaches to handling technical challenges enjoys dealing with it.

On the other hand, the "I will remember" approach is not only non-commendable but depending on the complexity and sensitivity of the project it may at times be disastrous - otherwise genius programmers pulling their hair trying to figure out why the application is working fine on their development environment but is going haywire on the production, operations people going nuts over the malfunctioning of the system on which their livelihood depends etc.

So what is an intelligent .NET programmer to do?

Fortunately, there is no need to choose between bad and worst - there is no need to spend all those hours documenting everything (don't take this the wrong way - any good programmer will always take the time to provide sufficient documentation to allow a comparably intelligent human to understand why something was done, who did it and when) nor there is a need to remember what changes you are making. xSQL Object, allows the user to compare two databases and clearly identify all the changes that have been made on the structure (aka schema) of one database versus the other. But wait, it goes way further than that - it allows the
user to generate a safe change script that will apply (transfer) all those changes to the destination database in a single click. Now that's efficiency - something you would have to take hours to do you can handle with xSQL Object in minutes and not only that you can proudly archive the detailed "documentation" of all the changes you made to the database - not only is that commendable but it feels great too - you are doing an outstanding job without having to waste a minute on it.

Here is where things get even better - xSQL Object is completely free, no strings attached, for SQL Server Express edition. And what if I am not using SQL Express but some other edition of SQL Server like the Workgroup Edition, Standard Edition, Enterprise Edition etc? Not to worry, we have thought of that too - xSQL Object is free for those other editions too as long as the number of the objects in your databases is under certain limits.

Monday, November 26, 2007

Is your SQL Server exposed?

xSQL Software has just released a free service that performs basic SQL Server security checking (http://www.checksql.com) - it attempts to establish a TCP/IP connection on the default port, if successful it then checks the SQL Server version installed to ensure the latest service pack has been applied and also attempts to login using a small number of common username / password combinations.

Wednesday, November 7, 2007

My boss won’t pay $299!

What a loser was the first thought that crossed my mind, when I saw this comment on a newsgroup – it is not your boss who won’t pay $299 for something that will save you tons of hours of work, it is your insecurity that prevents you from making a trivial case to your boss… but then it dawned on me, it is not really this poor souls fault – it is us, the IT managers (I used to be one of those) who fail to foster a culture of productivity and efficiency but rather blindly focus on budget restrictions. How does a business benefit from having a highly qualified, highly paid programmer spend hours upon hours scouting the web for free tools or worst yet trying to re-invent the wheel because the boss won’t approve spending a few hundred dollars!?

Yes, there are people out there who are willing to drive 50 miles to save $5 on an item and it never occurs to them that in the process they have wasted approximately $20 on the car (using a $0.4 per mile rate) and 1 priceless hour of their life! However, that is not to be expected from IT people who overall have an above average intelligence and reasoning ability. Unfortunately, there are many highly intelligent people out there doing exactly that!

Disappointed!

Leave your comments here.

Tuesday, October 16, 2007

Check out coolsqltools.com

Check out this cool new site http://www.coolsqltools.com - has a list of FREE SQL Server tools and few other cool tools.

Thursday, October 4, 2007

Upgrade to SQL Server 2005 or wait for SQL Server 2008?

Since we are fast approaching the SQL Server 2008 public release the question often comes up whether to go ahead and upgrade to SQL Server 2005 or wait until the release of SQL Server 2008. Of course there is no clear cut answer to this question – it depends on many factors however, there is one important thing to consider: Microsoft has put a lot of effort into making the upgrade experience from SQL Server 2005 to SQL Server 2008 as easy and painless as it can possibly be and I don’t think that holds true for migrating from SQL Server 2000 to SQL Server 2008.

So, if you are still in SQL Server 2000 the most efficient and painless approach maybe to upgrade to SQL Server 2005 first and then upgrade from SQL Server 2005 to SQL Server 2008.