Archive for the ‘Software Applications’ Category.

Listing available Properties of an DirectoryEntry object

If you are messing with IIS in C# code, you can do quite a bit if you System.DirectoryServices and the DirectoryEntry object. This can be extended if you know the name of the items in a the DirectoryEntry’s property collection. You can get these as follows:

using System;
using System.Collections.Generic;
using System.DirectoryServices;

namespace FindIISLogWithCSharp
    class Program
        static void Main(string[] args)
            List<string> AvailableProperties = new List<string>();
            DirectoryEntry folderRoot = new DirectoryEntry("IIS://localhost/W3SVC");
            PropertyCollection pc = folderRoot.Properties;
            foreach (PropertyValueCollection p in pc)
            // Sort alphabetically
            foreach (String prop in AvailableProperties)

Of course, different DirectoryEntry objects can have different lists. However, this exact one created the following list on a Windows 2008 R2 64-bit Server with IIS installed and configured.


Cool Open Source Games you should contribute to (from Shinnok’s Rants)

Open Source games

Cool Open Source Games you should contribute to

I found this site about open source games. I didn’t know about most of these.

Time to download and play one.

If you have already played one, please comment and let me know how you liked the game.

Too bad the only one I have played is Extreme Tux Racer.

Installing IIS 7 from the command line on Windows 2008

Ok, so our customers are tired of having us have an IIS prerequisite in our product installer. They want us to install and configure IIS for them.

So I found this article: Installing IIS 7.0 from the Command Line

I am testing the command line provided in this article in a command prompt. I have verified the command prompt is running as Administrator.

On Windows 2008 R2, it failed with this error: -2146498548

So if at first you don’t succeed, try, try again.

Well, I don’t actually need everything in the script. So I tested this command line:

start /w PkgMgr.exe /iu:IIS-WebServerRole;

This command succeeded. The resulting installed IIS Roles and Services are these.

Note: This output is give by running this command: servermanagercmd.exe -query

[X] Web Server (IIS)  [Web-Server]
     [X] Web Server  [Web-WebServer]
         [X] Common HTTP Features  [Web-Common-Http]
             [X] Static Content  [Web-Static-Content]
             [X] Default Document  [Web-Default-Doc]
             [X] Directory Browsing  [Web-Dir-Browsing]
             [X] HTTP Errors  [Web-Http-Errors]
             [ ] HTTP Redirection  [Web-Http-Redirect]
             [ ] WebDAV Publishing  [Web-DAV-Publishing]
         [ ] Application Development  [Web-App-Dev]
             [ ] ASP.NET  [Web-Asp-Net]
             [ ] .NET Extensibility  [Web-Net-Ext]
             [ ] ASP  [Web-ASP]
             [ ] CGI  [Web-CGI]
             [ ] ISAPI Extensions  [Web-ISAPI-Ext]
             [ ] ISAPI Filters  [Web-ISAPI-Filter]
             [ ] Server Side Includes  [Web-Includes]
         [X] Health and Diagnostics  [Web-Health]
             [X] HTTP Logging  [Web-Http-Logging]
             [ ] Logging Tools  [Web-Log-Libraries]
             [X] Request Monitor  [Web-Request-Monitor]
             [ ] Tracing  [Web-Http-Tracing]
             [ ] Custom Logging  [Web-Custom-Logging]
             [ ] ODBC Logging  [Web-ODBC-Logging]
         [X] Security  [Web-Security]
             [ ] Basic Authentication  [Web-Basic-Auth]
             [ ] Windows Authentication  [Web-Windows-Auth]
             [ ] Digest Authentication  [Web-Digest-Auth]
             [ ] Client Certificate Mapping Authentication  [Web-Client-Auth]
             [ ] IIS Client Certificate Mapping Authentication  [Web-Cert-Auth]
             [ ] URL Authorization  [Web-Url-Auth]
             [X] Request Filtering  [Web-Filtering]
             [ ] IP and Domain Restrictions  [Web-IP-Security]
         [X] Performance  [Web-Performance]
             [X] Static Content Compression  [Web-Stat-Compression]
             [ ] Dynamic Content Compression  [Web-Dyn-Compression]
     [X] Management Tools  [Web-Mgmt-Tools]
         [X] IIS Management Console  [Web-Mgmt-Console]
         [ ] IIS Management Scripts and Tools  [Web-Scripting-Tools]
         [ ] Management Service  [Web-Mgmt-Service]
         [ ] IIS 6 Management Compatibility  [Web-Mgmt-Compat]
             [ ] IIS 6 Metabase Compatibility  [Web-Metabase]
             [ ] IIS 6 WMI Compatibility  [Web-WMI]
             [ ] IIS 6 Scripting Tools  [Web-Lgcy-Scripting]
             [ ] IIS 6 Management Console  [Web-Lgcy-Mgmt-Console]
     [ ] FTP Server  [Web-Ftp-Server]
         [ ] FTP Service  [Web-Ftp-Service]
         [ ] FTP Extensibility  [Web-Ftp-Ext]
     [ ] IIS Hostable Web Core  [Web-WHC]

This is almost enough but I also need these more than the default. I also need the ones below that I have put an “I” in.

[X] Web Server (IIS)  [Web-Server]
     [X] Web Server  [Web-WebServer]
         [X] Common HTTP Features  [Web-Common-Http]
             [X] Static Content  [Web-Static-Content]
             [X] Default Document  [Web-Default-Doc]
             [X] Directory Browsing  [Web-Dir-Browsing]
             [X] HTTP Errors  [Web-Http-Errors]
             [ ] HTTP Redirection  [Web-Http-Redirect]
             [ ] WebDAV Publishing  [Web-DAV-Publishing]
         [ ] Application Development  [Web-App-Dev]
             [ ] ASP.NET  [Web-Asp-Net]
             [ ] .NET Extensibility  [Web-Net-Ext]
             [I] ASP  [Web-ASP]
             [I] CGI  [Web-CGI]
             [I] ISAPI Extensions  [Web-ISAPI-Ext]
             [ ] ISAPI Filters  [Web-ISAPI-Filter]
             [I] Server Side Includes  [Web-Includes]
         [X] Health and Diagnostics  [Web-Health]
             [X] HTTP Logging  [Web-Http-Logging]
             [ ] Logging Tools  [Web-Log-Libraries]
             [X] Request Monitor  [Web-Request-Monitor]
             [ ] Tracing  [Web-Http-Tracing]
             [ ] Custom Logging  [Web-Custom-Logging]
             [ ] ODBC Logging  [Web-ODBC-Logging]
         [X] Security  [Web-Security]
             [ ] Basic Authentication  [Web-Basic-Auth]
             [I] Windows Authentication  [Web-Windows-Auth]
             [ ] Digest Authentication  [Web-Digest-Auth]
             [ ] Client Certificate Mapping Authentication  [Web-Client-Auth]
             [ ] IIS Client Certificate Mapping Authentication  [Web-Cert-Auth]
             [ ] URL Authorization  [Web-Url-Auth]
             [X] Request Filtering  [Web-Filtering]
             [ ] IP and Domain Restrictions  [Web-IP-Security]
         [X] Performance  [Web-Performance]
             [X] Static Content Compression  [Web-Stat-Compression]
             [ ] Dynamic Content Compression  [Web-Dyn-Compression]
     [X] Management Tools  [Web-Mgmt-Tools]
         [X] IIS Management Console  [Web-Mgmt-Console]
         [ ] IIS Management Scripts and Tools  [Web-Scripting-Tools]
         [ ] Management Service  [Web-Mgmt-Service]
         [I] IIS 6 Management Compatibility  [Web-Mgmt-Compat]
             [I] IIS 6 Metabase Compatibility  [Web-Metabase]
             [ ] IIS 6 WMI Compatibility  [Web-WMI]
             [ ] IIS 6 Scripting Tools  [Web-Lgcy-Scripting]
             [ ] IIS 6 Management Console  [Web-Lgcy-Mgmt-Console]
     [ ] FTP Server  [Web-Ftp-Server]
         [ ] FTP Service  [Web-Ftp-Service]
         [ ] FTP Extensibility  [Web-Ftp-Ext]
     [ ] IIS Hostable Web Core  [Web-WHC]

So the article was somewhat correct. Turns out this command line works:

start /w PkgMgr.exe /iu:IIS-WebServerRole;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DirectoryBrowsing;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASP;IIS-CGI;IIS-ISAPIExtensions;IIS-ServerSideIncludes;IIS-Security;IIS-WindowsAuthentication;IIS-WebServerManagementTools;IIS-ManagementConsole;IIS-IIS6ManagementCompatibility;IIS-Metabase

And this command line satisfies all my requirements.

LANDesk Support Tools vs Windows Side by Side (SXS)

I work for LANDesk, in case you have forgotten, and I have this LANDesk add-on called LANDesk Support Tools.

So I couldn’t figure out why my Send Message command in my LANDesk Support Tools wouldn’t work in 64 bit. It kept saying that msg.exe wasn’t on the remote client. Of course, I checked and it was right there in c:\windows\system32\msg.exe.

However, I was able to spend some more time on this and it turns out that if a 32 bit application (such as the LANDesk agent) goes to work, an executable that only exists in 64 bit form, such as msg.exe, is not exactly “visible” to the 32 bit application.

So I have to call it using c:\windows\sysnative\msg.exe. Now I just have to figure out how best to implement this difference in my LANDesk Support Tools so the command works for both 32 bit and 64 bit versions of Windows 7.

Why Technical Support Engineers are not all the same!

Technical Support Engineers are not all the same. There is an inclination in the industry to look down on Technical Support Engineers.

Recently the following article was published:
10 IT positions ranked by prestige

This article didn’t exactly identify the Technical Support Engineer role, but it was unfortunately encompassed in the bottom two positions with the lowest prestige, Technical and Help Desk Analyst.

Should a Technical Support Engineer have the lowest prestige of all technical jobs in the industry? If you think so, you might want to reconsider after read this.

There are multiple levels of technical support and you should know what level of technical support a person is in because that should significantly change your view of this persons technical skills and ability.

What they support and to what level they support it makes a major difference in how to view a Technical Support Engineers background.

Obviously there is a difference between someone who does tech support for a company like Cisco, Microsoft, LANDesk than someone who does technical support for a BowFlex. But this is an obvious difference. A chart that is more of gradient is needed.

Here is some information to help guide you in determining what experience a Technical Support Engineer really has in the technology industry.

1 – Complex product that requires knowledge of an entire area of technology, including both software and hardware environments

These engineers are often not just support engineers. Along with being an expert on their product, they must understand many other concepts such as Networking, Servers and server-side software such as Web Servers, Database Servers, DNS servers, DHCP servers and more. It is not enough to just know how to set up their software, they have to know how to set up the environment around it. They also have to know how to troubleshoot to deep levels both their software and the environment around it.

Usually these engineers practice during portions of their job being Systems Analysts, Consultants, Sales Engineers, IT administrators, Change Controls administrators, developers, and more. They deal will the full gamut of technology and all the areas around it.

Example companies

Desktop Management companies such as LANDesk, SCCM, Kace.
Network Manager Software such as HP OpenView

2 – Specialized product that requires knowledge of one major portion of an IT or Software Environment

These engineers are often not just support engineers. Along with being an expert on their product, they must understand many other concepts in the technology world. It is not enough to just know how to set up their software, they have to know how to set up some portion, though not all, of the environment around it. They also have to know how to troubleshoot to deep levels both their software and their portion of the environment around it.

Like above, these engineers have some limited consulting experience and are gaining understanding of change control and IT administrative processes along with being technology experts.

Example companies

Support for Network Equipment such as Cisco, Juniper Networks, etc…

3 – Specialized product that requires knowledge of a single area of an IT or Software Environment

This person is an expert on their software or hardware product as well as an expert in one or more areas surrounding it.

Individuals who excel here are usually are ready to explode into a new technology after a little as one year in this position.

Example Companies

Business intelligence software, such as QlikView.
Dell, HP and other computer resellers.
Simple Appliances, such as a NAS.
Any company’s internal Computer Help Desk (but be aware of glorified password resetters)

4- Specialized product that requires technical knowledge but only for that exact product

This person is an expert on their software or hardware product but there is not indication they know anything else about technology from this position, which doesn’t mean they don’t, just that this position doesn’t indicate it.

Example Companies

Home consumer products such as Wireless Routers from D-Link, Linksys, etc.

5 – Specialized product that requires knowledge in an area outside of IT but still somewhat technical

This person is an expert on their software or hardware product as well as an expert in one or more areas surrounding it.
Usually this product has interfaces into other technology that not used commonly but Technical Support Engineers usually don’t take the common calls for things that just work, they learn the tough issues, which usually involves integrating with something else. However, they don’t always know that area of technology, just the minimal knowledge to make their product work with it.

Example companies

Software Applications outside of IT: Microsoft Word, Excel.

6 – Specialized product that requires knowledge in an area outside of IT but not exactly technical

This person is an expert on their software or hardware product as well as an expert in one or more areas surrounding it. This expertise is beneficial outside the position but only in limited areas.

Example companies

Software Applications outside of IT:
Adobe Photoshop
gaming software

7 – Specialized product that requires knowledge that is technical but not really related to software or IT at all

This person is an expert product but it is just a simple product that being an expert on it really has no value anywhere else.

Example companies

Cable box companies
radios and sound systems

8 – Generic product that requires little technical knowledge

This person usually supports something that is sold on a made-for-tv ad, such as an exercise appliance. They usually have a script they follow and this position can be filled by almost anyone who can read and speak.

Example companies

Clock Radios

The 8 Types of Technical Documentation and Why Each Is Important

Technical documentation is critical to the success of any software. However, most creators of software struggle to provide adequate documentation for their product. Rare is the software that is praised for its documentation. When documentation is praised, it is often only praised for having some documentation, which is more than most, but in reality documentation is usually still inadequate.

So what constitutes adequate documentation? Well, if a user wants to do something with your software and the documentation helps them succeed in a timely manner, then the documentation is adequate. However, accomplishing this is not as easy as it sounds.

Why most companies fail to document properly

Most companies do not document their product thoroughly for a few reasons.

  • Lack of a defined list of all types of documentation
  • Lack of understanding of each type of documentation
  • Documentation is not made a priority and lacks of funding

Lack of a defined list of all types of documentation

Many cannot name more than one or two forms of documentation. To be successfully with documentation, a software company must first enumerate the types of documentation. Then it must learn about each type of documentation and understand the role that each type of documentation plays. It is also critical to understand the different target audiences each type has. Also, what are the common mistakes made when trying to create each type of documentation so these mistakes can be avoided.

Attempts are made to document software in different ways. However, because a complete documentation set is not defined, success is nearly impossible. To make matters worse, there is little to no reporting or visibility into the level of documentation a given piece of software has. I have never encountered software that has reached a 100% documentation level.

In order to succeed there must be an understanding of the types of documentation.

  1. Step-by-Step Walk-thrus – Also called Guides, How to’s, or Examples, Quick Start Guides
  2. Product feature documentation – This is lists all the features and settings without really any real world examples. Often the help button inside the software points to sections of this document.
  3. Troubleshooting Documentation – What to do when a failure occurs. Where are the logs and how to read them. How to turn on or increase logging and debugging.
  4. Knowledge-base (Problem, Cause, Resolution), Frequently Asked Questions (FAQ), and Forums
  5. Code, API, or SDK Documentation
  6. Internal Development Documentation – Such as code and development documentation, internal only features use by developers and/or testers, architecture documentation (Note: For open source projects this information is usually public)
  7. Real life customer implementations – Examples of how a company has a product implemented in real life
  8. Marketing documentation – Basic over views of the value the software has for the company, ROI claims, general feature lists, costs, etc…

The worst documentation of all is of course the absence of documentation. However, most software companies are unaware that there are entire areas of documentation that are lacking. To have complete documentation you must provide it in all of these areas.

Lack of understanding of each type of documentation

Since most software companies are unaware of the list above, it makes sense that they don’t understand the items on the list. This is why they have no direction and their documentation is a sporadic combination of the different documentation types, never fully succeeding to accomplish the primary goal of documentation, which is to enable the reader to succeed.

In order to create excellent documentation, a full understanding of each type of documentation is requisite. Without this understanding, documentation your documentation will continue to be lacking.

The lack of understanding also leads to assumptions that are not true. Some think that if they try to document every setting their software has they will have complete documentation. Usually when this is done, there is so much effort put into this that providing a simple example is forgotten. Often I hear this question:

Why would an example be needed, every feature is documented?

I would answer this question as follows:

Information overload. Now there is so much documentation in one white paper that someone who wants to do something simple is unsure that it is simple. They don’t know which features they must setup and which are unnecessary or should remain as defaults.

I often find this with Open Source documentation and unfortunately when a user asks for an example they are often rudely told to “Read the Manual” or RTM. However, the manual is usually hundreds of pages and they probably need to read one page of the manual but just don’t know where to start.

If have seen documentation using only examples as well. However, when an attempt is made to deviate from the examples, there is nothing left in the documentation to provide the guidance necessary to succeed.

Some documentation is better defined, such as that created from the results of support calls, forums, or mailing lists. Because this type of documentation is completely reactionary, this is one area of documentation that is better defined. The documentation is created after a problem is experienced and has to be dealt with. However, once created, it exists to benefit others. As this documentation type is better defined you might not be surprised to know that it has its own acronym: KCS or Knowledge Centered Support.

The goal of this article is to raise awareness of all types of technical documentation and make them all as well-defined as support documentation.

Documentation is not made a priority and lacks of funding

Investing in documentation is expensive. But it is usually and expense that pays off. If an analyst has to choose between two competing software applications and one is well documented and one is not, the well documented software application is likely to be chosen. Many organizations fail to see the ROI in documentation and therefore choose not to invest.

It is obviously that lack of funding for documentation is an industry wide phenomenon. While technical writing has been around since even before software, a standard for documentation whether it be creating documentation, updating documentation, managing documentation, and reporting on documentation has yet to formally exist. However, I did find this link, which shows I am not the only one who has identified this problem:

So lets get back to our list. Below I will go through each type of documentation and provide some information on it.

Type 1 – Step-by-step Walk-thrus – Also called Guides, How to’s, or Examples, Quick Start Guides


This type of documentation is nothing more than actions that the reader will take to accomplish something with your software. This documentation, when done right, could be followed by the most computer illiterate. If they read and follow each step, even if they have no idea what they are doing, they should succeed.

You may also want to read: Your project’s ‘Getting Started’ tutorial sucks – Why time to success matters


To provide the most common, most tested, most successful, and best overall example of how to accomplish some particular task from start to finish with your software.


Most commonly, trainees and new or evaluation users. However, anyone who wants to achieve the results the step-by-step guide leads to is included. This is most often, but is not limited to, users of your software. It includes deployment engineers, configuration specialists, support engineers, and demo or sales engineers.

Common Article Names

  • Quick Start Guide
  • Step-by-step Guide for setting up “Software X”
  • How to configure “Some Feature” of “Software X”

Common mistakes

There are many common mistakes

  • Not clearly defining the starting point of the walk-thru. Think of the starting point of a software that installs on Windows. What version of Windows, what other software must be installed, etc…
  • Defining the starting point clearly, but using a starting point most people don’t know how to get to. For example, you starting point should probably not say “have SQL Server installed and a database created with credentials” without providing steps.
  • Assuming the reader knows how to accomplish a task, so the documentation simply states to “do task x” instead of walking the reader through doing the task.
  • Skipping steps or forgetting steps.
  • The development department changes the steps just before release but the documentation is not updated to match.
  • Trying to simultaneously provide Product Feature Documentation in the middle of your steps. A link or note is acceptable for steps or settings that customers commonly customize.
  • Trying to provide comprehensive troubleshooting documentation after each step. It is great to have a link or a reference to troubleshooting documentation but it shouldn’t interfere with the walk-thru.
  • Only creating step-by-step guides for a couple common features of your software.
  • Failing to add documentation after use. For example, when a consultant, support engineer, or other employee struggles to set up a not-well-documented feature and once successful, they still don’t document it.

Type 2 – Product feature documentation


This type of documentation is a description of every feature and setting. What it is used for, when and why one would use the feature or setting.


This is for users who need to stray from the common walk-thrus and need to know what alternate and uncommon settings are used for so they can determine which they need in their particular environment.


Any customer/user who needs more than the most common features. Your own support representatives and architect or professional services teams. Consultants who recommend your product or are trusted to determine if your product meets a feature set for potential customers/users.

Common Article Names

  • The Software X Handbook
  • Software X: The Complete Reference
  • Understanding Feature Y of Software X

Common mistakes

  • Burying the features in other documentation, such as walk-thrus.
  • Not including at least a comment about when the feature would be used.
  • Not being aware of the features your customers/users are aware of and using. There are lots of “unintended features” and you should capture them in documentation.
  • Not letting customers contribute to this documentation in some way, even if it is just comments (this is the best way to solve the above issue, too).

Type 3 – Troubleshooting documentation


This documentation describes steps to diagnose problems. It includes information on logs files. It includes information on the behind the scenes business your software is doing, such as process/thread work, file or data interaction, etc…

If the users tries to do some task with your software and it fails, to them, a single task failed. However, to fix it, one might need to know that behind the scenes ten different processes occurred. It is important to be able to diagnose which background processes worked and pinpoint which one failed, so you don’t troubleshoot all ten background processes when only maybe the seventh is the problem.


To help customers/users get pasts unexpected issues and to help support engineers diagnose issues. These don’t have to always be public, but should be in the hands of your support engineers.


This is for support engineers more than customers, though the more experienced and “get your hands dirty” customers/users will use it. Engineers who do on site installation or on site configuration may need this information for when they run into bumps.

Common Article Names

  • Feature X: The complete troubleshoot guide
  • Troubleshooting Feature X

Common mistakes

  • Confusing “Problem, Cause, Resolution” documentation (also called Knowledge Base articles) with Troubleshooting documentation.
  • Not creating this documentation because you assume product feature documentation covers this. It doesn’t.
  • Providing this documentation but not providing complete troubleshooting steps for whatever reason. Especially if troubleshooting is done with 3rd party software and outside your own product it is assumed outside the scope when it is not. For example, a product that requires a DNS server, should provide steps to make sure that a DNS server is configured as the product expects. You may not have to write such documentation if the 3rd party vendor has some, but you should link to/reference it in your own documentation.
  • Writing documents that have lists of “fixes to try”. This documentation should almost never include “fixes”, but instead should diagnose the issue or pinpoint the problem so precisely that the fix becomes obvious whether the fix currently exists or not.

Type 4 – Knowledge-base (Problem, Cause, Resolution)


This documentation is most commonly the result of customer support tickets/cases. It lists a specific problem, a specific cause of the problem, and a single resolution to that problem. As mentioned early this is one of the more well-defined areas of documentation. Read more here about KCS or Knowledge Centered Support.


To make it so an issue only has to be troubleshot and fixed once. Once an issue is fixed, the Problem, Cause, Resolution can be documented and the fix can be applied without troubleshooting when the same Problem and Cause occurs.

To keep knowledge in-house. Tech Support is a high turnover position so keeping knowledge in-house is not always the easiest task.


Customers who experience a problem. Support engineers or other employees to whom the problem is reported.

Common Article Names

Frequently Asked Questions or FAQ.

Common Issues.

Common mistakes

  • Providing multiple Problems, Causes, or fixes in the same article.
  • Providing a problem and a list of fixes with no way to determine which fix is the correct fix.
  • Having an article that recommends a fix even when a customer is not really having that problem.
  • Failing to provide a good search for the knowledge base articles.

Type 5 – Code, API, or SDK Documentation


This documentation describes how others use your code or libraries to write add-ons, plugins, integration, or otherwise customize your application through code. Do not confuse this with Internal Development Documentation. This type is for external users or resellers or middle-ware companies.


This documentation helps others code with your code and libraries. Software that a customer/user takes the time and expense to modify to fit their environment becomes “sticky”, meaning the customer/user is likely to be loyal.


Systems Analyst / Developers / Integration Engineers / Middle-ware companies / Resellers. Customers who need to extend your product to meet a business need. Or in an open source environment, how others can use your code to extend their own project.

Common Article Names

  • Software X SDK Documentation
  • Class or Function Reference for Software X API

Common mistakes

  • Providing zero documentation on this
  • Providing incorrect documentation about a function
  • Updating code but not updating the documentation
  • Deprecating code but not informing the consumer
  • Not providing the first type of documentation: Samples, walk-thrus, etc…

Type 6 – Internal Development Documentation


This is used for internal developers continue future enhancements and otherwise maintain a piece of software.


To help developers work with a piece of code. To overcome turnover so new developers can pick up code another developer created. To provide architecture and design of each piece of code. To give UML (usually the classes and their methods),


Internal developers. Sometimes support.

Common Article Names

There are really no common names, but usually these types of documentation are internal only.

Common mistakes

  • Not writing such documentation at all.
  • Not documentation all parts of the code: Classes, Functions, design and architecture, supported features, etc…

Type 7 – Real life customer implementations


This is documentation about customers success stories. About how they implemented your software in their environment (which is usually as messed up as everyone else’s environments).


To demonstrate that the software can be successful and has proven itself in real life customer environments.


Other customers / System Analysts / Internal Employees in charge of future enhancements and road maps

Common Article Names

  • Product X Success Stores
  • How Company Y succeeded with Product X

Common mistakes

  • Not providing any customer success stories.
  • Providing success stories from unhappy customers who when contacted, speak poorly of your product

Type 8 – Marketing documentation


This is documentation that doesn’t really say much more than is needed to let a customer know about a software solution.


To acquire more customers. To help potential customers determine features sets quickly.


Systems Analysts / Consultants / Sales Engineers / Evaluation customers.

Common Article Names

  • Product X
  • The Product X Feature Set
  • What Product X can do for you business

Common mistakes

I don’t know a lot of the mistakes made in this documentation type, as my exposure to marketing is limited. I almost forgot this documentation type.

  • Too complex, including information or overly complex images or diagrams that are hard to understand


Hopefully after reading this article, you have a greater understanding of documentation.

Now that you know all the types of documentation, there are other problems to address. How to write the documentation. How to choose the priority for writing these types of documentation. How to balance the cost of documentation against the opportunity cost of not having documentation.

Some day, I will also have to write a post on how to deal with “versioning” documentation including updating documentation when Software versions change. I think there is a market for a piece of software that does nothing but track documentation. Hopefully it is well documented. 🙂

A WPF front-end for LDPing

I wrote a front-end to LDPing last week-end. You can check it out here:


So I was writing a WPF front-end for LDPing, which is a method of querying a LANDesk Agent for its computer name and Inventory Id. There is a button that you click to launch the ping and I couldn’t get the thing to enable…Anyway, I figured it out and posted the resolution here:

Refreshing a button enabled/disabled by RelayCommand.CanExecute()

So here is a screen shot of LDPing.

Your company needs a Chief Desktop Management Officer (CDMO)!

You have heard of a CEO, CFO, CIO, CTO, CFO, but you have never heard of a CDMO or Chief Desktop Management Officer. That is because most companies don’t have a CDMO and those that do have one, don’t really know that they have one.  I am here to tell you and your company why you need a CDMO. Your company is throwing money away by not having this C-Level position filled.

If you are a large corporation, then one expensive item you have more of than you have employees is computers. The cost of maintaining one or more computers per employee is enormous. Add to that the cost of maintaining smart phones and tablets that are exploding into the work place, and the task of managing it all seems overwhelming. There is so much to deal with.

Your company needs a Chief Desktop Management Officer (CDMO)!  There is great ROI in this position.

Note: For the rest of this article I am going to assume for all number values and costs and prices that you have a company with 5,000 computers.  However, your company may have more or less than that but the principles are still the same. If you have more computers, multiple my numbers. If you have fewer computers, divide the numbers. Also, just assume that anytime I say “desktop” that could include any computing device you want to manage, Desktop, Laptop, etc…

What is a CDMO?

A Chief Desktop Management Officer (CDMO) is a C-Level individual who is in charge of Desktop Management.

Why does Desktop Management need its own C-Level position?

Not all companies need a CDMO. Companies with 2,000 to 5,000 desktop should consider hiring a CDMO. Companies with more than 5,000 desktops despartely need this position.

Desktop Management is a huge and expensive task.  Any mistakes can easily become million dollar mistakes.  If you have 5,000 desktop and you are making a mistake of $20 per computer per year, then the mistake is costing you $100,000 per year.  Now, how many mistakes are you making? One, two, or ten.  Ten such mistakes per year will cost you $1,000,000.

That is why a C-Level position is needed if you have 5,000 desktops or more.

The overwhelming list of Desktop Management Costs

Lets take a moment and list all the overwhelming tasks that are part of Desktop Management and that you must get a handle one.

  1. Cost for the computer hardware
    1. Cost of initial purchase
    2. Warranty costs
    3. Cost of repairing or replacing or even handling returning of hardware under warrantee that fails
    4. Cost to refresh the computer hardware after 3 to 5 years
    5. Cost to clean computer hardware (if you don’t vacuum out the dust from inside a desktop you might be replacing them early due to over-heating)
    6. Cost of the power to run the computer
    7. Cost to increase air-conditioning as computers put out heat
    8. Cost for knowing what hardware you already have
      1. Cost to discover your current machines
      2. Cost to identify the current machines (discovery and identification are separate tasks)
  2. Cost for the Operating System (OS)
    1. Cost for the OS license
    2. Cost for a corporate image
      1. Cost for building and maintaining  one or more corporate images of the OS
      2. Cost to deploy the image or having the vendor ship the product with your image
      3. Cost to deploy the image whenever the OS gets “messed up” and a help desk technician determines the best fix is to re-image
      4. Cost for a server to hold the images
      5. Cost for using network bandwidth to transfer the OS image
      6. Cost for updating the image roughly every 6 to 18 months
      7. Cost to decommission and dispose retired hardware
    3. Cost for patching the OS
      1. Cost for tracking and being aware of all new patches
      2. Cost for testing all new patches
      3. Cost for deploying all new patches
      4. Cost for troubleshooting failed patches or patches that affect other software and cause support calls
      5. Cost for reporting to upper-management the security state of your systems
      6. Cost for storing the patches on a server
      7. Cost for using network bandwidth to transfer the patches
  3. Cost for software
    1. Cost for evaluating software applications (to determine which to buy)
    2. Cost for licensing the software
    3. Cost to track the licenses of the software
      1. Cost to keep the license key
      2. Cost to track which teams have which licenses
      3. Cost to be able to transfer licenses between teams
      4. Cost if of over-buying licenses (if you don’t properly track)
      5. Cost for using software without a license (oops…you were fined during an audit)
    4. Cost for installing/deploying the software
      1. Cost for preparing software to be deployed to a large amount of machines (which may include creating a new installer)
      2. Cost for using network bandwidth to transfer the software from server to desktop
      3. Cost for troubleshooting failed install/deployments
    5. Cost for troubleshooting software that just stops working
    6. Cost for upgrading the software when needed
    7. Cost for uninstalling the software when needed
    8. Cost for all the times a user calls support due to software needs
    9. Cost for the Server version of the software where applicable (Email, AV, or any software that has to connect to a server to run)
  4. Cost for managing drivers
    1. (See the Software cost above as all these apply to drivers)
    2. Cost of managing different drivers for different hardware (Unlike software that works on every computer regardless of the hardware model, each hardware model increases the driver maintenance costs)
  5. Cost for Antivirus (AV)
    1. (See the Software cost above as all these apply to AV)
    2. Cost for testing the latest virus definitions before deployment to prevent breaking other software
    3. Cost if you don’t test the latest virus definitions and there is a problem (such as support calls, lost work, etc..) if you don’t test and you do break other software
    4. Cost to keep every machine up-to-date
    5. Cost to report on which machines are running the Real Time AV scanner
    6. Cost to fix machines where the Real Time AV scanner is not running
  6. Cost for peripherals
    1. Printers, whether USB or Network (and there are a lot of Printer costs I am not going list)
    2. Mice, Keyboard, Monitors (dual monitors are often needed), Cables, Speakers, Head sets
    3. Custom peripherals (who knows what custom piece of hardware, especially a manufacturing company) has hooked to a PC
    4. Syncing phone and tablet data with the PC
    5. Cost to clean peripherals (yes, employees want to clean their keyboards and mice often)
    6. Cost of the power to run the peripherals
  7. Cost of backup software and data
    1. (See the Software cost above as all these apply to backup software)
    2. Cost for data loss due to hardware failure if you don’t back up
    3. Cost for multiple backup-servers
    4. Cost for extreme storage space (No, these are not included in the backup server costs)
    5. Cost to restore backed-up data after a data loss event (hardware failure or oops I deleted…)
  8. Cost for Security and Data Integrity
    1. Cost of constant Security evaluations
    2. Cost of data loss if you don’t have enough security (Oops…you were hacked)
    3. Cost of Security implementation
    4. Cost of enforcing security implementations
    5. Cost of encryption
      1. Cost of creating keys
      2. Cost of securing keys
    6. Cost of controlling access to data
  9. Cost of support
    1. Help Desk and support calls were mentioned already through out but just to reiterate them, we will mention them again
    2. Cost of increased support calls (and loss of work) for every time you make a mistake on any change mentioned in this list.
  10. Computer Policy and Rules
    1. Cost to design computer policies
    2. Cost to implement computer policies
    3. Cost to enforce computer policies

No, this list is not comprehensive…just what I could think of off the top of my head as I write this article.

Do these costs look overwhelming to you? You might be looking at this list and feeling overwhelmed. (Unless you are one of my fellow employees at LANDesk and then this list is just common everyday knowledge and you are probably recognizing anything that I might have left off the list.) But don’t be discouraged, you can save a lot of money by lowering these costs if you are willing to learn how.

Can your company handle all of this today?

Q: Can a CTO or CIO really have the responsibility for this along with else they are tasked with?
A: No. It is very difficult to succeed in this area without a focus on this area.

Q: Why can’t a CIO or CTO handle all this?
A: Because they have to handle the other parts of technology also have lists as big as the list above: Networking, Data Center, Software Development, Internet Presence, and more.  I am also a networking expert, so I could make a networking list for you, but for brevity’s sake, I will just tell you it is probably just as big.

Sure, this  position could report to the CTO or CIO, but make no  mistake, a CTO or CIO cannot be in charge of this on their own.

Are you failing at Desktop Management?

It is possible to get a handle on your desktop management and lower costs and save hundreds of thousands of dollars, even millions of dollars. But many companies fail at it.

In fact most companies are failing at it now!

Why do most companies fail at Desktop Management, even ones who have purchased Desktop Management software such as LDMS?

Reason #1 Because companies fail to invest

If your company hasn’t purchased Management Suite or a competitor, then you haven’t seen the importance in this investment yet.

If your company buys no desktop management software and hires no one to get a grip on their desktop management, you are still going to pay the costs I list above. They just won’t be obvious and they probably could get out of control. Your company may be completely unaware that they are spending more money because the expenses are distributed to the wrong “bottom lines”.  The cost of IT and help desk and loss of employee work all goes to a bottom line in some other category and nobody knows that they are spending millions more than they need to.

Lets say you have to hire four extra help desk guys at 75k after wages and benefits, which means you are spending an extra $300,000.  But then you have a big project, such as upgrading a piece of software to the latest  version and you have to pay everyone overtime and gets some temps.  The project costs you and extra $100,000.  This happens each quarter of the year.  So at the end of the year $700,000 have been spent on desktop management but none of the costs were attributed to Desktop Management. Wow, right there your costs, if you had bought a good desktop management tool and used it well, would probably be closer to $300,000 or $350,00, a savings of %50.  And not even all the possible ROI potential of desktop management software was put to use.

Reason #2 – Companies fail to follow through their investment.

If your company has purchased desktop management software, such as Management Suite, they then fail to follow through. And follow-through is important.

Lets just say for ease of math that you have purchased a Desktop Management solution and it is going to cost you $50 per node. (Costs vary based on the desktop management software and the features you buy, so don’t think this is a quote.)  That means you are going to invest $50 per pc, times 5,000 PCs . That is a $250,000 up front investment.  That seems like a lot, right? Believe me, it is more than worth it. You can save that much money on one feature alone.

So a company sets up one feature. For example, some customers who use LANDesk get it installed, and deploy an agent to all the machines.  They set up remote control and get their help desk to use remote control. Suddenly the help desk team is 1) Solving issues faster, 2) eliminating the need to get physically on the machine (which could sometimes mean travel or sending the machine to them). Maybe they eliminate three heads from help desk as save 75K per employee.  So they have already recouped $225,000 of their investment.  Any other use of LANDesk and they will break even and really start to get ROI. This usually happens, there is a big software distribution roll-out that they use their new desktop management software for and everyone cheers at how successful it was and reports are provided to show the ROI and their new desktop management software has now paid for itself.

However, LANDesk is installed and Remote Control is working. Their big project is over. So naturally you look for the next big ROI, right?  This might seem like the obviously next step but this is where companies go wrong.

The company puts the IT employees on other projects. Their shiny new desktop management software is shelved. No one is around to prevent this. (Obviously because they don’t have  CDMO, which is why I am telling you that companies need this new C-Level employee. ) So they have barely have touched the surface of their software and stop. This is the same problem that any company faces, regardless of the desktop management tool they choose.

Now they have really expensive remote control tool that they wish they could utilize more if they one had time to do so. They don’t understand that their desktop management software can do so much more.  It can save them more money. It can also save them more time!

Reason #3 – Tunnel Vision

The company really has tunnel vision and only sees the ROI of desktop management in one area. (See my list above, to remember that there are many areas.) This tunnel vision company finally buys desktop management software and gets it rolled-out. Unfortunately they run into an environmental problem preventing them from getting ROI on the one cost of desktop management they wanted to get ROI from.

So they stop the project.  Yes, you heard me right. They just spent $250,000 dollars and they just kill the project. Some try to get money back, some don’t.  Those that do end up back in Reason #1. Those that don’t sometimes end up in Reason #2 but are worse off because they never even obtained their initial ROI.

They don’t realize that they could get enough ROI to pay for the desktop management software and sometimes a lot more.

Reason #4 – Lack of training

Ok, so this is just a repeat of reason 1, but I put it anyway.

So your company just purchases a $250,000 desktop management tool.  Two weeks of training is included in the cost, but not the flights or hotel and the nearest training requires both expenses.  So your company decides not invest the $3,000 on airfare and hotel for it to train the IT guy assigned to use it. Instead, they decide to just hand this IT guy the software and say go.

One year later he has spent his entire years learning to just get the software rolled-out and has maybe got one other project done. He is completely unaware that a dozen projects and hundreds of small tasks that are still being done manually could be made easier or automated with their desktop management tool.

Reason $5 – The Desktop Management guy left

So you have purchased desktop management software. You have had great success initially, but then all of a sudden the guy over this desktop management project gets a new job.  So you promote some new guy in IT, but you don’t train him. Oops, you are now right back to Reason #4 – Lack of training.

How can your company get a handle on Desktop Management?

The steps are three-fold:

  1. Hire a Chief Desktop Management Operator
  2. Purchase the best desktop management tool available
  3. Make sure that you have expert desktop management engineers to use it

Hire a Chief Desktop Management Operator

Yes, this is a C-Level employee so you are looking at a salary in excess of $100k plus benefits. But once you have so many desktops, the position pays for itself over and over.

You need a Chief Desktop Management Officer (CDMO) to make sure that your are constantly vigilant at lowering the costs of desktop management. The CDMO will manage the costs of desktop management in ways a company doesn’t even know are possible. The CDMO should appropriately work with the CFO and CIO/CTO to carve out the correct budget and to get the money showing in the correct “bottom line.” This individual should make sure that the CIO/CTO doesn’t run away with the IT department’s time and budget and spend it all on networking, data center, and web presence, but neglect finding the ways to save money by hedging up the desktop management costs.

Hiring a CDMO is the firs step because if you hire a CDMO, then the CDMO is going to drive the other steps. Your company is probably going to succeed in getting a handle on the desktop management costs by this one simple act.  However, the CDMO must follow-through on the next steps, so I am still going to explain them.

Purchase the best Desktop Management tool available

Well used desktop management software can pay for itself multiple times over.

Yes, I believe LANDesk Management Suite (LDMS) is the best desktop management software available, but I am not writing this post to sell you LANDesk (but I won’t complain if that is a side benefit). LANDesk has competitors and if your company has a bake-off and determines that a competitor is better and cheaper, you will go with them. But that still is only one of the three steps.

Make sure that you have experts using the desktop management product

You need the right people! A tool doesn’t use itself! (Well, LDMS with a well configured Process Manager implementation can almost use itself, but you get what I mean.)

You need well-trained engineers under the CDMO and in your IT department. You need engineers who can be effective and follow through on tasks needed to lower costs.

If you don’t have them, you need to either hire them, or you need to train your people on desktop management. To be successful you must do one or the other.  Sure a company might get lucky and have a gung-ho employee that trains his or her self, but do you want to base your success on luck? No, you need to either hire the talent or you need to train the talent. And once you have the talent, you need to keep it.

Hiring the talent

There are a lot of individuals like me who have the skills to fill any roll from CDMO to any position in IT.  Most of the ones I know are working for LANDesk or are working for LANDesk customers.  They are rare, and like all rare items, they are not cheap, yet their job performance will sparkle like diamonds.

I have heard of one large company that is taking this route and hiring some one amazing. To some extent that rumor inspired this post, except I have started this post three times so maybe they only inspired me to finish it.  I know the person well and he is a CDMO and an amazing desktop management engineer all rolled into one. I heard a rumor that they are paying him a good salary, as I mentioned above, well in excess of 100k.  This company is going to succeed because they are making the right investment. They probably don’t realize they are hiring a CDMO.  The think they are just getting a LANDesk Administrator.  You and I know better.

Training the talent

Many of your current engineers are more than capable of become talented desktop management engineers.  That means training both on the desktop management tool you choose, as well as training them on general principles of desktop management.  Do not hesitate to spend money on training. I have seen millions of dollars flushed down the toilet by companies who fail to train their engineers fully.

I read a quote on a LANDesk competitors site that said their software requires no additional lengthy training. I had to laugh, because desktop management requires training no matter what tool you use.  Desktop management training does not end with the tool and so few IT guys really understand all the technology around desktop management so training on these concepts is also necessary.  One prime example of this is Operating System imaging. None of the tools build an image for you.  Sure, they all let you deploy the image…but did you make your image correctly? Some one better know the answer because none of the desktop management tools are going to answer this question for you.

Keep your talent

Turnover for a desktop management engineer can be extremely costly.  More costly than you think.  Don’t let it happen.

I can’t tell you how many times I have spoken with a LANDesk engineer and asked them how things are going at company X and they respond by saying, “Actually I work for Company Y now.”  Sometimes I would get to speak to the new guy for Company X too, and they rarely have any idea what they are getting themselves into. They are usually calling in to accomplish the most trivial task in LANDesk because and usually start out by saying, “I have no idea what I am doing, I was just handed LANDesk when the previous guy left.”

Do you really want your $250,000 desktop management tool in the hands of some one who “has no idea what they are doing?”

If you are training quality desktop management engineers, do you really want them to take all that training and use it to help some other company succeed, leaving you to start all over again. You are closer to failure when you let this happen, so don’t let it happen.

Give your desktop management engineers raises that prevent them from leaving.  These guys are key in saving you hundreds of thousands a year by hedging desktop management costs.  If you loose your employee because someone offered them 6k more a year, you are making a big mistake.


A Chief Desktop Management Officer (CDMO) is new position that your company needs to drive the costs of desktop management down and to have the power to make sure it happens.

Desktop management software is a must but it is only as good as those trained to use it.

Desktop management engineers, often called LANDesk Administrators which is not quite accurate, are valuable employees and must be trained and retained.  Turn-over is costly.

With the onset of mobile devices, the cost of managing the computers could triple.  A user could potentially have a desktop or laptop (and some have more than one of these already), a tablet, and a smart phone, (which are now as powerful as desktops) and all three of the are going to be in your environment, and who is going to drive costs down instead of up?  Your new CDMO, that is who!

So now that you know what your company needs, go and do it.

Article: Why Is My Amazing, Ground-Breaking Microsoft Kinect Collecting Dust?

I recently bought an X-Box and let’s be honest. It isn’t getting used. Yes I noticed dust on it over the weekend.

That is why this article caught my eye today:
Why Is My Amazing, Ground-Breaking Microsoft Kinect Collecting Dust?

The main reason my XBox is collecting dust is, besides the fact that I haven’t bought my wife Dance, Dance Revolution, is because there isn’t a game that is enticing me to play it when I get home from work.

I want to play something like Metroid, and jump around and shoot friekazoid alien creatures. I don’t care if I have to combine some type of controller or gun-like device with the Kinect.  Or I want to play Madden 2011 and just run over the computer team for 300 yards or bomb passes all games 7 touchdowns.

I just want to have fun and really, the Kinect just isn’t providing me the fun.

Reading about Apache Axis2 Web Services

I have recently started reading an e-book from PACKT Publishing.

With the internet and internet-based offering being renamed to “The Cloud” which is just a fancy buzz word marketing came up with that they don’t even themselves know what it means, understanding web services, which is mostly what “The Cloud” will be based on is going to be key in a developer’s job security.

Being able to provide a cloud offering without licensing costs because you are using free software such as Apache, is nice too.

Which brings me back to this book on Apache Axis2 Web Services.

I’ll let you know if it is well worth the read.

Getting Java to work in Firefox 3.6 in FreeBSD or PC-BSD 8.2

Firefox 3.6 no longer works with the Java versions in PBIs. Instead the OpenJDK6 must be installed. However, as of writing this document there is not a PBI for OpenJDK6, so we must install it from the ports jail.

  1. Install ports on your system as follows: How to install ports on FreeBSD?
  2. Open the command prompt.
  3. su to root.
    $ su
  4. As root, get the latest ports.# portsnap fetch extract
  5. Install openjdk6.Note: There is an openjdk7 but it didn’t appear to have a web option yet, so hold off until it has one, use openjdk6.
    cd /usr/ports/java/openjdk6
    make WITH_WEB=yes BATCH=yes install
  6. Run this link command to link the library for the java plugin to your plugins directory.
    #ln -s /usr/local/openjdk6/jre/lib/ ~/.mozilla/plugins/

Testing the Java plugin

You may want to verify that java is working in your Firefox install. You want to know two things:

  1. Is the plugin detected by Firefox?
  2. Does a java application work?
      1. Open Firefox. If Firefox is open already, close it, and re-open it.
      2. In the URL enter: about:pluginsYou should now see the IcedTea-Web Plugin (using IcedTea-Web 1.0.1).
      3. In Firefox, go to the following URL: 
    1. Here are steps to make those two verifications. 

      Note; This is pretty much exactly like the handbook states.

Opening konsole and a Ports Jail konsole can be confusing on PC-BSD

If I open Ports Jail, then a regular konsole, the regular konsole gets the Ports Jail icon.  I can’t really tell the konsole sessions apart.

The same things happens if I do it the other way around.  If I open a regular konsole, then Ports Jail, the Ports Jail gets the konsole icon. Again, I can’t really tell the konsole sessions apart.

This causes me some confusion.  Which konsole am I running?  I have to take a moment to verify or close them both.

Solution: Opening the Ports Jail with a different konsole profile

One solution is to have the Ports Jail konsole session use its own konsole profile that uses a custom konsole profile.

Here is how I configured that:

  1. I created a LavenderOnBlack color scheme, which is a copy of the GreenOnBlack with Lavender instead of Green. Normally I use the GreenOnBlack color scheme.~/kde4/share/apps/konsole/LavenderOnBlack.colorscheme
  2. Next I created a copy of the shell.profile named PortsJail.profile.

    [Cursor Options]
    RemoteTabTitleFormat=%h : %u
    [Terminal Features]
  3. I then edited the Ports Jail shortcut on the desktop to pass it the approprate TerminalOptions to use the PortsJail.profile. Here is the one line I changed.
    TerminalOptions=--profile /usr/home/jared/.kde4/share/apps/konsole/PortsJail.profile

Now whenever I open the ports Jail, I can easily tell it is the Ports Jail and not the regular konsole because it is using a LavenderOnBlack profile.

Remakes of King’s Quest I, King’s Quest II, and King’s Quest III

My favorite childhood computer games were the King’s Quest games. I recently became aware that a company called Anonymous Game Developers Interactive has started remaking these games.

I’m downloading them now.

I hope they are awesome!

TortoiseSVN Addin for Visual Studio – Disappointing

I wanted TortoiseSVN for Visual Studio 2010, so I searched and I was so excited to find one here:

I wanted this to work so bad, but it didn’t.  It doesn’t support Visual Studio 2010.

There is a bug you can vote for here:

However, I checked an there hasn’t been an update to this project in in almost a year.

I sent an email to the person who did all the commits and asked if the project was dead.  If he doesn’t respond, I have to assume the answer is yes.

Russian Government going Open Source…and the future

Well, I have seen governments claim they are going to open source before, but not from Russia, and not with such a realistic plan to migrate over a few years.

Here is a link to the article via Google translate:

Putin ordered the transfer of power on Linux

The now

Business drives software development.  Open Source communities help, but even today much of the ongoing development for Linux is driven by businesses such as Red Hat and Novell and others.  If you think your Linux code is being written by unpaid developers in their spare time, you are somewhat correct but only partially.  Most changes are made by developers who are paid.

While communities are nice, they can’t match the hours or output of experienced developers working forty to sixty hours a week.

Looking Ahead…the Apps…and C# (Mono)

The more open source is used in business, the more development power it will have.  But it is not the open source Operatings Systems that prevent people from moving to Linux or BSD.  Ubuntu, SUSE, Fedora, CentOS, PC-BSD, and numerous others are all very usable desktops that are user friendly.  It is the software that runs on them that everyone is waiting for.

The market is already there to make millions extra if you application runs cross platform, one Windows, MAC, Linux, and BSD.

But most the applications written for Windows, the business desktop of today, are using .NET Framework. So naturally those companies are going to want to make their code cross platform.  And they are going to find it is easier than they thought to move their applications between platforms using C#.  I have recently decided that C# is the future of applications on all platforms.

Some MAC and Linux users don’t like Microsoft and will fight off the idea of a Microsoft provided development platform such as C# (Mono) on their systems.  But when a corporation decides that you must run software X, and software X requires .NET, and you have to either give up your MAC or Linux box for a Windows box, or use C# (Mono), then users will come around.

If you are a company writing software for Windows only today and using C#, you need to take a look at Mono. Even if the return on investment of developing a C# (Mono) based version of your product is a slight loss to break even, it is an investment in the future.  Once written, maintenance costs will be less than the original development costs and that slight loss to break even margin will turn to a small profit.  And with the experience, you next app will migrate to C# (Mono) that much easier and soon, all you apps will run anywhere that C# (Mono) can run.

This is going to take off in a way Java hasn’t because developers for windows prefer and will continue to prefer .NET over Java.  And when it comes to business apps, Java just isn’t the language of choice.  Business applications are written in C#.