An agile approach can deliver recognizable value to organizations. Using examples from recent projects, David Garmus demonstrates that software development projects can benefit from using the agile methodology when appropriate. Delivering a project in an organization that is following an agile implementation methodology can be faster and more productive than the same project in an organization that is using the traditional waterfall approach. David provides actual delivery (project performance)
Agile Development Practices 2007
Developer practices for traditional and agile Java development are well understood and documented. But dynamic languages--Groovy, Ruby, and others--change the ground rules. Many of the common practices, refactoring techniques, and design patterns we have been taught either no longer apply or should be applied differently. In addition, some new techniques can come into play to improve your development.
Test automation is like exercise. We know both are great ideas, but most of us don't do much of either. Although we know that creating a solid automated test suite is critical to any agile testing strategy, we are often just told to "Do it" without much support-money or people. Jared Richardson examines the infrastructure and tools you need for your automated testing to succeed and prosper.
Many who try to unit test their applications-whether using agile or traditional methods-quickly find that doing a thorough job can be difficult if the code was not designed with testability in mind. Roy Osherove describes dependency injection methods for designing APIs so that they are easier to test. He explains how design patterns can help and how to implement applications with interface-based programming. Roy shares his insight on what "evolving a design" really means in the context of test-driven development.
The phrase "working together" is based on a team collaboration metaphor. However, Stacia Broderick and Lee Devin have found that most teams don't actually collaborate-rather, they consist of modular parts that are steeped in competition and oriented to reward the "stars." Stacia and Lee use a metaphor drawn from theatre art, a form of group work that requires collaboration, encourages interdependency, eschews competition, and emphasizes the project rather than any particular member of the group.
Many software teams do not have continuous visibility into the ongoing quality of their software releases. Although agile practices emphasize the value of bringing testing forward in the development process, many teams lack the infrastructure required to make this a reality. Testers often depend on development or operations to produce, install, or deploy builds. Zach Nies discusses how build automation provides an effective platform to bring quality and testing earlier into the development process.
Big Design Up Front (BDUF) is a design technique that has been part of the development cycle for decades. Unfortunately, fully specifying a software design in the presence of change without a crystal ball is rarely effective.
In Behavior Driven Development (BDD), you write behavioral tests of an application just-in-time, one test at a time to express its design. You can take a BDD approach to a database schema in the same way. Scott Ambler presents the Behavior Driven Database Design (BDDD) technique. He explains its relationship to Agile Model Driven Development (AMDD) and how it fits into agile software development in general. Find out how to refactor a database by applying simple changes that improve the design without changing its semantics.
An agile team needs a workspace that supports highly collaborative ways of working together. The team needs to be able to sit together and have visible "information radiators" of the latest status on planned work and code quality. Some teams also boost their spaces with "eXtreme Feedback Devices" such as lava lamps and audio signals linked to automated processes. It is vital to ensure that feedback mechanisms within the agile workspace are easy to interpret and low maintenance.
When teams "go agile," members of the whole team take on greater responsibility for thinking and deciding as a unit. Though individual team members may know how to make great individual decisions, few people bring the skills or perspective needed to make high quality decisions as a group. Teams need to plan for all elements of high quality team decisions, balancing technical quality, commitment to implementation, efficiency, and opportunities for team development.