No BUDs allowed --> Design for Change

Posted by Tracy Bannon on Sunday, July 9, 2023

š—”š—¼ š—•š—Øš——š˜€ š—®š—¹š—¹š—¼š˜„š—²š—±! BUD means Big Upfront Design where every architectural aspect is planned in detail before the first line of code is written. Folks working in tech for more than 15 years are nodding in agreement.

Early on I was taught that my role was create the blueprint, build reference samples, then guide teams to ā€œš—°š—¼š—±š—², š—¹š—¼š—®š—±, š—®š—»š—± š—µš—¶š˜ š˜š—µš—² š—暝—¼š—®š—±ā€. We made sure we could “transition” the finished project to the O&M team.

š—¦š—¼š—³š˜š˜„š—®š—暝—² š—¶š˜€ š—»š—²š˜ƒš—²š—æ š—±š—¼š—»š—²! We’re used to building robust, scalable, and efficient systems. But how often do you design for change? As business needs and tech evolves rapidly, time for a mindset shift.

š——š—²š˜€š—¶š—“š—» š—³š—¼š—æ š—°š—µš—®š—»š—“š—² š—®š—»š—± š—°š—²š—¹š—²š—Æš—暝—®š˜š—² š—¶š˜! We must craft architectures that are not only robust and scalable but also flexible and inherently adaptable. We must be able to react to changing mission/business needs, cyber threats, market trends, and tech advancements to secure a competitive edge.

Acknowledge that initial assumptions will evolve and the software should evolve too. –> Iā€™m going to foot stomp the need for continuous recording of design decisions (ARDs).<–

“Building Evolutionary Architectures” by Neal Ford, Rebecca Parsons, and Patrick Kua lays out evolutionary architecture as being built to evolve as an inherent characteristic of the software. Evolutionary architecture is not a one-size-fits-all blueprint; it is an approach tailored to business needs.

When you design for change, do you make any initial decisions! š—¬š—¼š˜‚ š—•š—²š˜š—°š—µš—®!!

  • High-Level Tech Stack Selection like choosing a primary programming language or data storage if known.

  • Basic Architectural Style needs identified along with flexible architectural patterns.

  • Core Security Aspects need to be in the mix from the start.

There are design patterns that support change. Keep in mind, you need to be thoughtful in understanding the software quality attributes and priorities of the stakeholder.

  • Event-Driven Architecture pattern allows for high flexibility and adaptability. The architecture responds to changes by reacting to events, providing a loose coupling between services and enabling asynchronous communication.

  • Strangler Fig pattern allows for incremental replacement of a legacy system by gradually replacing specific parts of the system’s functionality with new applications and services.

  • API-First Design treats APIs as first-class citizens, protecting that services can be replaced/updated without disruption.

  • Microservices Architecture pattern focused on decomposing into small, loosely coupled, and independently deployable services. The benefits are easier scaling, isolated deployments, and technology diversity.

Agile software is built in small increments; agile architecture changes in small, manageable ways over time. Enter the value of continuous feedback!

#DesignForChange #SoftwareArchitecture #DevSecOps #SomethingToNoodleOn

Pic by Robert Ruggiero on Unsplash