Thursday, August 9, 2007

Strategy in a SOA World – Three Strategic Principles

So your company has a niche product. You specialize in one aspect of a larger system. Your competitors are virtually sitting right there next you in the same system. But they have their niche and you have yours. You and your competitor are placed into a large Service-Oriented Architecture and both of your services provide utility to the end-user through your modular and accessible interfaces. To gain a competitive advantage, companies must follow three strategic principals: Do what is best for the entire system, Focus on the end-user, and Offer help to your competitors.

1. Do what is best for the entire system. Think of the system as your business ecosystem. To completely understand this analogy of a business ecosystem read The Keystone Advantage: What the New Dynamics of Business Ecosystems Mean for Strategy, Innovation, and Sustainability (Harvard Business School Press, 2004). Your competitors are in many ways your allies. Their niche adds value to the whole system just as yours does. Together your system competes against other systems and solutions. Before acting on any strategic moves, make sure the move is in best interest for your entire ecosystem.

2. Focus on the end-user. Make sure you are focused on the needs of the end-user. Your service may not interact directly with the end-user or it might be a very small piece of the system, but that does not mean you do not need to focus on the larger direct needs of the final customer. The more you are focused on the needs of the end-user, the better you will be at adding features to your services that end up being used by the customer. Many companies focus on extending their niche in any way possible. New features add to the utility of your component but if the end-user of the system has no need for those features your efforts have been wasted. You only can gain share of the system if the system’s end-user needs your added features.

3. Offer help to your competitors. Your competitors in the system are looking to add features to their own services. Position your services to add value to their future efforts. If your competitors can add value to their product they will utilize it. If utilizing a feature of your product is accessible (it is a SOA, so it should be) and it is cost effective, it will be very tempting for them to utilize your new feature. If your offer is tasty enough they will go for it. As long as you are able to constantly add value for their use, they will use your service over attempting to create that service themselves. At this point, your competitors are now more dependent on your services. At the same time you are expanding your share of the system.

SOAs are great for end-users because of their ability to trade in and out loosely coupled components. If your components are required by the end-user and/or required by competitors’ products, which are then required by the end-user, your components will have a strong foothold in the system. The stronger your foothold, the stronger your position will be among the players in the ecosystem. This long-term strategy will add market share and expand your competitive advantage.

Monday, August 6, 2007

Testing Early and Often Can be a Wasted Effort

We have all heard the saying, "test early, test often" but in many software development efforts this can be a very costly mistake. It is imperative for software project managers to understand the full added cost each type of testing will have on the final delivery date. In many cases, it is the timing of when to write these tests that matter the most.

There are three levels of testing, unit testing, integration testing, and system testing. Integration testing and system testing are not as flexible, so I will not discuss these two efforts in this post. Unit testing does have some flexibility.

Unit testing is a required means to assure that the smallest possible elements have been tested. Unit testing is a required process in testing a system, no question. But the timing of these tests and the level of detailed required need to be considered. Writing highly detailed unit tests early in a project adds cost to the current development phase but, more importantly, adds cost to future phases as well. Maintaining these tests can be extremely time-consuming. In iterative process models, units are rewritten and redesigned over and over again. Each change to unit requires changes to the corresponding unit test. The more detailed the unit test the more time and effort required to maintain and update.

Project management needs to be aware of the added costs and implications to the project’s schedule. The nature of the project, the type of development process, and the size of the system being developed all need to be considered in deciding the unit testing level of detail and what phase or iteration these levels should be enforced.

Unit Testing Levels of Detail
First let’s clearly define each levels of testing. They are numbered and described below from the least complex level to the most complex.

1. Algorithm Accuracy testing
- Testing the accuracy of an algorithm. In object oriented languages, this is
testing the return of a method based on a few basic inputs.

2. Full statement testing
- Making sure the unit tests execute every line of code

3. Full branch testing
- All decision points (i.e. if statements) are executed for all outcomes

4. Every loop tested at 0,1 and many
- Testing each loop (i.e while and for loops) when the loop is executed more
than once at a time (many), only once (1), and when the condition of the loop
keeps the loop from executing its block of code at all (0)

5. Boundary value tests
- Testing boundary values for boundary condition statements (i.e. if(size > 0
&& size <= 10) Boundary value tests would test this statement when size equals -1, 0, 10, and 11 )

6. Full predicate testing
- Similar to level 2, Full branch testing, adding the requirement for each
condition for each predicate must be tested. (i.e if(boolOne == 1 &&
boolTwo == 2) Full predicate testing would tests all combinations when boolOne
equals 1 and does not equal 1 and boolTwo equals 2 and does not equal 2)

7. Path testing
- This level of testing implies all the previous levels but each branch, loop,
boundary, and predicate test must be done independently of the others.


Each level of detail adds more benefit to the reliability, accuracy, and even the complexity of the system. There is no question about this. Determining what level of detail is required by the stakeholders needs to be done regardless of the development process chosen, but understanding the cost of each level is important in estimating cost and schedule.

Software Development Processes
We’ll now describe the basic types of development processes. Depending on the project’s process, the costs of testing differ greatly.

Waterfall process – a sequential effort of phases (requirements analysis, design, implementation, testing (validation), integration, and maintenance). Each phase occurs only once. Traditionally, testing occurs once the implementation phase finishes but many times unit testing occurs during implementation. Either way, these efforts only occur once.

Iterative process – a non-sequential effort where phases can be revisited after there initial completion. A common iterative process, Agile process, comprises of short iterations. Each iteration visits or revisits each software phase. Think of an iteration as a small waterfall. Iterative processes reduce the level of risk to a project by giving the stakeholders of the project small releases of the product at the end of each iteration. The stakeholders are able to evaluate these releases and add feedback, suggest changes, and foster new ideas for the product. Stakeholders can better evaluate whether to continue on with the project or not. If continued, the project can redesign, and recode the product using the stakeholders’ feedback. This method ensures that the project and the stakeholders are communicating towards build a better product throughout the effort. This is contrary to the waterfall processes that only allow stakeholders to evaluate working examples of the final product at the very end of the effort.

If you are using the waterfall development process, once the implementation phase is done, you will not revisit this phase. Therefore, determining the cost attributed to each level of detail is simple. If an iterative process in being used, each level of detail will increase by a multiple of the iterations in the process. In many iterative development efforts, the code written in the first and even the second iterations will greatly change once the stakeholders give new feedback and make new requests. Writing highly detailed unit tests for these iterations will most likely be a wasted effort. Proceeding iterations will also have the added burden of editing and changing these tests.

Making sure these tests are written efficiently can cut down on the complexity and the level of effort needed to maintain these tests. Tools such as the Spring Framework can help to cut down drastically on the complexity of the setup code needed for each unit test and should always be used on medium and large efforts.

Levels of details such as levels 4, 5 and 6 should be post postponed until the system and software requirements have been mainly worked out. These levels add a large amount of extra code to the test suite. Not until the stakeholders seem to settle on the majority of requirements and details of the system should these levels of detail be added to the test suite. Although these tests greatly increase the quality of the software, their cost to write and maintain surpass their benefits to the early iterations.

Level 7, path testing, is a level of detail that adds great quality to a system, but it is extremely expensive. A testable section of code’s complexity can great affect the cost to create and maintain tests at this level. Some argue that requiring engineers to write full path tests influence engineers to keep the complexity at a minimum. I agree with this point, but in the early iterations of a development effort code complexity is irrelevant. These iterations are done to prove a concept to the stakeholders and to iron out the integration effort problems and system level issues. The last iterations before a system is released should be saved for this level of detail. The added costs in adding these tests to the system will be outweighed by the time and effort required to maintain these tests.

Conclusion
Every software project is unique and it is up to the management to understand the costs involved in each decision they make. Test adds quality but also adds cost. Test wisely adds quality but can reduce cost. As a project manager, make sure you understand the complexity your decisions add to future phases and iterations of the project. More detailed testing can be postponed until later interactions where there is less future maintenance needed to update the tests.

Wednesday, August 1, 2007

Trends in Venture Capital Funding in the 1990s

Growing companies need to know the trends in the venture capital market to help them understand the conditions that lead to better chances of receiving financial capital. It is imperative for a business that is seeking venture capital funding to understanding where the venture capital market is heading in order to best position the business to receive funds. To do this, it is important to understand the historical trends in the market and to understand the current position of the market in order to know where the market might be heading.

As an entrepreneur, the report issued by the United States Small Business Administration Office of Advocacy in August of 1997 titled, “Trends in Venture Capital Funding in the 1990s” by Nicole Onorato, is of great interest. The data and the conclusions about the venture capital market in the 1990s will help to identify current and future trends of this market.

When first reading this report, it seems that in the early 1990’s the amount of venture capital money was increasing as the market matured and the number of VC firms decreased. A quote from the report states, “While the capital under management has increased, the number of firms managing it has decreased.” This statement infers that there is a negative correlation between the number of firms and the amount of money under venture capital management. Thus, as a potential seeker of venture capital, a market with less venture capital firms means there is a higher probability that there is more money under venture capital management, and therefore, a greater chance to gain funding.

Also stated in the report, “The fastest growing funding source in the 1990s has been corporations, which contributed 19 percent of funds in 1996 — a $920 million increase from 1990, when they contributed just 7 percent.” This statement could be a very powerful to and business leader looking for funding. As a seeker of funding, this could mean that corporations may be the cause for the increase in VC funding during the first half of the 1990s. It also can be inferred from this statement that corporations are contributing more and more to the birth of small businesses in the United States. What is economically good for corporations must be good for small businesses. A politician, who understands the need of an economy to create small innovative businesses, might think that corporations are increasingly contributing to venture capital funds. A politician may pass more legislation that favors large corporations in order to increase venture capital funding.

When first reading this report, these conclusions are agreeable. As we investigate further, using better sampling and statistical techniques than the author uses, these conclusions may not be so clear. In fact in one case, we will show that they are just plan wrong.




Questioning of the Sampling Techniques Used
Looking closer to the sampling techniques used in the section titled, “Trends In Venture Capital Funds”, one should begin to question Nicole Onorato’s conclusions.

First, Onorato uses two conflicting sources of data for her first point in this section. “In 1985, the professional venture capital community had $19.6 billion under management.
By 1995, the total had grown to $43.5 billion, a 122 percent increase.” The source of this data is from Coopers and Lybrand[1]. In the same paragraph, she states that the amount in 1995 was $37.15 Billion. This amount is from a different source, Horsley[2]. Did Onorato choose Coopers and Lybrand to inflate her point that the venture capital community had a significant increase in capital?

With the title of the report being, “Trends in Venture Capital Funding in the 1990s” it is also interesting that the author includes the 1980’s in her initial calculations. It would be helpful if Onorato gave a reason for why she went back to 1985 to demonstrate a trend in the 1990s.

“The fastest growing funding source in the 1990s has been corporations, which contributed 19 percent of funds in 1996 — a $920 million increase from 1990, when they contributed just 7 percent.” This is another conclusion that Onorato makes in this section. Why was 1996 now added to the date range? Before, in the same section, 1995 was the last date in the range. If the report’s purpose is to report the trends of the venture capital market then the sampling methods used should be explained and kept consistent for all samples.



Questioning of the Statistical Techniques Used
The report only uses percents of samples taken from each year to show the trends in the venture capital market. Additional information that would be useful to a consumer reading this report would be the presentation of charts and the use of other statistical tools aside from the percent increase between two arbitrarily chosen years.

For instance, a chart showing the money in venture capital management for the years between 1990 and 1995 could give the reader a visual understanding of the data given. Figure A (page 7) of this report is the chart that should have been given. There will be a further analysis of this chart.

Another chart that would be useful is a scatter plot between the number of firms and the amount of capital under venture capital management. Onorato infers a negative correlation between the number of firms and the amount of capital. A scatter plot would help make her point. The scatter plot that should have been given is in Figure B (page 8). There will be a further analysis of this chart as well.

A report discussing trends should include charts with trend lines. Instead of leaving it up to the reader to spot the trends that are concluded in this report, a trend line would be useful. A coefficient of correlation between the number of firms and the amount of capital under venture capital management would also help in justifying Onorato findings. As we analyze the data that should have been provided, Onorato’s finding should become clearer and justified, or will it?


Changes in Thinking
Newly constructed statistics based on the same data given in the report present a different set of conclusions than that given in the report. Figure A, Figure B, and the coefficient of correlation between the number of firms and the amount of capital under venture capital management have been calculated and presented. There is also a closer examination of the data presented in the chart from the report given in Figure C.

Figure A gives a graphical representation of the amount of capital in venture capital management. The chart also shows a trend line to help give a better description of the trend. Looking at Figure A, is this a significant increase in funding in the early 1990s? The trend line has a slope of 0.65. That’s only a 9.7% increase from 1990 to 1995. Given that inflation from 1990 to 1995 increased 18.6 percent[3], the amount of money in the 1990s at the time of the report has actually decreased. There is a strong difference in the 122 percent increase stated in the first sentence of the, “Trends In Venture Capital Funds” section of the report and the findings given in Figure A.

Figure A.

Figure B shows an even more drastic change in conclusions given in the report. As Figure B shows, the trend line of the number of firms and the amount of money under venture capital management is a positive slope. This shows a slight positive relationship between the two. Also, when the coefficient of correlation is calculated, the result is 0.226. This contradicts the author’s implication that the number of firms in the US are decreasing while the amount of capital is increasing. Our calculations show that there is a positive correlation between the number of firms and the amount of capital available for businesses needing funding. Thus, there is a greater probability that there will be a greater amount of capital under venture capital management when there are more venture capital firms.

Figure B

An analysis of Figure C shows even more inconsistencies in Onorato’s interpretations of the data. “The fastest growing funding source in the 1990s has been corporations, which contributed 19 percent of funds in 1996 — a $920 million increase from 1990, when they contributed just 7 percent.” But a look at the chart, in Figure C, shows an interesting bit of information.

Figure C

First, it should be noted that that the actual values of this crowded chart are not given and that the yellow bars displaying the amount each year that corporations commit to venture capital seem to blend into the background of this chart. A closer look at these bars actually shows that between 1990 and 1995 there is not a large growth trend in corporate contributions at all. In fact, 1990, 1991, and 1992 shows a decline in the amount committed by corporations. There is an increase in 1993 and 1994 but then in 1995 there is a sharp decline again. The actual trend line of this chart cannot even be calculated because the values for each bar are not given and the increments on the Y axis are by the $500 millions even though most of the bars do not even reach $500 million.

Onorato mentions an increase in the amount corporations were contributing. To make this point Onorato, for unknown reasons, added 1996 to the range of data. In 1996, corporations’ contributions increased to over one billion dollars. But this doesn’t show a trend. The year 1996 is an outlier, an unusual year. Adding this year to the chart gives a false impression to the data. Maybe this is why Onorato added 1996 to her calculations. Then, to conclude that corporations are the “fastest growing” based on a one year spurt is a great misunderstanding of the data.


Conclusion
After further analysis of the data presented in the report, conclusions from the report need to be reexamined. Consistent samples of the data, graphical charts, trend lines, and calculated coefficient of correlation should have been given in the initial report. When looking for trends in data as complex as the trends in financial markets, such as the venture capital market, detailed statistics should be used. Other useful calculations such as the variance in these trends, and the probability of events in the future, would have also been useful in a report such as this. With a report issued by the United States Small Business Administration Office of Advocacy, one would expect there would be more scrutiny in the numbers and conclusions issued to the public.

[1] Coopers and Lybrand, Seventh Annual Economic Impact of Venture Capital Study.
[2] Horsley, Trends in Private Equity; National Venture Capital Association, annual reports, 1992–1995.
[3]U.S Department of Labor Bureau of Labor Statistics http://www.bls.gov/cpi/