clement13.net
Original photo: A ship carpenter’s workshop
Description
A ship carpenter’s workshop
Source
Christoph Braun · original page
Licence
CC0 Public domain
Original photo, unretouched. The background is a version of it stylised by the site.

Matrix: Application maintenance

How the installed product is maintained: defects, fixes, versions, technical debt, compatibility, third-party components, knowledge, end of life.

≈ 11 min readReading
Scope

The life of the installed product: handling of defects, fixes and maintained versions, numbering and release notes, technical debt, compatibility and version upgrades, third-party components and libraries, technical knowledge and documentation, end of life. The planning of enhancements falls under the "Project management" theme, and getting changes into production under the "Deployments" theme.

8 dimensions, six levels (0 to 5) and 112 observable criteria. To place your product: open the self-assessment for this theme. The calculation rules are here.

Overview#

Each cell is the level's signature for the dimension.

Dimension0 · Handcrafted1 · Locally tooled2 · Shared3 · Industrialized4 · Integrated and governed5 · Autonomous
Defect managementDefects are fixed as requests come in, with no trace.Defects recorded.Triage and severity.Complete process.Defects analyzed.Defects prevented.
Fixes and supported versionsOnly one state of the product: the fix is applied to whatever exists.Versions identified.Versions maintained.Fixes under control.Fixes tracked.Fixes automated.
Numbering and release notesVersions named by date or by habit, with no rule.Simple numbering.Meaningful numbering.Useful notes.Notes produced from the work done.Automated release communication.
Technical debtDebt piles up without anyone seeing it.Debt perceived.Debt listed.Debt arbitrated.Debt measured.Debt under control.
Compatibility and version upgradesEvery version upgrade is an adventure.Upgrades documented.Upgrades verified.Migration paths.Compatibility managed.Frictionless upgrades.
Third-party components and librariesThe third-party components are whatever a developer once installed.Components listed.Components tracked.Updates planned.Supply chain under control.Dependencies monitored.
Technical knowledge and documentationHow the product works is known to one person.Personal notes.Technical documentation.Documentation maintained.Documentation generated and verified.Knowledge accessible.
End of life and retirementA feature disappears because it broke and no one repairs it.Retirements decided.Retirements announced.Support policy.Retirement supported.Lifecycle steered.
Link with the global model

Dimensions of the global model most concerned: Testing and fixes, Industrialization and deployment, Documentation and traceability and Project management and roadmap.

Fixes and versions#

Defect management#

How is a defect received, qualified, fixed and tracked?

LevelSignatureCriteria to meet
0 · HandcraftedDefects are fixed as requests come in, with no trace.Starting point: no criteria.
1 · Locally tooledDefects recorded.
  • Each defect is recorded in a tool, with a description.
  • A person is assigned to each defect.
2 · SharedTriage and severity.
  • Each defect is qualified: severity, product and version concerned, how to reproduce it.
  • The expected fix time depends on severity.
  • The person who reported the defect is informed of its fix.
3 · IndustrializedComplete process.
  • Each fixed defect is verified by someone other than the author of the fix.
  • An automated test that reproduces the defect is added with the fix.
  • Defects are linked to the versions in which they are fixed.
4 · Integrated and governedDefects analyzed.
  • The backlog of open defects and their age are tracked.
  • Causes (specification, code, data, environment) are analyzed in order to act on the most frequent ones.
  • Defects are handled within the announced times for each severity, and deviations are tracked.
5 · AutonomousDefects prevented.
  • A fixed defect triggers an automatic search for its twin elsewhere in the code.
  • Defects detected in production are automatically attached to the change that caused them.
  • The number of defects per version decreases, and this is tracked.
Effect on the user

A reported defect has a number, an owner and a deadline; you know where it stands.

Fixes and supported versions#

Which versions are maintained, and how is a fix delivered to them?

LevelSignatureCriteria to meet
0 · HandcraftedOnly one state of the product: the fix is applied to whatever exists.Starting point: no criteria.
1 · Locally tooledVersions identified.
  • Each installation knows its version.
  • The versions delivered are kept.
2 · SharedVersions maintained.
  • The list of supported versions is defined.
  • A fix can be applied to a supported version without bringing enhancements into it.
  • A fix made on one version is carried over to the other versions concerned.
3 · IndustrializedFixes under control.
  • Fixes are delivered as numbered, tested versions.
  • An urgent fix follows a shortened process, but keeps the essential tests.
  • The carrying over of a fix to all supported versions is verified.
4 · Integrated and governedFixes tracked.
  • The versions installed at each customer are known, along with the fixes they are missing.
  • The time between the fix and its application at the customer is measured.
  • A fix can be installed hot or with minimal interruption.
5 · AutonomousFixes automated.
  • Fixes are proposed and applied automatically to the installations that accept them.
  • A faulty fix is withdrawn automatically.
  • The fix status of all installations is visible on a dashboard.
Effect on the user

A customer on a supported version receives their fix without having to change version.

Numbering and release notes#

Are versions numbered meaningfully and accompanied by clear explanations?

LevelSignatureCriteria to meet
0 · HandcraftedVersions named by date or by habit, with no rule.Starting point: no criteria.
1 · Locally tooledSimple numbering.
  • Each version has a unique number.
  • A deliverable no longer changes once published under a number.
2 · SharedMeaningful numbering.
  • The numbering distinguishes incompatible changes, compatible additions and fixes (for example major version, minor version, patch).
  • Each version has release notes.
  • The notes list visible changes, fixes and points of attention.
3 · IndustrializedUseful notes.
  • Release notes are written separately for users and for administrators.
  • Incompatible changes are flagged at the top, with the steps to follow.
  • The notes are kept for all published versions.
4 · Integrated and governedNotes produced from the work done.
  • Release notes are largely generated from the requests and fixes delivered.
  • The version number is calculated by rules, not chosen by hand.
  • A history of changes can be consulted by feature and by date.
5 · AutonomousAutomated release communication.
  • The customers concerned are notified automatically of a new version according to its effect on them.
  • The nature of a version (incompatible, compatible) is verified automatically by comparison with the previous one.
  • Customers' questions about a version enrich the following notes.
Effect on the user

A version's number tells you whether installing it is risky, and the notes tell you what changes.

Debt and compatibility#

Technical debt#

Do you know where the shortcuts were taken, what they cost, and when to pay them back?

LevelSignatureCriteria to meet
0 · HandcraftedDebt piles up without anyone seeing it.Starting point: no criteria.
1 · Locally tooledDebt perceived.
  • The areas of the code that the team avoids touching are known.
  • Deliberate shortcuts are flagged at the time they are taken.
2 · SharedDebt listed.
  • Technical debt is entered in the backlog, with a description of its effect.
  • Each debt item has an estimate of its repayment cost.
  • A shortcut taken under constraint is recorded with its planned repayment date.
3 · IndustrializedDebt arbitrated.
  • A share of the time in each period is reserved for repaying debt.
  • Debt is repaid first where the code is modified most often.
  • New shortcuts are reviewed before being accepted.
4 · Integrated and governedDebt measured.
  • Measures (complexity, duplication, test coverage, age of components) are tracked over time.
  • The cost of debt is estimated in lost time and incidents.
  • Debt is one of the decision criteria for a new feature.
5 · AutonomousDebt under control.
  • A debt threshold is set, and exceeding it stops new features.
  • Automated checks prevent certain types of debt from being introduced.
  • Debt decreases from one period to the next, and this is tracked.
Effect on the user

The product remains easy to evolve, and speed is not gained on credit without anyone knowing.

Compatibility and version upgrades#

Is moving from one version to another predictable, tested and reversible?

LevelSignatureCriteria to meet
0 · HandcraftedEvery version upgrade is an adventure.Starting point: no criteria.
1 · Locally tooledUpgrades documented.
  • A version upgrade procedure is written.
  • Backups before an upgrade are planned.
2 · SharedUpgrades verified.
  • The upgrade from one version to the next is tested on a copy of real data.
  • Existing data and customizations are preserved by the upgrade.
  • A post-upgrade check verifies the essential elements.
3 · IndustrializedMigration paths.
  • Upgrade paths between supported versions are defined and tested.
  • Changes to the data structure are applied by replayable scripts.
  • A return to the previous version is planned and tested.
4 · Integrated and governedCompatibility managed.
  • Incompatible changes go through a period in which old and new coexist (add, migrate, remove).
  • Compatibility with customers' reports and extensions is verified before each version.
  • The downtime of an upgrade is measured and reduced.
5 · AutonomousFrictionless upgrades.
  • Upgrades are performed automatically, without noticeable interruption, with automatic rollback on failure.
  • Compatibility is verified automatically for each known customer configuration.
  • Customers choose the date of their upgrade within a defined range.
Effect on the user

A version upgrade loses nothing: no data, no customization, no report.

Third-party components and libraries#

Are the components used known, up to date and free of known vulnerabilities?

LevelSignatureCriteria to meet
0 · HandcraftedThe third-party components are whatever a developer once installed.Starting point: no criteria.
1 · Locally tooledComponents listed.
  • The list of third-party components used is known.
  • The version of each component is noted.
2 · SharedComponents tracked.
  • The list of components is kept in a file managed alongside the code.
  • Abandoned components or components at end of support are identified.
  • The license of each component is known and compatible with the intended use.
3 · IndustrializedUpdates planned.
  • Components are updated at a defined interval, with regression tests.
  • Known vulnerabilities in components are searched for by a tool.
  • A serious vulnerability follows a rapid fix process.
4 · Integrated and governedSupply chain under control.
  • Components are downloaded from approved sources.
  • The complete list of components of each delivered version is kept.
  • A critical component has an identified replacement.
5 · AutonomousDependencies monitored.
  • Security updates are proposed and tested automatically.
  • Customers are informed automatically when a vulnerability affects their version.
  • The average age of components is tracked as an indicator.
Effect on the user

A flaw published in a component is spotted and fixed before it becomes an incident.

Knowledge and life of the product#

Technical knowledge and documentation#

Does knowledge of the product depend on a few people, or is it shared and written down?

LevelSignatureCriteria to meet
0 · HandcraftedHow the product works is known to one person.Starting point: no criteria.
1 · Locally tooledPersonal notes.
  • Technical notes exist on the critical parts.
  • The people who know each part are identified.
2 · SharedTechnical documentation.
  • The general architecture and the dependencies are described in a shared document.
  • Each important component has at least two people able to work on it.
  • Operating and fix procedures are written down.
3 · IndustrializedDocumentation maintained.
  • Technical documentation is stored with the code and updated along with it.
  • Architecture decisions are recorded with their rationale.
  • A person joining the product can build and run it by following the documentation.
4 · Integrated and governedDocumentation generated and verified.
  • Part of the documentation (objects, dependencies, schemas) is generated from the code and the metadata.
  • Outdated documentation is detected in the review of each change.
  • The distribution of knowledge is tracked in order to spot components mastered by too few people.
5 · AutonomousKnowledge accessible.
  • The documentation can be queried through an assistant that draws on it.
  • Questions put to the team automatically improve the documentation.
  • Knowledge is passed on through a proven onboarding path.
Effect on the user

The departure of one person blocks neither a fix nor an enhancement.

End of life and retirement#

How do you retire a feature, a version or a product without surprises for users?

LevelSignatureCriteria to meet
0 · HandcraftedA feature disappears because it broke and no one repairs it.Starting point: no criteria.
1 · Locally tooledRetirements decided.
  • Retirement decisions are made explicitly.
  • The users of the retired feature are sought out.
2 · SharedRetirements announced.
  • A retirement is announced with advance notice and a date.
  • An alternative or a set of steps to follow is offered.
  • The retired feature is flagged as deprecated during the notice period.
3 · IndustrializedSupport policy.
  • A written policy defines the support duration of each version.
  • The end-of-support date of each version is communicated as soon as it is published.
  • The use of features being retired is measured in order to adjust the notice period.
4 · Integrated and governedRetirement supported.
  • Customers using a version at end of support are contacted with a migration plan.
  • The data of retired features is kept or exported according to a defined rule.
  • Obsolete code and data are actually deleted after the planned period.
5 · AutonomousLifecycle steered.
  • Little-used features are identified automatically and proposed for retirement.
  • Migrations to the alternatives are tooled for common cases.
  • The cost of keeping each feature is known and feeds retirement decisions.
Effect on the user

A retirement is announced, explained and supported; no one discovers that a feature has disappeared.

Origin of the criteria

The dimensions are inspired by the references cited below; the levels and criteria are an original synthesis, not a reproduction of a framework. They are offered for discussion and adaptation, not as authoritative.

Sources and verification#