Table of Contents
- The need for methodological flexibility
- Beware of data-oriented BDUF
- Evolutionary development on an agile team
- The “natural order” of things and evolutionary development
- Summary
1. The Need for Methodological Flexibility
As an example of the need to be flexible with methodological requirements, imagine this situation: Senior management within your company has decided to adopt ICONIX as the official software process that all teams will follow. The ICONIX methodology is based on the idea that you’ll iteratively and incrementally identify requirements via use cases, analyze those use cases with robustness diagrams, then design your software using UML sequence diagrams and UML class diagrams. The class diagram is then used to develop your physical database schema and code. ICONIX is well suited for project teams that build business applications using object or component-based technologies.
ICONIX sounds great, doesn’t it? Perhaps to your Java developers, but what about the people working on your data-warehousing initiative? A data warehousing team would be better served by a data-oriented approach where you start with a conceptual data model, then work on a logical data model, then finally a physical data model (all in an iterative manner of course). How successful do you think a data warehousing team would be if you forced them to follow ICONIX? Now let’s turn it around, how successful do you think an n-tiered Java team be if you forced a data-oriented on the team? Yet surprisingly enough this is exactly what many organizations do. They desperately want to find a “one size fits all“ approach to software development, presumably for consistency and ease of management, but in doing so they put the teams at risk. Just like you need to use the right tool for a job you need to follow the right process for a software development initiative.
To succeed at software development you need to be flexible in your choice of software development methodology. There are several reasons why it is important to do so:
- Different technologies require different techniques.
- Every individual is unique.
- Every team is unique.
- Your external needs vary.
- Initiative categories vary.
2. Beware of Data-Oriented BDUF
A common approach within traditional organizations is what I like to call a data-oriented big modeling up front (BMUF) approach. This strategy is based on two concepts:
- Your primary modeling artifacts are conceptual, logical, and physical data models. Data is a critical asset and therefore should be a primary driver of your development efforts.
- You need to develop and baseline these models early in your initative. The idea is that you want to think through the major issues at the beginning of the initiative. The goals are to prevent any “surprises” later in the effort and will enable you to proceed in parallel, the data group can focus on data-oriented activities and the development team can build the application. Many organizations will go so far as to insist on having the physical data model in place before coding starts to provide a point of commonality, the database, between the groups. A change management process is put in place to allow changes to be made to the primary artifacts (the data models).
Many data professionals believe that you need to get your data models “mostly right” reasonably early in an initiative. This misconception is often the result of:
- Prevailing organizational culture.
- Prevailing professional culture.
- A misguided desire to identify the “one truth”.
- Lack of experience with evolutionary techniques.
- Prescriptive processes.
- Lack of supporting tools.
- Not understanding the risks of BMUF.
There are several serious problems to a data-oriented BMUF approach to development:
- One “process size” does not fit all .
- It isn’t just about data.
- You can’t think everything through at the start.
- Requirements change over time.
- It doesn’t easily support change.
- It doesn’t support close interpersonal interactions.
Data-oriented BMUF is a viable way to build software. But it’s certainly not agile and it certainly doesn’t reflect the realities of most modern application development efforts. It might have worked for you twenty years ago, although I doubt it was your best option back then either (I was naively working like this in the 1980s, by the way), but it isn’t appropriate now. It is time to rethink your approach to data-oriented development and adopt evolutionary techniques.
3. Evolutionary Development on an Agile Team
Evolutionary development is an iterative and incremental approach to software development. Instead of creating a comprehensive artifact, such as a requirements specification, that you review and accept before creating a comprehensive design model (and so on) you instead evolve the critical development artifacts over time in an iterative manner. Instead of building and then delivering your system in a single “big bang” release you instead deliver it incrementally over time. Yes, you will likely still need to do some initial requirements and architecture envisioning, but this is at a high level — I can’t say this enough, you don’t need to do BMUF! In short, evolutionary development is new to many existing data professionals, and many traditional programmers as well.
I have three very important observations to share with you:
- Modern software processes take an evolutionary approach to development.
- Most leading processes are agile.
- Look beyond data. Data is still important, but then again many other things are too.
The implication is that if data professionals are to remain relevant that they also need to take an evolutionary approach to development. Is this possible? Absolutely, but you have to choose to work this way. Figure 1 depicts a high-level overview of the relationships between critical development activities. The diagram shows a collection of fully connected activities. It is interesting to note that there is no starting point, nor is there an ending point, instead you iterate back and forth between activities as required. Furthermore, this diagram isn’t complete. For example it doesn’t include activities for project management, acceptance testing, or deployment to name a few. My focus for now is on data-oriented development activities.
Figure 1. Evolutionary development on an agile team.