Columns

Challenges to Component Technology Success

In my last two columns, I described the issues surrounding the business case for components. I talked about the importance of understanding business goals and the component life cycle. I also discussed the roles of organizational readiness, infrastructure support and reuse as key success factors. While all of these things are important, I cannot neglect to mention the risks and challenges users face when trying to use component technology successfully.

While you can develop a business case for components, it is another matter to actually obtain the value you want to achieve. There are many reasons the expected value may not be achieved: poor planning, shifting business conditions or a change in the basis used for your assumptions. The chance of any of these happening is the risk users take when moving forward with any technology. Most business cases require users to identify areas of risk and to define ways to mitigate such risk. Accordingly, it is worth taking the time to look at these areas of component technology.

Understanding the risks you face not only helps you to develop a good business case, it lets you understand which battles you need to fight. Identifying risk in your organization depends on the answer to one important question: "What will keep us from obtaining the value we desire when using components?" Evidence suggests there are three areas that can cause significant problems: wrong culture, wrong goals and wrong purpose.

Wrong Culture

When discussing a wrong culture, we are not judging its correctness, only its readiness for component technology. For our purposes, a wrong culture is one that is not prepared to make good use of components. However, this is not simply a matter of saying you are ready to use components or not. In order to take advantage of the different levels of components, there must be a corresponding change in the development culture.

Consider the following anecdote, which may describe the culture at your company. There was once a ditchdigger who was given the job of digging a particular ditch by 6:00 p.m. It was a challenging task, but he figured if he worked hard all day, he just might get the job done. He had been working for about two hours when a fellow pulled up with a backhoe and asked him if he would like some help. The ditchdigger told the man to go away; he had to finish digging the ditch by 6:00 p.m. and didn't have time to talk.

As our little story shows, some cultures can be narrowly focused. Because of time or cost pressures, they feel they cannot take the time to consider alternatives to the way they currently work. A narrow focus is understandable, but organizations often do themselves a disservice by not considering alternatives to current practices. Developers usually approach this problem in one of two ways. They either wait for a brief respite before bringing in new technology, or they bring it in by stealth and declare victory once they have accomplished their goal. Either way, moving to a new technology in this type of environment can be a real challenge.

The stealth mode of technology adoption has its own risks, however. What happens if this back door, under-funded and unsupported approach fails? It often means that the technology will not get another chance. Successful stealth programs require both support and protection to succeed. It may be at a low level, but it must exist. One-man heroics rarely carry the day.

Another organizational problem is a lack of infrastructure for the level of technology you want to use. This is most often seen when moving to more advanced levels of component usage. Organizations may not be inclined to make this move because of the investment required. Even if you make the case for a good return on investment, budgetary constraints may make it a moot point. For example, business conditions may require that resources be focused on certain projects, leaving none for rolling out new technology. One approach is to deploy new technology on a small scale before rolling it out to the enterprise. However, some pieces of infrastructure are so expensive that a small-scale rollout makes little sense.

And while reuse can deliver great value to an organization, companies often have to change both their processes and structure to take full advantage of it. Developing truly reusable components is hard work and requires a software engineering process to do it well. Furthermore, you often need to modify your development process to include reuse. Most processes I have seen do not make any allowance for either creating or using reusable components. In addition, you need someone to support commonly reused components. This means establishing some type of reuse center.

Yet a corporate culture can also undermine reuse. I know of a company that rewards its developers based on the amount of code they write. The more they write, the greater their reward. That company won't have reuse as long as the "more is better" reward structure is in place. Companies that succeed at reuse have a culture, as well as a reward structure to support it.

Wrong Goals

When building reusable components, you must envision not only today's needs, but how your components may be used in the future. What if you get it wrong? You may simply not anticipate a particular usage of a component. This is not unusual. Developers will often try to use components in ways that the components' designers never imagined. The problem with this is that you may be unpleasantly surprised by the results. Good documentation and a focus on black-box reuse can help.

Even if your component has the functionality you need, there may be a mismatch in system engineering goals. For example, you may have designed a component for great flexibility — a worthy goal. What happens, though, when someone wants to reuse it but needs high performance within narrow constraints? In this case, your component may not be the right one to use even if the functionality is there. Many factors go into determining whether a component is a good fit for a particular application. Good component documentation helps characterize engineering constraints and fitness for use.

Another area where goals can go wrong is when the component is well designed, but business needs change. When you design a reusable component, you usually make some assumptions about the nature of a domain and the processes that will work in it. In today's economy, however, it is not unusual to have your assumptions challenged and discarded. Businesses change their processes and models to meet the changing demands of customers. Some businesses even change the type of business they are in (I know; I worked in one). This is one reason it is so difficult to build good domain components. You are gambling that your assumptions about the future of a business are correct, and that is not always a good bet. Because the cost of developing domain components can be so high, firms find it cheaper to modify a generic model than to build one from scratch. This is part of the reason the ERP market has grown so much. This is also the reason it is easier to gain value from service components. While your business may change, your need to access a database probably will not. In dynamic markets, infrastructure services may remain more stable than the domains they serve.

Wrong Purpose

Closely related to the issue of wrong goals is the problem of wrong purpose. For example, service components and domain components each have a different scope and purpose. Because they have differing needs in terms of infrastructure support and developer skill sets, you should not use the same component for both purposes. I have seen this type of problem happen most frequently on small projects when analysts try to cram lots of functionality into a few components. For some reason, they think that having fewer components will make their system simpler; instead, they end up with poorly abstracted components that have mixed types of functionality. This quickly becomes a debugging, maintenance and reuse nightmare. Good analysis and design can overcome this problem. In this case, more classes can mean better abstraction, greater flexibility and higher quality.

The business case for components must address the risks we face. Understanding these risks also helps users to understand which battles they need to fight in their own organizations. In order to identify risk, however, we need to determine what will keep us from obtaining the value we want when using components. This will vary from organization to organization, but for many companies the key areas of wrong culture, wrong goals and wrong purpose are a good place to start.

About the Author

John D. Williams is a contributor to Application Development Trends. He is president of Blue Mountain Commerce, a Cary, N.C.-based consulting firm specializing in enterprise, domain and application architectures. He can be reached via e-mail at [email protected].