...by Daniel Szego
"On a long enough timeline we will all become Satoshi Nakamoto.."
Daniel Szego

Sunday, April 19, 2015

Notes on software market efficiency

Well I am sure that there is a lot of articles about general market efficiency theory analyzing in details offer and demand. However I would like to summarize some thoughts in a little more practical way focusing on the specialties of the software development market. 

Let we assume that we have a company that want to buy a certain software solution. The required software solution probably has got a some requirements or specification, so let we assume that software solution must have the following requirements : R1, R2, ... RN. We can furthermore assume that there is are certain solutions that covers all of the requirements. It sounds probably a strange assumption however in the software industry there are a lot of more or less general application development framework and even if they are not enough you can make a custom development from scratch. So, even if it sounds surprising we can say that in the software industry for all requirements there is a software solution. It is certainly a question how much a solution cost and if the cost is acceptable for the company. Let we assume however that price is good enough, probably not the cheapest but among the solutions that are cheap enough. 
This ideal combination is demonstrated by the following picture :

Figure 1. Ideal Software solution

So let we assume that such good enough solution has a price and a time in which it can be set up.
- Prise(Solution [R1, R2, ... RN]) : price of a good enough solution that covers requirements R1... RN
- SetupTime(Solution [R1, R2, ... RN]) : setup time of a good enough solution that covers the requirements R1... RN.

These are certainly ideal values, in certain projects both the setup time and the solution cost are heavily increased due to the following facts:
- Collection internal requirements in a company usually takes time and money. 
- Evaluation different solutions of different providers is not always straightforward. 
- Setting up and rolling out a solution usually requires internal organisations resources.

As a conclusion the real cost and setup time of a software solution might be significantly higher:
- TotalCost(Solution [R1, R2, ... RN]) - the total cost starting from the requirement analysis until the software is really used from end users in the company.
- RolloutTime(Solution [R1, R2, ... RN]) - the total time starting from the requirement analysis until the software is really used from end users in the company.

From the definitions above we can define two efficiency measures :   
- CostIncrease[R1, R2, .. RN] = TotalCost(Solution [R1, R2, ... RN]) / Prise(Solution [R1, R2, ... RN])
- TimeIncrease[R1, R2, .. RN] = RolloutTime(Solution [R1, R2, ... RN]) / SetupTime(Solution [R1, R2, ... RN])

The ideal case CostInrease and TimeIncrease around 1 means that the software solution is almost buoght as ready product from the catalog. The requirements are well known, the product is well known as well; setting up is practically increased by the delivery time. The opposite case if CostIncrease and TimeIncrease are bigger then 10. In this situation probably the requirement analysis itslef is a difficult tasks, rolling out the solution in the company is probably more difficult.    

In this sense efficiency of a specific M software market can be characterized by the following two measures:
- ACM = Average (CostIncrease)  
- ATM = Average (TimeIncrease)  

As exactly calculating these values on a certain market would require a significant amount of research time, despite they can be used intuitively making predictions on different situations:
- If the market is well informed then ACM and ATM should be tendentiel smaller as opposed to a market where the information is difficult to find. 
- On a well-known software market like word-processing softwares, ACM and ATM should be smaller as on a relative new and voluntile market as big data.
- Cloud market should have smaller ACM and ATM as on-premisse softwares.