Working with legacy software systems provides its own considerations, but there are some general goals that can be stated for web-based software applications. To the degree that the nature of system upgrades substantially touches these areas of system design, it is important to consider the following goals within the system design. Well designed applications should meet the following goals in order to provide lasting value:

  • Be robust – Enterprise software is important to an organization. Users expect it to be reliable and bug-free. Therefore, it is incumbent on the design team to use the best possible software practices build robust solutions and ensure that the code is of the highest quality.
  • Be performant and scalable – Enterprise systems must meet the performance expectations of their users. They must also exhibit sufficient scalability – the potential for an application to support increased load, given appropriate hardware.
  • Take advantage of OO design principles – Object Oriented (OO) design principles offer proven benefits for complex systems. Good OO design practice is promoted by the use of proven design patterns – recurring solutions to common problems. The concept of design patterns was popularized in OO software development in Design Patterns: Elements of Reusable Object-Oriented Software.
  • Avoid unnecessary complexity – Practitioners of Extreme Programming (XP) advocate doing the simplest thing that could possibly work. The lesson is to be wary of excessive complexity. Complexity adds to costs throughout the software lifecycle. On the other hand, thorough analysis must ensure that we don’t have a naive and simplistic view of requirements.
  • Be maintainable and extensible – Maintenance is by far the most expensive phase of the software lifecycle. It’s particularly important to consider maintainability when designing Enterprise systems. A well designed application will be useful to an organization for years and must be able to accommodate new business needs. Maintainability and extensibility depend largely on clean design. We need to ensure that each component of the application has a clear responsibility, and that maintenance is not hindered by tightly-coupled components.
  • Be delivered on time – The objectives of clean design must not eclipse the need for an efficient and productive development cycle. The use of development environments and frameworks that ease the development process and help implement proven design patterns is an important part in considering a development project.
  • Be easy to test – Testing is an essential activity throughout the software lifecycle. We should consider the implications of design decisions for ease of testing.
  • Promote reuse – Enterprise software must fit into an organization’s long term strategy. Thus It’s important to foster reuse, so that code duplication is minimized. Code reuse usually results from good OO design practice, while we should also consistently use valuable infrastructure provided by the application server where it simplifies application code.

(Portions of this entry are derived from J2EE Design and Development by Rod Johnson.)