Industrial software methodology

Design the logic before the code

Algorithm-driven Development (ADD) is a structured approach that translates client requirements into algorithmic flowcharts, then into acceptance tests — so edge cases are anticipated, teams stay aligned, and defects are caught early.

95% code coverage over 4 years
3,000+ platforms migrated with zero incidents
4 years validated in production at Dassault Systèmes

What is ADD?

Algorithm-driven Development extends test-driven practices by making execution logic explicit before any tests or code are written. Developers model each feature as a flowchart — a visual, executable specification — then systematically derive acceptance tests from every relevant path. ADD operates at the technical level (APIs, services, UI components), not at the level of full business processes.

Where TDD and BDD leave gaps, ADD fills them

TDD and BDD improve quality, but they don't provide a structured way to model execution logic or proactively handle system complexity. ADD makes behavior visible before implementation begins.

Anticipate edge cases

Flowcharts expose every execution path — including rare scenarios often missed in traditional specifications, such as permission checks, invalid states, and unexpected inputs.

Derive tests systematically

Each branch becomes a test scenario. Cyclomatic complexity guides coverage; equivalence blocks reduce redundancy without losing behavioral completeness.

Deliver predictably

Upfront logic modeling reduces late-stage rework and supports a stable delivery cadence — fully compatible with Agile and DevOps workflows.

Three steps, one disciplined workflow

Each flowchart represents the internal logic of a single feature — an API endpoint, a service method, or a UI interaction. One abstraction level per diagram.

Model with flowcharts

The developer translates requirements into a detailed flowchart: decision points, module calls, error handling. Color coding separates local logic, external dependencies, and exception branches.

→ Flowchart algorithm

Extract behaviors

Every execution path is analyzed to identify expected client scenarios. Equivalence blocks optimize the test set — keeping coverage without combinatorial explosion.

→ Acceptance test plan

Write acceptance tests

Tests are written before code using the ATDD Double Loop (RED → GREEN → REFACTOR), starting with the shortest paths. Every future change updates the flowchart first.

→ Tested implementation

Color coding connects design to testing

The same colors used in flowcharts directly inform how acceptance tests are structured.

Blue — Local logic

Instruction or sub-method within the same module. Verify sequential method calls.

Gray — External call

Another module or external service. Mock and verify interactions.

Red — Error / exception

Failure branch. Assert the expected exception and error message.

More than fewer bugs — a better way to work

Beyond defect reduction, ADD changes how teams review, document, onboard, and collaborate. These benefits were observed consistently across both industrial case studies in the paper.

Focused code reviews

Cross-reviewing flowcharts and acceptance tests is more targeted than navigating thousands of lines of production code. Reviewers can spot inconsistencies between intended behavior, modeled paths, and test cases — catching specification and design errors earlier.

Living documentation

Flowcharts evolve with the feature and serve as accessible, up-to-date documentation. Developers unfamiliar with a component can understand its logic and architecture without reading the entire codebase first.

Faster onboarding

New team members gain domain expertise quickly through visual algorithm descriptions. In the industrial study, junior developers also adopted ADD more readily and reasoned more systematically about execution paths and edge cases.

Seamless handovers

When developers rotate mid-project, structured flowcharts preserve design intent and enable continuity. One team delivered across three sprints with different developers — without losing context or quality.

Shift Left quality

ADD contributes to Shift Left by surfacing issues before coding begins. Most production defects trace back to either a misinterpreted flowchart or an incorrect acceptance test — both confined to a small, reviewable part of the cycle.

Agile & DevOps ready

Each flowchart is a self-contained unit of work, improving sprint estimation and reducing scope creep. ADD integrates into CI/CD pipelines through automated acceptance tests derived from the algorithm model.

ADD as a specification layer for AI-generated code

As AI tools generate more code and tests from natural-language prompts, ambiguity and incomplete behavioral assumptions become a real risk. ADD addresses this by shifting the developer's effort from writing code directly to specifying behavior precisely through flowcharts.

  • Structured input for AI — flowcharts explicitly describe execution paths, decision outcomes, edge cases, and error scenarios
  • AI generates, tests validate — AI tools can produce candidate acceptance tests per path; developers review and validate them
  • Behavioral conformance check — derived tests verify that AI-generated or manually written code conforms to the modeled behavior

The flowchart constrains what the system should do. The tests verify that the implementation — human or AI — actually does it.

Where ADD delivers the most value

✓ Best suited for

  • Complex business logic and API orchestration
  • Migration workflows and critical system transformations
  • Features with many decision points and error paths
  • Teams that need traceability between specs, tests, and code

○ Less suited for

  • Simple CRUD operations with minimal branching
  • Exploratory prototypes with unstable requirements
  • Very small changes where upfront modeling outweighs the benefit

ADD vs TDD vs BDD

ADD doesn't replace TDD — it strengthens it by adding an algorithmic modeling step upstream.

Criteria TDD BDD ADD
Starting point Unit test Behavioral scenario (Gherkin) Algorithmic flowchart
Explicit logic modeling No (implicit in tests) Partial (behavioral level) Yes (complete flowchart)
Edge case anticipation Manual, after the fact Via stakeholder collaboration Systematic, at design time
Test derivation Ad hoc Given / When / Then scenarios Execution paths + equivalence blocks
Level of abstraction Code unit User behavior Technical component (API, service, UI)

Industrial results

ADD was evaluated over four years at Dassault Systèmes across two development teams working on the 3DEXPERIENCE® platform.

95%
Code coverage sustained over 4 years (Team 1)
0.089
Defects per KLOC post-release (Team 1)
3,000+
Enterprise platforms migrated with zero production incidents
Avg. bugs per high-complexity function with ADD (vs. 9 with test-last)

Based on empirical data from internal ALM and CI/CD systems. The full methodology, metrics, and limitations are described in the SSRN preprint below.

What practitioners should know before adopting ADD

These lessons come directly from four years of industrial practice across two teams. They reflect what worked, what didn't, and how to make ADD stick as a team routine — not just a notation.

  1. Treat flowcharts as active design artifacts

    Their value depends on completeness and on keeping them aligned with tests and code. They are not optional documentation — they are the specification.

  2. Use visual conventions consistently

    Color coding for local logic, external calls, and error branches connects design decisions to testing decisions and makes cross-reviews faster.

  3. Balance coverage with scalability

    Systematic test derivation can produce many tests. Equivalence blocks and representative paths avoid redundant acceptance tests while preserving coverage of distinct behaviors.

  4. Start with high-complexity, high-risk features

    ADD delivers the most value where execution paths, edge cases, API orchestration, and error handling must be clarified before implementation. Introduce it incrementally — not on the entire codebase at once.

  5. Leverage flowcharts for knowledge transfer

    They support developer rotation, onboarding, and continuity when team composition changes — without requiring newcomers to navigate large portions of production code first.

  6. Sustained adoption requires active reinforcement

    Review meetings, coaching, monitoring of method application, and shared ownership of flowcharts and tests are essential. When reinforcement drops, partial or inconsistent use follows — and so do the benefits.

Key takeaway for practitioners: ADD is not just a notation or documentation practice — it is a team-level engineering routine that requires continued support until it becomes part of regular development work.

Common questions

Who is ADD for?

Development teams building complex logic: APIs, service orchestration, migrations, and critical workflows. It's less suited to simple CRUD or exploratory prototypes.

Do non-developers need to read the flowcharts?

No. Flowcharts are created by developers. They can optionally serve as visual aids for client or QA communication, but that's not required.

How do code reviews work with ADD?

Peers review the flowchart and its acceptance tests before or alongside the implementation. This is faster and more focused than reviewing raw production code — reviewers validate behavior, paths, and test alignment in one pass.

How does ADD help with onboarding?

Flowcharts give new developers a visual map of feature logic and architecture. They can understand what a component does and how it fits together without first reading thousands of lines of code.

How does ADD relate to AI-assisted development?

A precise flowchart acts as structured input for AI-generated tests or code. The derived acceptance tests then serve as a behavioral conformance check — ensuring AI output matches the specified execution logic.

What is the main limitation?

ADD's effectiveness depends on diagram completeness. A scenario not modeled in the flowchart won't be designed for or tested. Team discipline and regular reviews are essential.