liveBook · Manning

Flexibility

Flexibility is the capacity of a system, design, or process to adapt to changing requirements or conditions without extensive restructuring.

How 9 Manning books explain it

Object-Oriented Software Design in C++

Software flexibility is the ease with which a software system can accommodate new features or changed requirements.

How it is used
Uses flexibility to manage changing requirements, added features, and runtime behavior without spreading modifications through the system.
How deep it goes
Explains trade-offs, change isolation, and strategy refactoring through examples, but stops short of a general measurement method.
Examples
Demonstrates flexibility with sports strategies, runtime venue replacement, and hardcoded ticket enhancements.
What you can do after
Apply it via design principles and the Strategy Design Pattern to isolate variation and substitute behavior at runtime.

Read how Object-Oriented Software Design in C++ explains flexibility →

Practices of the Python Pro

Flexibility is the capacity of software to be adapted to related or similar tasks.

How it is used
Uses flexibility to guide design choices for adapting software, adding features, and changing existing behavior.
How deep it goes
Defines resistance to change and demonstrates decomposition, refactoring, mappings, and extension, without descending into implementation internals.
Examples
Demonstrates conditional-to-dictionary refactoring, feature addition, and reuse of core logic across command-line and mobile interfaces.
What you can do after
Apply it by refactoring rigid conditionals, separating responsibilities, and preparing existing code for localized changes or new behaviors.

Read how Practices of the Python Pro explains flexibility →

Data-Oriented Programming: Reduce software complexity

The degree to which a software system can adapt to changing requirements without requiring changes to its design.

How it is used
Guides data-oriented design toward systems that accommodate changing requirements without changing their overall design.
How deep it goes
Explains flexibility through code-data separation, heterogeneous maps, stateless functions, and explicit safety tradeoffs.
Examples
Uses Watchmen records, JavaScript and Java maps, member database insertion, and Lodash _.at.
What you can do after
Apply it via maps and stateless functions to adapt data representations and select database fields flexibly.

Read how Data-Oriented Programming: Reduce software complexity explains flexibility →

Machine Learning System Design

Flexibility is the capacity of a system to accommodate changes in models, processing steps, features, interfaces, or implementation technologies.

How it is used
Guides inference-system design when models, pipelines, interfaces, and production requirements are expected to evolve.
How deep it goes
Defines flexibility through concrete change categories and architecture guidance, but stops short of implementation details.
Examples
Uses framework conversion, added preprocessing and postprocessing, new features, and additional APIs as flexibility cases.
What you can do after
Operate/configure inference systems that accommodate model and framework changes while preserving existing functionality.

Read how Machine Learning System Design explains flexibility →

Think Like a Software Engineering Manager

Flexibility is the capacity to adapt arrangements, behavior, or decisions to changing needs and circumstances.

How it is used
Adapts working arrangements and leadership practices to employee needs while preserving communication, collaboration, and shared goals.
How deep it goes
Demonstrates flexibility through a workplace scenario and practical measures, stopping short of formal frameworks or technical implementation.
Examples
Uses revised core hours, adjusted manager schedules, work-from-home support, rampback programs, and no-meeting days.
What you can do after
Practice/perform it by gathering feedback, revising rigid policies, and balancing employee choice with collaboration requirements.

Read how Think Like a Software Engineering Manager explains flexibility →

Software Design for Python Programmers

Flexibility is the ability of software to change its behavior or accommodate new requirements without modifying its core implementation.

How it is used
Handles changing requirements and run-time behavior through encapsulation, interfaces, composition, and delegation.
How deep it goes
Explains hardcoding, change isolation, strategy replacement, and complexity tradeoffs through a worked sports refactoring.
Examples
Uses baseball, football, and volleyball strategies, including replacing volleyball’s open-field venue with a stadium.
What you can do after
Apply it via the Strategy Design Pattern to add, modify, or replace algorithm variants with localized code changes.

Read how Software Design for Python Programmers explains flexibility →

API Design Patterns

Flexibility is the property of an interface that allows users or client code to accommodate changes without losing functionality.

How it is used
Frames API design around how safely interfaces can change for their users.
How deep it goes
Defines flexibility through API and GUI contrasts, stopping short of implementation techniques or detailed compatibility strategies.
Examples
Uses an API field rename, GUI button changes, and a comparison of private and public interfaces.
What you can do after
Evaluate/understand why API changes are more brittle than comparable GUI changes.

Read how API Design Patterns explains flexibility →

Shipping Go: Develop, deliver, discuss, design, and go again

Flexibility is the ability of a software system or development process to adapt to changing requirements, inputs, or operating conditions.

How it is used
Guides runtime configuration, incremental delivery, customer learning, and infrastructure adjustment after initial launch.
How deep it goes
Defines configurable behavior, feature hiding, remote settings, and testing practices, but omits implementation mechanics.
Examples
Uses default values, database endpoints, hidden features, digital dashboards, load, special-character inputs, Selenium, and Cypress.
What you can do after
Operate/configure applications remotely, hide unfinished features, and test behavior under changing inputs and conditions.

Read how Shipping Go: Develop, deliver, discuss, design, and go again explains flexibility →

Simple Object-Oriented Design: Create clean, maintainable applications

The capacity of a software design to accommodate variation or alternative implementations without requiring extensive structural changes.

How it is used
Uses abstractions and extension points to absorb feature variation while allowing modules and teams to evolve independently.
How deep it goes
Explains rationale, maintenance consequences, examples, and tradeoffs, but defers implementation details and design-pattern instruction.
Examples
Shows discount extension points, conditional-branch refactoring, payment APIs, and registration APIs as concrete flexibility mechanisms.
What you can do after
Evaluate where abstractions or extension points will reduce future rewrites, then balance their maintenance benefits against added complexity.

Read how Simple Object-Oriented Design: Create clean, maintainable applications explains flexibility →

Related concepts

These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.