Fortune 500 Technology Manufacturer Uses Eiffel Software to Dominate its Market



Abstract

A Fortune 500 manufacturer of high-end data storage equipment was attempting to bring a new, company-critical product family to market. As is often the case, time and other resources were limited, and the issues were many, technical and otherwise.

The company chose to develop the core application in the Eiffel programming language, using the compiler and tools from Eiffel Software. In the end, Eiffel proved to be an excellent choice, enabling a chronically understaffed team to deliver very ambitious, high quality components and products that in turn provided the foundation for their end-product to achieve market dominance.

 

Key Results

  • Solved their most difficult engineering challenges
  • Realized productivity gains of 10-20x relative to their non-Eiffel teams
  • Established company as the highest-reliability supplier in their marketplace
  • Revenues for the Eiffel-related product line grew from zero to over $1 billion in 7 years.



Background

While the company had a mainstream product that continued to be successful, it was clear that the market was evolving rapidly and a new family of products, quite different from their existing line, would be critical to the company’s long-term success. The product required a range of software components from embedded systems to PC-based applications, and everything in between. The components in the middle of the range (the core) made up most of the system’s logic and included configuration databases, commands and rule sets. System consistency was enforced at this level, and implemented in the embedded components.

For this “core” application and for the user-visible parts, the team chose the Eiffel programming language, using the compiler and tools from Eiffel Software.

The team chose Eiffel for a number of reasons. The Eiffel language has many features that map directly to the problem domain, ensure product quality, and enable code efficiency and reusability. Eiffel Software in particular offered significant benefits in the form of high quality libraries and a very productive development environment. The team also included a couple of individuals with prior exposure to Eiffel, and their experience had told them that Eiffel was by far the best tool for such a large, critical set of applications that demanded high quality.

In the products developed, there are three fundamental component sets: the “muscle” or embedded components, which compute and manipulate data; the “brains” or configuration, command and rule systems; and the “face” or user-visible applications. Eiffel is presently used in both the configuration/command/rule components and user-visible components (the brains and the face if you will).
The embedded software is written in C++ and a small amount of assembly language. Those components are disk-based and their development tools are pretty much industry standard. The technical lead reported: “There are no special hardships associated with development of those components (other than the fact that they are developed in C++ and assembler), though they do lack a high-end IDE. The Eiffel software components were quite ambitious, characterized by significant logical and functional complexity. Some of the trickier problems and challenges involved dealing effectively with the often very complex internal data relationships.”


Technical Requirements and Observations

The first product requirement (and technical challenge) was one of reliability, measured in terms of equipment availability. The company’s products had an expectation of “six nines”, or 99.9999% availability – equivalent to unplanned downtime measurable in seconds per year (if any). Every component, hardware or software, had to be designed with the customers’ business continuity in mind. This strictly mandated correctness in the software. The Eiffel components, as the decision-making and rule-enforcing agents, had to be especially disciplined. This requirement was in fact a key factor for selecting Eiffel in the first place. Management’s earlier experiences with Eiffel had taught them that Eiffel’s Design by Contract™ feature and comprehensive support for object-oriented software engineering would enable them to create systems that lived up to customer expectations.

The second major technical requirement was to ensure that the relationships between all logical components were never corrupted. Ensuring this with the complexity of the hardware/software configuration again virtually mandated using the assertion mechanisms that are found only in Eiffel. In practice, the Eiffel assertion mechanisms proved invaluable in this area. The assertions provided run-time verification of the specifications, and in fact provided the specifications themselves (as is the case with all good Eiffel code).

A third, rather challenging requirement was to detect and correct any errors that might occur elsewhere in the system. Without total confidence in the logic built atop the Eiffel components, such requirements would have been impossible to satisfy.

For reference, the two largest Eiffel applications in this product configuration contained about 800 and 2000 classes respectively, with millions of active objects at a given instant.

Included in the software were a few third-party components written in C and C++. These components were chosen for various reasons, and included such capabilities as Secure Socket Layer (SSL) support. Another useful third-party component was a list/grid widget, chosen for its extremely fast repainting performance (at times, displays included thousands of items). Eiffel provided a safety-net around these components by letting developers wrap the components in proper assertions, forming contracts not otherwise possible in their native languages. This technique helped isolate potential issues with those external components quickly and reliably. To quote the technical leader, “If not for Eiffel, we wouldn’t have known where (else) in the system that the problems were.” He went on to say that having Eiffel and particularly its powerful assertion mechanism has made the whole product better, including components developed by other teams in other languages. This is because the Eiffel assertions exposed flaws in those other areas of the software (and even hardware), and they were then able to identify and address those flaws efficiently.

Bug fixes within the Eiffel-based components were virtually instantaneous. The project’s technical leader attributes this and the extremely low overall bug-rate (see below, in Results) to two possibilities:

  1. Every member of his team is incomprehensibly brilliant; or
  2. His team members would naturally be as likely to create as many bugs as any other team’s developers -– but Eiffel:
    • lessens the likelihood that they will create a bug
    • encourages better practices and increased self-discipline,
    • prevents almost any bug they do create from getting into their system, and
    • if a bug gets in, the built-in Eiffel trace mechanism pinpoints the error.
He gave the following comparison: A typical “bad pointer” problem in C would take 2 days to trace and repair. On the other hand, such a problem normally can’t happen in Eiffel (effectively, zero days). In Eiffel, a developer can sometimes neglect to create an object before accessing its features. This kind of problem is routinely found during development itself. If for some reason this indiscretion makes it into the verification cycle, Eiffel will generate a stack trace, with function names and statement numbers that identify the exact point where the error occurs. The testing personnel have grown to expect near-immediate turnaround on any problem they find in the Eiffel code, as they supply the developers the trace when the bug is reported. The fact that Eiffel does not support the notion of address aliasing means that the point of error is often all that is needed to find and repair the original fault.
According to the technical lead, “The only problems you get in Eiffel are logic problems (i.e., problems that you would have in any language because of a flaw in your own thinking). Eiffel helps you to locate and fix those problems though, in a way that no other language does. With Eiffel, the language never gets in the way of the problem being solved, and never becomes the problem itself. With Eiffel, we can focus on the design, work at the design level and even at the model level. The fact is, Eiffel gives us a single language for our design, our model, even our specification, and it just so happens that it compiles into good executable code.”


Organizational Observations

The team working with Eiffel also faced an unexpected organizational challenge. There was little understanding on the part of the embedded component teams of the importance and difficulty of creating the types components that would be done in Eiffel. This was further exacerbated by two factors. First the embedded component development effort was less productive, simply a limitation of the tools available. Their teams were correspondingly much larger, and eventually accounted for nearly 90% of the total development work force for the division. The productivity differences themselves contributed to a somewhat insular or defensive culture.

The second challenge facing the Eiffel team was ironically a result of the efficiency of developing with Eiffel. The team working with Eiffel was so effective at developing their components that the other teams, and even management, began to believe that the components themselves were simply not that big a deal – how could they be? The team was able to deliver even large systems quickly and without functional problems. The differential was difficult to ignore: With only 10% of the programming personnel, the team using Eiffel had produced 40% of the system’s code, and further, was responsible for only 1% of critical problem reports.

One of the lessons gleaned from the experience was that management needs to be involved in the choice of project tools and in fostering good communication and cooperation between groups. They noticed that significant differences in productivity between teams, left un-discussed, were often interpreted as an indictment of the less productive team – when in reality, the productivity differentials were more objectively attributable simply to the difference in tools the groups were using.


Results

The team that used Eiffel out-produced all other teams in virtually every measure of project success: capability delivered over time, speed of integration, stability, and cost of maintenance.

As some of the Eiffel code was responsible for the integrity of the entire system, the Eiffel code was often in the position of preventing or minimizing the negative impact of problems in the other components. As stated earlier, the team using Eiffel, with 10% of the personnel, produced 40% of the system’s capability and yet was responsible for only 1% of critical problem reports. And as a testament to the reusability and extendability of Eiffel systems, in ongoing releases, the Eiffel components typically had zero regressions during qualification.

Some components, in particular the management applications, were developed with 5% to 10% of the total resources needed for equivalent applications from other groups. Put another way, the productivity of the Eiffel developers was between 10 and 20 times that of the developers in the other groups.

These benefits/results derived from a number of factors related to the use of Eiffel, including:

  1. Seamless transitions from conceptual models to implementation. There was no need to redesign to fit the restrictions imposed by a limited implementation language
  2. Comprehensive support for object oriented software engineering.
    • Design by Contract
    • Full assertion support
    • Strong typing
    • Full support for polymorphism
    • Multiple inheritance
  3. Libraries built on the same principles.
  4. Smaller development teams made possible by high leverage and reusability attained using Eiffel.
  5. Simple mechanisms for working with external components in C and C++.
  6. A portable and powerful abstract GUI toolkit (EiffelVision).
  7. Fast and efficient coding and debugging.


Plans for Microsoft .NET Capability

The company is unwilling to discuss their proprietary plans surrounding whether they will move to the .NET framework. However, the team leader was able to say this much: If and when the company chooses to go with a project in .NET, Eiffel will make it a LOT easier – they can reuse virtually all their previous work, and simply recompile to Windows on .NET. If they had used other-language products for their prior projects, they would have had to rewrite it all.


Summary

According to the project’s technical lead, “In software development, you can ‘stack the deck in your favor’ (i.e., increase the probability of success) by putting in place the right people, the process and the tools. I find that, in general, there is a lack of motivation to look at a better way of doing things among developers and their managers. However, in a given organization, there are a number of people who ARE motivated to make the team successful. They analyze what, why and how of developing and problem solving.”

As a result of his and his team’s shared focus on quality and productivity, EiffelStudio is a natural fit for the team’s work. The design process is both driven by Eiffel, and supported by it. The methods heavily employ polymorphism, multiple inheritance, strong typing and uniform references – all features of Eiffel that are not found in other languages. They have grown to expect and demand these capabilities of their tools.

But when asked why Eiffel has increased his team’s efficiency and quality so much, he replies that, “There is no one reason – the compelling motivation is that the Eiffel Development Framework is a comprehensive framework for doing software the right way. This is perhaps the main reason why dabblers often choose more trendy or faddish tools rather than Eiffel – they don’t understand the savings involved in doing it the right way. They are less concerned with the cost and complexity of poor software engineering than they are with a single attractor, a hook. The more sophisticated the analysis, the more compelling the reasons for using Eiffel, but it’s never just one thing – software engineering is after all, a lot more than typing in code at the keyboard. We’re supposed to be paid to think, to consider the big picture, to get it right.”

Each project that the company’s Eiffel team has undertaken in the course of 7 years has been successful. During that time, that division has grown into a $1 billion player, dominating its market segment.

According to the technical leader, if they had used C++, they would have been fighting their own fires, they would be behind on development, their products would not be as reliable, they would be not as strong in the marketplace, and not as nimble and responsive to customer requirements.

“With Eiffel, once you have a non-trivial system, with a reasonable set of business classes, change and nimble-ness are very easy – you simply do a little ‘remodeling’. Reuse most of your classes, perform a little adaptation, and bam! – you’re done. Eiffel helps keep the system flexible, preventing the kind of rigidity and limits we see typically in C++ and Java systems.”



About Eiffel Software
 

Eiffel Software (a division of ISE) is the world leader in Eiffel true object-oriented programming tools. Founded in 1985, Eiffel Software produces proven professional tools and component libraries for business-critical and enterprise software developments. Eiffel Software’s products enable their clients to output more and higher-quality software in less time than with any other development tools available. Its users span the globe, in industries ranging from large financial institutions and transaction houses, to technology manufacturing, to government and defense contractors, to health care providers and more.