Skip to main content

Application architecture essentials, Part 3: Getting started with application development methodologies

Christopher P. Caserio (cppc@acm.org), IT Architect, Objex Consulting
Christopher Caserio
Christopher Caserio is an IT Architect with a leading insurance company. He has been involved in the development and design of software systems for more than 25 years, playing many roles during that time. He started Objex Consulting in 1993 to provide enterprise architecture and software design and development services to clients. You can reach Christopher at cppc@acm.org.

Summary:  Discover key skills, competencies, tools, and techniques for incorporating formal and informal development methodologies into your design and planning activities in this third article in the series on application architecture essentials.

View more content in this series

Date:  03 Apr 2007
Level:  Intermediate
Activity:  914 views
Comments:  

In this installment in the series about the discipline of application architecture, you explore the skills, tools, techniques, and milestones related to application development methodology. A well-rounded application architect must be able to apply a number of methodologies to the development of an application. The choice of method may be dictated by the organization or the nature of the project. Balancing disciplined command and control rigor and flexible, agile techniques is a critical component of a successful application development project.

The role of an architect is to translate the need for automation (requirements) into an appropriate structure (design) and the means of construction (methodology) within resource limitations (time, financing, skills). In previous articles in this series you learned about the basics associated with the requirements and design patterns. In this article you learn how to apply the appropriate techniques to defining the application development methodology.

There are many software development methodologies published in books, packaged as products, or maintained by standards bodies. If you design software for a large organization, there may be an established standard methodology practiced informally or as a mandatory formal method.

Skills and competencies

A useful and effective development methodology should include a spectrum of techniques that range from loosely managed to completely specified. The type of technique to use and the amount of process rigor to apply are driven by the amount of risk involved in the application design, skill set, technology maturity, scale, complexity, and criticality. At one end of this spectrum, the development team, working closely with the stakeholders, crafts an application solution to some set of identified and prioritized functions. Most of the rigor can be derived in the deployment aspect of the process, using continuous testing and integration of the application components, as shown in Figure 1.


Figure 1. Agile method schematic
Agile method schematic

Moving along the spectrum, a unified process methodology breaks up the development effort into specific disciplines (design, code, test, and so on), as shown in simplified form in Figure 2. Input from and feedback to stakeholders is more stylized and formal, as well as less immediate and continuous. This type of method is applicable when the requirements are well understood, with little or no reusable design and implementation assets available.


Figure 2. Formal method schematic
Formal method schematic

At the other end of the process rigor scale are product-line architectures where the application design, construction process, configuration, and deployment are pre-developed and customized using a set of variability points. This is similar (as indicated by the term) to production-line engineering. The materials, parts, and assembly processes are standardized. A simplified view of this type of method is shown in Figure 3.


Figure 3. Product Line method schematic
Product Line method schematic

In a project with any scale at all, it becomes obvious that no single methodology, no matter how carefully tailored in any number of dimensions, will be optimal for all parts of the application. Some components of the architecture have fuzzy or unknown requirements, as in: "We need something to organize and prioritize delinquent accounts." Other components are instances of well-known and understood functional elements: "We need an application database maintenance interface." In even the most primitive development shop, the implementation of the latter starts by copying the last instance built or some existing archetype.

An organization or development team evolves reusable components and designs over time. As this happens, the development method for some application types moves across this spectrum from experimental creative processes to formalized reuse and variation.

Learning the ins and outs of the various methodologies is extremely valuable, but be sure that you also know their strengths and weaknesses. Also, apply the techniques that are appropriate to the application and the context in which you are performing the development. The architecture itself serves as the primary vehicle for dividing the application into structures that reflect a separation of concerns. That separation allows the architect to analyze the characteristics of each component independently of the others. The methodology to apply is just one of these characteristics and should be identified and supported by the architecture analysis.

The methodology model

So, you need some kind of application development methodology if you hope to succeed in building applications of an appreciable size. What exactly is involved in a methodology? How can you compare and contrast the various methods that are available? To address these questions, you can create a model of a methodology that defines the types of things that can be specified in a method, their attributes, and possible relationships. Many examples of this type of model exist, including the Unified Method Architecture, which is part of the Eclipse Process Framework (EPF). You can also look at attributes of the methodology itself, such as its profile, or the range that the method addresses in term of roles, application life cycle, and the activities that are specified.

Agile development

Agile development methodologies are lightweight processes that seek to minimize the time lag between identifying requirements and the delivery of working code. High-level requirements are captured as general statements of desired functionality or as user stories that describe in narrative form how the system is used to achieve a goal. Requirements are formalized as test cases for the implementation so that development progresses toward passing the test cases, thereby delivering the required functionality with as little process overhead as possible.

Agile development processes are usually executed in small bites of a few user stories or requirements at a time. Scheduling is basically a time box method that defines the period of time for an iteration and the requirements that should be completed within that time frame. Each iteration should be large enough to deliver at least one significant functional aspect of the application but not so large that it dilutes the team's focus.

Project management

Depending on your organization, you as an architect are not ultimately responsible for the day-to-day management of the application development project. However, you should have a clear understanding of the issues and requirements related to management of the project budget and schedule. Part of the architect's role is to deliver the required functionality within the available time frame and finances.

You should be able to support accurate planning and scheduling with the help of the architecture by analyzing the complexity and risk factors inherent in the components. You can also specify particular skills or skill levels to specific components, which helps with accurate resource scheduling.

For more agile methods, project management consists of prioritizing requirements and facilitating team development cycles. In this case, the architect adds value by analyzing the impact and complexity of the requirements.

Iterative development

The iterative in iterative development refers to the fact that these methods involve repeated execution of the kernel processes. Depending on the specific methodology, the kernel may be more or less structured, such as the workflows in each IBM® Rational® Unified Process® (RUP®) iteration or the sprint in Scrum. Each iteration results in tangible progress on the project deliverables. After each iteration, the results are examined, and the plan is adjusted for the next iteration.

Methods like the Unified Process and related products such as RUP define a process framework based on phases and iterations. The development life cycle is defined as a sequence of phases. Each phase results in a critical milestone version of the system, as well as an evaluation of the phase and planning for the next phase. Within each phase, a set of parallel workflows define the activities performed and the artifacts that are used, created, or modified by each activity. The type of phase calls out which workflows are mandatory or optional and a weight that indicates the amount of effort expended on that workflow relative to the others. The distribution of work shifts from requirements analysis to design to implementation, testing, and deployment as the phases progress. However, all of the workflows are executed to one degree or another, even if only to tweak artifacts based on feedback from other flows.

Within a phase, the set of workflows may be executed multiple times, in iterations. Each iteration should have a clear duration based on a time period or milestones achieved. An iteration may further modify the distribution of work to focus on a particular area, such as a prototype.

Risk assessment

The choice of a development method and the types of resources that you apply to a specific application component should depend partly on the amount of risk that component contributes to the project. Risk involves many things, including unknown requirements, new technologies, complex algorithms, performance and response time requirements, or critical correctness and reliability.

Identifying the high-risk components of your application design allows you to address those risks as early as possible. You may decide to evaluate off-the-shelf software for particularly risky elements. However, for components that provide a competitive advantage or use proprietary algorithms, this may not be possible. Deciding how much risk is acceptable depends on your environment and the competitive value of the application to the business. In general, you can rarely justify attempting a high-risk project where the payoff is not extremely high, such as a unique competitive feature. You can ameliorate risk by factoring your project and refactoring the high-risk areas. Eventually, you will have a clear map of your exposure and be able to see where to apply exceptional skills or effort.

Process definition and tailoring

No one process or even methodology works for everyone all the time. At some point, explicitly or implicitly, you tailor the process to suit your needs. You should be familiar with the basic methodology metamodel and be able to define and customize method elements. Define development processes for your projects by defining a process that takes into account the different characteristics of the application components.

Tools

There are many more tools than I can possibly even hint at here. I've identified a few examples that should get you started.

Eclipse Process Framework

The EPF is a method definition framework. The framework defines a process and content metamodel for documentation of a particular method. The composer tool is an Eclipse plug-in that allows browsing, authoring, and publishing content. Using EPF, you create a process definition from existing elements in the method content, which consists of role, work product and task definitions, and associated guidance (checklists, templates, and so on). You can further tailor elements beyond what is defined in the method library by using descriptors to add information.

You can use the framework to author new method content or extend existing configurations. You can then use this new content to define a project process and publish it as full-featured Web content. Enterprise architects can use the tool to create new configurations. Configurations constrain or extend existing library content by omitting, adding, or specializing the method content that supports a specific project context.

IBM Rational Method Composer is a product version of this framework with extended functionality, built-in method content for RUP, and integration with the IBM Rational tool suite.

IBM Rational ClearQuest

Rational ClearQuest® is a workflow, process automation, and issue tracking system. The product comes with a large set of prebuilt workflows and can be customized using a designer tool. ClearQuest integrates with the other products in the IBM Rational tool suite and offers a Web-based interface as well. Integration with IBM Rational ClearCase provides version and configuration automation for process artifacts.

IBM Rational ClearCase

Rational ClearCase® is a version and configuration management system that can support large-scale enterprise asset repositories and version control. The ClearCase product is integrated with IBM Rational tools, Microsoft® Visual Studio®, and even plugs version control functions into the native file system. You can create sophisticated rules, controls, and reporting functions within the asset repository to support configuration promotion processes and to integrate with other systems.

IBM Rational Software Architect

You can use IBM's Rational Software Architect to structure the artifacts and processes relative to the development of an application. You can create project templates that contain the generic structure of the solution, annotated with guidance on how to use the included pieces. IBM publishes modeling guidelines for structuring these templates using a library package to hold generic artifact components that you can copy into your model and customize.

Techniques

As with tools, there are too many techniques to cover in this article. Here are a few to get you started.

Extreme Programming

Extreme Programming (XP) is a lightweight, agile method that emphasizes the delivery of working, tested code as quickly as possible. It is mostly suitable for small teams but can be scaled by suitably factoring the application into smaller components. The primary motivation for this method is to minimize the amount of process overhead (sometimes called ceremony in agile literature) that takes the team away from productive work delivering functionality. XP practitioners use test-driven development (TDD) and continuous integration to keep the development focus on meeting the requirements with working code.

TDD puts the test before the code. Application requirements are expressed as test cases that reflect high-level requirements and business rules that are possibly extracted from user stories. The test cases are written first, and implementation proceeds by writing code to satisfy each test case. Tests are run whenever code is committed to the project build. This integrates with the continuous integration technique.

Continuous integration means that the entire project (or some suitable subproject) is rebuilt on a frequent, periodic basis or when code is committed or integrated. If the project builds successfully, all the tests are run against the resulting system and reports are generated for review by the entire team. Anything that breaks the build becomes a high priority.

Scrum

Scrum is a lightweight, agile methodology for managing software development projects. Business requirements are expressed in general terms and maintained as a prioritized list. The development team works without interruption for short durations (usually two to four weeks). Each interval is called a sprint. At the start of the sprint, the team evaluates the highest-priority requirements in terms of risk and scope and determines a set of requirements that will be implemented, tested, and possibly deployed at the end of the sprint. Daily meetings, called scrums, are informal reviews of progress and issues that impede progress.

During the sprint, the team is left alone to self organize and complete the required tasks. Any issues are raised at the daily meeting to be addressed by the project manager. Work for the day is planned. After each sprint, the progress is evaluated and the next sprint is planned. The requirements are re-prioritized based on new capabilities that have come up and on lessons learned during the sprint.

Use Scrum when you need to produce regular releases, to break a large project into smaller ones, or when requirements are volatile.

Crystal

Crystal is a family of methodologies that are associated with a range of project contexts defined by the criticality (financial, legal, or reputation consequences of failure), project team size, and project priorities. The methodologies are coded by color and cover a range within each of the project dimensions of size and rigor. These ranges are identified through actual practice using the methodology on actual projects. Ranges of applicability can then be adjusted to reflect a successful use in a project that stretched the methodology's range. When no existing method applies, new constructs are added to form a new one with its own color and range.

You can use Crystal in your own work to achieve some very useful effects:

  • Using the Crystal methods out of the box as methodologies.
  • Using the Crystal mechanism to characterize method configurations according to your own organization's priorities, experience, and skills.
  • Maintaining your own classifications for existing methods to optimize development productivity over time by choosing the most efficient method for new projects.
  • Using the Crystal method classification techniques to evaluate existing or proposed methodologies.

Open Unified Process

The Open Unified Process (UP) is an iterative methodology with minimal but extensible content. UP emphasizes architecture and modeling in the development process and is in the process of being adapted to model-driven development.

IBM Rational Unified Process

RUP is an incarnation of the Unified Process methodology that is packaged as a product. RUP contains extensive content, deliverable templates, process templates, roles, process and artifact guidance, and so on that you can tailor to almost any project context. RUP is delivered as browseable, reusable content. Organizations can build content that describes their specific process and deploy across any size team.

Team Software Process and Personal Software Process

The Software Engineering Institute (SEI) supports the Team Software Process (TSP) and the Personal Software Process (PSP) as part of an engineering approach to software development. The goals of TSP/PSP are to make software development more manageable, measurable, accountable, and predictable. SEI provides a large body of background material, case studies, books, training, coaching, and consulting in support of these processes.

Milestones

How can I talk about milestones in the context of a process or methodology when milestones occur as part of the process? Basically, I'm talking about the higher-level process within which the application development process is nested. This is usually some product or portfolio management process by which projects are spawned. At some point in the feasibility and planning stages of this process, the rough architecture of the system should be developed and used to analyze the effort, risk, and resources necessary for design and implementation. It is at this point that specifying and tailoring the development process can help.

Analyze the components of your architecture to assign characteristics that drive the choice of resources and methodology. Apply your best resources to the difficult or poorly understood components. If you are going to apply new technology, allow for investigation and prototyping. Identify components that are instances of generic implementation patterns and can be managed more tightly.


Summary

Understanding the many methodologies available and their characteristics is critical to knowing how to best construct your designs. You should familiarize yourself with the major methodologies and understand the tradeoffs in each. Learn to tailor the method to your needs. Choose the correct method for the type of project and the development environment. Learning to apply the right method in the right way at the right points in the architecture will greatly improve your results.


Resources

Learn

Get products and technologies

Discuss

About the author

Christopher Caserio

Christopher Caserio is an IT Architect with a leading insurance company. He has been involved in the development and design of software systems for more than 25 years, playing many roles during that time. He started Objex Consulting in 1993 to provide enterprise architecture and software design and development services to clients. You can reach Christopher at cppc@acm.org.

Comments



Trademarks

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=Rational
ArticleID=206419
ArticleTitle=Application architecture essentials, Part 3: Getting started with application development methodologies
publish-date=04032007
author1-email=cppc@acm.org
author1-email-cc=