This article from The Architecture Journal suggests that agile would serve better if accompanied by a set of best practices and techniques. It goes on to list the dangers in “behavior driven design”, suggestions for the development life cycle, and design rationale recording. Recognizing that many agile practitioners are against the idea of “big design upfront”, the authors of the article explain they are suggesting certain team dynamics and embedded practices & technologies to help streamline development practices and achieve “technical excellence”. By keeping the agile principles of constant customer involvement and continuous delivery of software alive while also balancing the benefits of a more rigid process, practitioners can see the value of both methods: One of the most common patterns that we use to avoid the perils of big design up front is the “sashimi” approach to the architectural definition. In this approach, instead of spending a lot of time designing and implementing the different moving parts around layers and tiers, crosscutting concerns, and so on, we build the minimal amount of code that is needed to connect all of the pieces and start building the actual functionality on top””providing an early end-to-end experience of the results. Indeed, the focus is more on the API level of the infrastructure, and not the actual implementation, which is usually mocked up for the first few iterations. By taking architectural needs into account for even agile software projects, better more predictable results can be achieved. Through involving the user's requirements and internal team design decisions, a hybrid approach (or perhaps simply a more rigid agile approach) gives teams the ability to be flexible without losing the strengths of process.