Welcome!

Java Authors: Liz McMillan, Walter H. Pinson, III, Maureen O'Gara, Yakov Werde, Tony Bishop

Related Topics: Java

Java: Article

The Proof Is in the Concept

The Proof Is in the Concept

In a large project, designing for performance often turns out to be a chicken or egg situation. In a J2EE project, this is even more evident. Typically when business and functional requirements are handed down to the technical team, the first step is to map the functional subsystems into software components, and then to hand out the design of those components to respective team leads for design and implementation. This is part of the responsibilities of the project architect. At this stage in development, the onus is on the architect to make decisions on identifying potential bottlenecks in the system and recommending alternatives based on standard architecture patterns and guidelines.

In an ideal project, the design of each module involves taking all the performance characteristics into consideration and building out the functionality. If a formal design and development cycle is followed, the team may be able, even enforced, to take care of performance issues early on in the project. However, the luxury of doing this is often not there. Typically, most projects are driven by an urgency to demonstrate the functionality of the system to the client. Although well-coordinated teams design and develop with performance criteria in mind, focusing on performance issues puts the team in danger of missing the boat.

One of the reasons such projects lead to disaster is that often a technical proof-of-concept initiative that's undertaken at the beginning of the project ends up creating the framework for the full solution. A common point of confusion between different stages of a project is the proof of concept (POC) and the prototype. A proof of concept is geared toward demonstrating functionality. A prototype should be an implementation of the full solution that tests minimal functionality. A proof of concept doesn't need to consider performance characteristics, while a prototype should tweak out performance characteristics before the full functionality is implemented.

In a J2EE project, the architecture of the full solution needs to deal with the issues of load balancing across different hardware machines: integration with legacy systems; decisions on using the best technology such as EJBs versus JDO, application server clustering, etc. On the other hand, a POC needs to primarily deal with deployment in a minimal environment to demonstrate maximum functionality.

The support provided by the J2EE platform to implement different stages and environments is quite good. Application servers allow the same code base to be deployed in different environments with well-defined migration paths. For example, you can deploy multiple applications in the same instance of the server, multiple servers on the same machine, or multiple servers on different machines. If you've designed the code base correctly, the migration from one to the other should be well defined. While a POC typically has "throwaway code," designing with migration in mind facilitates at least some degree of reuse.

My current client has opted to invest both capital and resources into a well-defined POC. I think this is a worthwhile investment. Our project team is well aware of the life cycle of the POC, and the compromises we are making in terms of performance, the different architectural configurations, and the different issues involved in migration. This becomes even more crucial when integrating new third-party tools into the architecture. In our case, this involves a J2EE-compliant business rules engine and a workflow engine.

Organizations that decide to invest in such initiatives early on in the project end up working smarter and not harder. J2EE offers the capability to achieve this from a platform perspective as well as in the form of well-documented guidelines and patterns.

More Stories By Ajit Sagar

Ajit Sagar is a principal architect with Infosys Technologies, Ltd., a global consulting and IT services company. Ajit has been working with Java since 1997, and has more than 15 years experience in the IT industry. During this tenure, he's been a programmer, lead architect, director of engineering, and product manager for companies from 15 to 25,000 people in size. Ajit has served as JDJ's J2EE editor, was the founding editor of XML Journal, and has been a frequent speaker at SYS-CON's Web Services Edge series of conferences, JavaOne, and international conference. He has published more than 125 articles.

Comments (2) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
Michael Neumann 05/07/03 03:24:00 AM EDT

Although there was an attempt to clarify the meanings of "Proof-Of-Concept" and "Prototype" I have to disagree.
Actually a Proof-Of-Concept ought to do exactly that: give a solid feedback upon the basic charactaritics of a specific concept. Therefore any statement wath a POC has to proof is dependent on the concept and can't stand for its own. With a concept for the algorothmic layout of a GUI for example you might not need to proof the performance. On the other hand if the concept you're trying to proof is a concept concerning data-transfer with optimization for time & space your POC would have to address exactly these aspects.

Chris Thompson 05/06/03 08:10:00 PM EDT

I am a bit suprised that the word Test was not mentioned in an article about Performance. Perhaps Test is included in the POC resources that the article mentions the client is making available. I don't think that one needs to understand the particular definitions or distinctions between a Proof-Of-Concept and a Prototype that were given, but at whatever stage of the project you should have some customer performance requirements that have been expressed somehow (otherwise why bother considering performance) for which you can define and execute a test. At the POC/Prototype stage you shouldn't need any fancy tools, just a written definition of how the test should be setup and a wristwatch for timing how long it took. Even at the paper stage, you should be able to define a test and execute it, for example, when the user hits the submit button how long do you think or estimate that action would spend in each sub-system of the design before the response is seen? Given that time is not free, you can't test everything and test for everything regarding performance, but there should be a vital few performance requirements for which you can. Also early on you may not be able to simulate thousands of users on your system, but you should be able to define a test and how it would work, and from that be able to analyze the pieces of your system would handle those users without crashing for example. What I like about this approach of defining and testing for performance from the beginning is that it helps the development team know what's important, and it allows you to explore the performance requirements further with the customer early on. Maybe a performance requirement is reasonable, maybe not, maybe it would be if you had another million dolars of hardware for the final production system, or maybe the customer would rather have you spend your time focusing on a different performance requirement that is more easily quantified. Another benefit is that provided you have executed and recorded the test results at each stage, it can show progress to the team and the customer as the performance (hopefully) increases from stage to stage or release to release. So my suggestion is to consider testing for the vital few performance requirements from the beginning of the design as that will help you produce a better system sooner. Thanks for the article.