Archive for the ‘Software’ Category

Your Business Has No Costs

Sunday, November 26th, 2006

Forget what you may have learnt about accounting, your business does not have any costs. All you have are potential investments.

Any amount of money it takes to run your business has to be viewed as an investment, not a cost. It does not cost you to have Google Ads, post software on download.com, have a payment processor, or pay for web hosting. These are all the investments it takes to run a business and grow your money.

Expenses and costs are scary things especially for the small microISV. It’s extremely scary to take the first $500 you make and put it into a PR campaign, or spend $300 of your money on professionally designed icons. If you view these as costs, it makes it that much harder to actually get the nerve to spend the money.

Instead, look at everything you do as an investment. Firstly, for most microISVs, a major investment is in your payment processor. The reason is because when you give your payment processor 8%-15% of all sales, you have essentially made them a minority partner. However, without them, well, you just wouldn’t be making any money. So, in taking this into consideration, do they make a good minority partner? Are they worth the investment you have put into them?

Secondly, every dollar you spend must be viewed in terms of how much additional money it will generate for you. Put a value on everything your investment earns, from relationships, to good will, to any future opportunity you have just opened up.

If you truly believe you have a great product, you should not be afraid to continually invest your own money into it. Even borrow money in order to magnify your returns with other people’s cash.

Here is how to evaluate how and where to spend your money.

Quantify all possible investment decisions
How much your Google ads return is easy to see. However, how do you track how much professional icons will generate, or professionally written documentation? You can’t! You can only estimate based on what each outcome will mean to your company. Use your best guess taking into consideration your competition, the reputation you would like to build, and the tastes of your target market. Assign an actual value to everything you do.

How much money can you possible make?
With each investment you are considering, what is the best, worst and most probable outcome? If you put one dollar into Google adwords, what is the most amount of money you can make, the least amount, and the most likely amount?

If you could in no way make more than the risk free rate, (ie the rate offered by short term t-bills/GIC’s), don’t bother. Your money is better spent elsewhere.

Don’t forget about long-term payoffs. Many people are very risk averse. If its not a sure thing it can get real scary. Think long-term! Investing in a good customer support system means easier management and better customer relationships for years to come. How much is that worth to you?

Remember the indirect consequences as well. How will buying an ad in a magazine payoff in addition to sales? You get to build a relationship with the magazine so they will possibly review your software, and you build credibility in the eyes of your customers for your company.

Evaluate Alternatives
Always evaluate what else is out there. Competition improves prices and offerings. You don’t buy a mortgage from the first bank you go to. You shop around just like you should when finding any potential investment for your company. What magazine will provide the best rate of return? Even if one is not directly your target market, what would it mean if you were seen in that magazine?

You have so many options and you must get creative. Multiple ads in smaller magazines may be more profitable then one ad in a large magazine.

Keep track of ROI
Keep track of all your investment returns. Write down what you spent and for what. Then, write down how much it has returned in dollars, as well as keep notes on any non quantifiable returns.

Practice on old investments
How have previous investments paid off? How has upgrading the RAM on your computer improved your productivity? How has buying a new customer support help desk improved your response time, and in turn improved your customer retention?

It makes no sense, for any serious business to continually invest in itself if investments in other companies will provide greater future returns. Keep looking for great ways to grow your money through great investments. If you can’t, there are thousands of companies that can find a good use for your cash!

Our savings are tied up in mutual funds and invested in other companies we’ve probably never heard of. If you truly believe in your company, where are you putting your savings?*

*don’t forget to diversify:)

Technorati Tags: , , ,

How Many People Are You Helping?

Saturday, October 14th, 2006

Over the past few years many developers have focused on creating applications online instead of making downloadable executables. And why not? You get applications that can be used from virtually any computer, you can share information with many people in real-time, and you can communicate easily with others no matter where they are located.

My question to you would be, how often do you need these features and what are you willing to give up to get them?

Lets face it, many online applications are really cool. Google Analytics and Google Spreadsheets are two that come to mind. Zoho’s product line is also very impressive.

However, realistically, how often do you need to share documents in such a way that your current tools become inadaquate? More importantly, how often do you need the benefits offered by these online applications taking into consideration how you currently get by without them? Are they really all that necessary?

For some people they may be a necessity, but is this the case for the majority? Are the majority of people willing to give up the benefits of their word processor to switch to an online application? Are they willing to upload all their current documents to someone else’s server? Are they willing to lose the integration that downloadable applications can offer with their operating system and other apps (i.e. on Mac OS X you get one common spell checker and dictionary so adding a word to the dictionary in one application automatically makes other applications aware of it)?

Operating systems have been refined and updated for decades in order to provide a great user experience. How many people are willing to give this all up for the benefits listed above? In addition, how many people are going to pay for these benefits in order to use these online applications.

TryBeta is browser based because it requires users to collaborate with other users all over the world at any time. This doesn’t mean that every feature should be offered purely as a browser-based option.

My point in this article is not to downplay the significance or the hard work of developers creating online applications. My point is to ask yourself, in all honesty, do the benefits outweigh the drawbacks? How many people can really benefit from an application that is provided online versus as a downloadable application?

I am using online applications to help prove a point that can be considered for any kind of design or feature you are planning to add to any kind of application.

How often will the feature be used and by how many people?

Write down the feature you would like to add. Does it contribute to the core problem that the application is set out to solve? If not, does it solve a new problem? How many people are looking for a solution to this new problem?

Part 2: What Features To Add And When

Monday, September 25th, 2006

In my last post I talked about some of the strategies I use to help determine which features should be added to an application. It’s always a problem to determine which features should be implemented, especially when the feature request comes from a customer. If a customer needs it, its hard to say no.

However, further to my points from last week, after I have determined the kind of feature it is, I borrow a model used in Management theory to help categorize features further.

I like to look at potential features in four ways. They include;

1) Is the feature valuable to your company

In order for a feature to be valuable to a company it must improve the product significantly enough to increase revenue. Obviously a feature that increases revenue must also be valuable to the customer. The perceived value of a feature is what counts, not necessarily how useful it may be. That statement may seem a little odd, because naturally one would assume a feature must be useful in order to be valuable. However, I have found that this is not always the case.

Take for example the web hosting industry. Companies are offering 250GB of bandwidth and 5GB of file space as a starter account for $3.99/month. It is a well established fact that most users of web hosting use less than 5% of what they pay for. Why then are hosting companies competing so aggressively on bandwidth and space? Because that is what customers find valuable. Customers believe this is what they need so they go ahead and look for companies that provide the greatest amount bandwidth and file space, even though they will never use that many resources. This often prompts web hosting companies to oversell, but this is a discussion for another day. There are many other features that should be valuable to a web hosting customer, but for the majority, bandwidth and file space are perceived as the most valuable.

In order to determine what is valuable to your customers it is important to know a few things about them. This always comes back to knowing your target market. Looking through your past support emails, what do your customers value?

It may include;

1) Ease of use

2) Speed

3) Interface

4) Compatibility/Integration with other products

5) Customization

By determining what they value, you can have a better idea of which features should be added and when. If feature requests come in that don’t fall under what your customers consider most valuable, you may want to delay adding that feature.

One of the more general aspects of an application that users value is speed of execution. That is why with technologies like AJAX and even just regular, old javascript, combined with the increasing number of users using broadband connections to connect to the web, online applications have a greater chance of prospering. Google has done an amazing job with gmail, Google Spreadsheets and Google Analytics to name a few. However, there will still always be a lag when information must be passed to the server and back. That is why not all applications are suited to go web based.

Where users value collaboration and portability, web based applications have a huge advantage over desktop applications. They can be accessed from virtually any computer, anytime, without the need to download large software packages. Multiple people can work on them at the same time, and data can update live as each individual makes changes.

One last example can be found in web browsing software. With the increase number of viruses and spyware, security has become a feature of great value to customers. Firefox was able to gain significant market share as users perceived it to be more secure than Internet Explorer. As Internet Explorer 7 continues to aggressively fix security holes (as well as add tabbed web browsing), they may be able to get back lost market share to recent Firefox switchers. Although, without additional features of value, doing so may prove to be difficult.

2) Is the feature rare?

Copying the features of rival applications may be required in order to keep up with the competition. However, when you find a feature that is not found anywhere else, you can gain a short-term competitive advantage and have the benefit of customers knowing you were the first to implement it.

Adding features not found in other applications is not an easy thing to do. Often times you set the standards for how the feature will be used. Educating customers on how to use the feature may turn out to be difficult.

When deciding on which features to implement, if you are the only application that has the certain feature, you can quickly convert customers to your software. If their current solution does not offer what you do, new customers will be more willing to try your application.

3) Is the feature hard to imitate?

Building on the last point, if the feature you are going to implement is hard for other companies to imitate, you can maintain your competitive advantage indefinitely.

It may be hard to imitate because you own the rights to a certain technology. For example, a certain protocol or file format. Or, you may just have a certain employee with skills beyond what your competition can attract. A strategic partnership may arise which allows you to integrate the core competencies of either company to deliver a superior product over what your competition could ever do.

As a developer of web development software, we have a partnership with a web hosting firm to offer one year of personal web hosting with the purchase of our web development products. By taking advantage of the economies of scale provided by our partnership with a web hosting company, we are able to offer this package that would otherwise be very expensive for us to do on our own.

4) Do you have the capabilities to take advantage of the feature

The last criteria you have to judge against the potential feature is whether or not you have the capabilities to take advantage of the particular feature.

Can you actually implement this feature? Is it too expensive? Does it rely on technology that you do not currently have? Can you promote this feature to customers and get them excited about it? Most importantly, do you have the resources to pull it off?

If the feature is beyond your coding abilities then it may not be a good idea to pursue it. Perhaps it will require 2 additional support personnel just to handle future support requests. If you can not pull it off, its not worth doing a poor job.

Summary

In summary, when deciding what feature to implement, you have to ask yourself a few questions. Does it create value for you and your customers? How many other applications already offer it? How hard is it to copy by your competitors? Are you or your company able to take advantage of it?

I am not saying to rank features by any order of importance based on this model, though you can certainly come up with a ranking scheme. What I am suggesting is that for each feature you are about to implement, you should ask yourself these questions. Take them into consideration to help you decide which feature you should add to your software next.

Part 1: What Features To Add And When

Tuesday, September 19th, 2006

You open up your email to a list of feature requests from customers. The emails go something like this;

“I think your software has good potential. It definitely needs X though in order to be really useful”

or

“Great program! Are you planning on adding X? When you do I will buy it.”

Now you rush out and make sure the next update has X in it. You don’t put a lot of thought into how its going to be implemented, you just know it has to be there. If your product doesn’t have X its not any good. Oh and wouldn’t it be really cool if it had Y too. You can’t have X and not have Y. If I don’t add X, Y and probably even Z, no one will buy my software again!

Sound at all familiar?

When you get that new feature idea in your head, you start to wonder, how did my software not have this feature before?

Adding feature X won’t necessarily benefit your software. Why? Features don’t sell software. The ability for your software to quickly solve a problem is what counts. Now you have to ask yourself, will feature X (and Y and Z) really help my users solve their problem much more quickly?

Some things to consider about new features;

1) Not all users need these features

2) Most users won’t even know they exist

3) Most users don’t use your software the same way, and won’t have any use for that feature

4) Features add software bloat and software bloat adds confusion and requires more training to use your software

5) Creating a solution to a problem that people don’t know they have is difficult to get users to understand. So just because a feature might help improve productivity, it may be tough to convince a user that they need it. This afternoon I was sitting with a friend who was using Internet Explorer 6. I told him he has to get FireFox to use tabbed web browsing. He said to me I have no problems with Internet Explorer, why should I change? He has never used tabbed web browsing before so he didn’t know how much it could improve his web browsing.

First, and most importantly, you have to know how many people actually need that feature in one form or another. If a lot of users are requesting a certain feature, you have to move it up on your to do list.

Here are a few things to consider;

1) Define what your program is most used for, the major problem it is trying to solve. Not what every single user may be using it for, just what the majority (70%+) might use it for. This will be called your Core Problem. The Core Problem is the problem your software is providing a solution for. You can have multiple Core Problems, but try to limit them to what the majority of people would use your application for.

Example: Link Checker

Core Problem: Help me fix all broken links on a web site

2) Separate Feature Requests into Categories
Core Features: Core features are those features required for your application to actually solve its Core Problem. If they are not there, your application would pretty much either do nothing, or it would be more convenient to do what it does manually.

Example For Link Checker:

Spider to scan/check links

List of broken links

Error number for each broken link

Which pages contain the broken links

Without the above features, your software would pretty much be useless. If Your link checker didn’t report the error code for a broken link, I would have to go an extra step in order to find it, which would make fixing it harder. Competition often defines what can be considered a Core Feature.

Convenience Features: These features make using your software easy to use. They don’t contribute to the Core Problem, they just provide a more pleasant use of your software. These include; undo/redo, Open Recent menu listing recently opened documents, auto check for updates, auto install plug-ins, keyboard shortcuts, spell checking, speed improvements and optimizations etc… They make solving the problem even faster than before by fixing little bottlenecks in the software design.

Functional Features: These features add additional functions and uses to your software. They are hard to determine because they may help with the Core Problem. To distinguish them from Core Features and Convenience Features you must consider these points:

1) Are there many other applications out there that perform this function? Do they do it better than you ever could? Are there standards that your customers are already used to?

This question helps distinguish the Functional Feature from a Core Feature. For example, adding an FTP Client to an HTML Editor to upload your web page files. This is not completely necessary and there are many third party programs that already do this really well. In this situation it may be better to integrate two separate products than add in an FTP Client.

2) Is this feature always required in order to solve the Core Problem of your software or are there just special circumstances where this feature can be used?

3) How many users can take advantage of this feature? Does it require expert knowledge? Can your target customer take advantage of it?

If only a small percentage of customers will actually have the knowledge or capabilities to use the new feature, it may not be worth implementing until more critical features are added.

4) Will it require a change in the category your application falls under? For example, you have a file browser and you add the ability to open Text files, Picture files, Movie files, Audio files, etc… and make quick changes to them. It now crosses the line between “file browsers” and “File preview tools”. Define the boundries of the category your software falls under so you know when your crossing that line.

There is nothing wrong with adding Functional Features. Functional features help attract more customers by stretching to more markets. All you are doing at this step is determing how to rank features based on the usefulness to your current market. However, you should always make sure core features are implemented first, then convenience features, and then functional features.

While working on a version 1.0 of your software, knowing the kind of features you are adding can help reduce the problem of never getting a final product out. It can help you decide which features must be added for version 1.0 and which feature can come in an upgrade. Functional Features can usually come in major upgrades at later times.

Using the above strategy does have its problems. It is subject to personal opinions of the developer. It is often hard to determine the difference between Core, Convenience and Functional Features. How you define them may be related to how you define the Core Problem. However, if you use this method of thinking, it may help you spend your time more efficiently and make your decision making process a little easier.

In my next post I will talk about how to decide on which features to actually add to your application by looking at each feature using four additional criteria.

Principles Of Software Design

Tuesday, August 22nd, 2006

1) Show confirmation after an action has been performed
After the user has performed an action, such as deleting a message, sending a message, uploading a file etc…, make sure it is clear that the action has been carried through.

Often applications will assume that just because the user has knowingly pressed the ‘Send’ button or the ‘Delete’ button, they know exactly what has happened. However, it is important that the users gets proper feedback even if the last action was a success. Don’t allow your users to wonder whether or not the last operation was carried through properly.

Another important principle that falls closely in line with this one is to provide active feedback as a long operation is taking place. Instead of making it seems as though your application has froze, visual feedback during long tasks is extremely important to let the user know what’s going on.

2) No Error Codes
Building on the previous point, when an error occurs, notification to the user is extremely important. This error code, however, must be descriptive and offer advice on what the user can do to fix this.

At a bare minimum, any error codes reported by the operating system, web server, etc… should be converted into plane English (or whichever language the application is developed in).

Once you translate the application’s error codes into something your users will understand, provide them with the steps to fix this problem. What should they do next? How can they fix the problem so it won’t happen again?

3) Always Provide A Way Out
Wouldn’t it be scary if you pressed the Delete button by accident and the confirmation message that appeared did not include a Cancel button? That would be the absolute extreme situation where the user was not provided with a way out.

Often applications don’t provide a clear way out of an operation if the user changes their mind. This happens a lot with online applications that force users to press their back button. I believe there should always be a way out of an operation without having to press the back button or quit an application.

This issue comes up a lot when an application tries to perform a long operation, for example, searching through thousands of files. It’s always important to let the user cancel the operation if they feel it is taking too long or realized they made a mistake.

Make sure you provide a way out of every decision you ask the user to make.

4) Easily Accessible Help
Are your users reading your manual from start to finish before they open your application? Not likely!

Nobody wants to read through manuals before they can use the new software they just downloaded. However, that doesn’t mean that they won’t go looking for help.

It’s important to provide the user with the necessary information and help resources when they need it. Using help tags is a good start, but combine that with quick links to additional help topics without making the user stop what they’re doing.

Help icons in all dialogs should take them to additional information on the current features they are working with. When they’re in the ‘Search Dialog’, the help icon should take them right to the search topic in your user manual.

5) Let Your Users Be Lazy
Spend that extra time putting in the necessary features to make sure your users don’t have to do additional work. Do they need to locate a file on their hard drive? Your application should offer to find it for them. Do they need to install another component from your web site? Your application should install it for them (Or at-least take them to your web site).

Allow your users to do less, so they can focus on using your application.

6) Make It Inconvenient To Delete Data
Even if this is an important feature in your application, make it really inconvenient. Don’t allow users to delete data easily. There is a reason Windows has a Recycling Bin and the Mac has the Trash can. If you allow users to delete data easily they will delete important data and blame you. Make it really inconvenient for them to delete anything, and if they do delete something, offer them a way to get it back.

7) They’re Not Reading Your Warnings
Building on the last principle, it is important to know that users are NOT reading your warnings. No matter how much you try to tell them, they are not paying attention.

This includes the pop-up Message Dialogs right before the user decides to delete his hard drive. The fact is, if users actually did read your dialog boxes, you would have a lot less support to handle. However, that doesn’t mean that these messages should not provide all the information necessary for users to make decisions.

Message dialogs that try to show a warning or error message should be visually different than other messages. I don’t mean to make your application completely different from other applications your users are used to, just to make sure that they know the message they are about to dismiss is real important.

8) Multiple Undo/Redo
So what happens after they ignore your warning dialogs? They realize where they want wrong and want to fix it.

All applications should have multiple undo and redo features. This should not be a feature, but rather a “Bug”, if it does not exist.

9) Hide the Advanced Features
When you design your application plan out what are the essential features and what are more advanced features for the users who want more control over your application’s features. Users just want to get their work done and not be bothered with dozens or options and choices. Give them what they need and tuck everything else away in an unobtrusive spot that users can get to only if they want more control.

For example, if your image editing application allows users to export images they have edited, a basic feature might be to choose the picture format. A more advanced feature would be the number of colors or the ability to include comments in their picture files.

10) Remember What They Like
Your windows and dialogs should remember previous settings that the user has chosen before. Going back to your image editing application, if they previously selected to export as a JPEG picture, your Export dialog should remember these settings.

11) Stay Consistent
Stay consistent both within your application and with other applications the user is used to. Make sure that interface elements are standard and are used properly. It is really difficult to create a new widget and expect users to know what it’s supposed to do. This is one of the problems with cross platform applications. They just don’t seem to blend in with the Operating System. It’s also a problem with web-based applications. Who gets to decide the Interface Guidelines that should be used? These decisions are already made for you when creating desktop applications for Mac or PC.

Non-standard controls will also not look good as operating systems get updated or the user uses different skins and templates.

Helping People Who Cannot Afford Your Software

Thursday, August 17th, 2006

Today a discussion in the ASP Newsgroups started about potential users who  feel it may be ok to steal software if they can not afford it. Unfortunantly, not everyone is able to have the opportunity to purchase your software, and thats normal for any product. The problem is that because software is so easy to steal, customers don’t really understand the consequences of their actions. Its not as if these same people would rob a Sony store for a 50 inch plasma TV just because they want it but cant afford it.

For the users like this who can not afford to buy your software, surely they must understand the risks of downloading illegal cracks with the potential of viruses or spyware. Even more so, they may be willing to donate some money, but without any push, they quickly forget.

An obvious reaction would be to try and do everything you can to prevent these users from being able to steal your software. Using dongles, online validation, multiple registration checks etc… are a few ways developers can fight this problem. However, do we really want to put ourselves in the same situation as the Music Industry put themselves?

I believe we can turn these users into our beta testers and get their valuable feedback. In return, these users will get substantial discounts or free copies of their favorite products. These users are not thieves or pirates. They are everyday people who do not have the means to pay for your software for whatever reason. What if we could say to them “Try our software, tell us what you think, and we’ll give you a free version with no viruses or spyware”? This would provide a win-win situation for both software developers and software users.

Encouraging Communication With Customers

Sunday, August 13th, 2006

Two problems that small developers face, which I believe are related are;

1) Too many customer support inquiries and not enough time to handle them all
2) The lack of feedback from beta testers

All software is technically always in beta since a perfectly stable product will never be a reality. If this is the case, then why not continue to encourage any kind of feedback at all times, even after the beta process?

Customer feedback should be encouraged and never taken for granted. This includes any kind of support inquiries or trouble shooting issues.

Often developers get the same users sending the same problem in over and over. All this means is that there is a problem with the underlying feature or process in your software. This is the time where you must reconsider how a feature was implemented. Does it function the same as other applications that the customer might be used to? What are they expecting the application to do at that point?

I believe the most important way to encourage customer feedback as well as reduce the time it takes to reply to customer support inquiries is to build a community for your users where it is easy for them to share ideas, issues, or questions they have about your product.

There are many ways to build your community, however, building a large community of users takes time, especially when you are just starting out. Here are some tips to consider when developing your community.

1) Make it easy for users to share and talk
Create an online discussion forum for your users where they can communicate with each other as well as brainstorm solutions to problems they are having. When you allow users to collaborate like this, you will learn about how they are using your products and how you can improve usability, which features need be added or changed, and what major issues customers are having. Your customers will often have creative ways to implement ideas or inspire new features.

2) Make it as easy as possible for legitimate users to participate
A major problem online is SPAM. You don’t want to have your boards filled with SPAM bots posting links back to their sites. This often means having email verification to insure actual, legitimate users are participating. To help with this issue, make sure each customer who orders your product knows about your community. Even better, create an account for them automatically with their purchase so they can start participating. This way you know they are legitimate and you remove many barriers that may have prevented them from participating

3) Actively Participate in your own community
Showing that you are part of the community is very important to customers. If they know that this is the best way to get help or provide suggestions, they will be more likely to participate rather than send private email messages to support.

4) Make your members feel special
If certain members are posting a lot and helping other users, make them feel real special. Give them an important status such as YourProduct Guru or provide them with pre-release products and ask them for their personal feedback. This is a great way to turn active users into beta testers.

5) Remove unimportant features from forum/community software
Most forums come with many features that are not needed. This includes calendars, birthday reminders, buddy lists etc… Remove or disable the unneeded features of your forums to reduce any clutter and confusion. Focus on allowing users to share ideas and experiences.

6) Integrate your forum into your web site
It is very important to make the look and feel of your community match the rest of your web site. Create custom skins and choose the colors that blend with your site. This helps create trust and allows your members to take your community seriously.

7) Kick off your community by making it a useful resources
A good way to kick start a community is by filling it with useful tidbits of information relevant to the topic. By finding resources that are useful to your members you will encourage them to come back and seek new information. This doesn’t always have to be cutting edge news, just something you think the members will find useful.

8) Advertise your online community as a benefit to your software
Your online community should be seen as a benefit that customers get when they purchase or use your products. A successful online community is difficult to imitate, so turn this into an advantage over your competition. When customers purchase your products, they are also joining a large community of users, let them know that.

You’re software is for your customers, so their feedback is the most valuable resource you can ask for.