Assess Maintainability Before Hiring

Software maintainability becomes a serious business concern when your original developer leaves, you change development companies or a new supplier tells you the existing software needs to be rebuilt. You may have invested years of development and substantial money into a system that now supports important business operations.

The question is whether another capable developer can understand, maintain and improve that software without starting again. Before committing to a rebuild or accepting an expensive proposal, you need evidence about the condition of the existing code, the skills required and the realistic options available.

Takeaways

  • Software maintainability depends on code, knowledge, development practices and the capability of the receiving team.
  • Missing access or unfamiliar technology should not automatically be mistaken for poor code quality.
  • A controlled software change can provide useful evidence about takeover difficulty and risk.
  • Supporting, repairing or gradually replacing software may be preferable to a complete rebuild.
  • Independent assessment can help management challenge recommendations and make evidence-based investment decisions.

Table Of Content

What Software Maintainability Really Means

Software maintainability describes how readily software can be understood, corrected and changed while continuing to perform its intended functions.

For a business, that means another suitably qualified developer should be able to investigate problems, make necessary changes, test the results and release updates without an unreasonable level of effort or risk.

It does not mean that every developer should immediately understand every part of the system.

Software developed over several years will contain business rules, technical decisions and dependencies that take time to learn. A replacement developer may need a reasonable familiarisation period before becoming productive.

The important distinction is between a system that requires some learning and one that is genuinely difficult to maintain.

Maintainability Is More Than Code Quality

Good code quality helps, but maintainability also depends on the development environment, testing arrangements, documentation and the skills of the people responsible for the software.

A relatively simple application can be difficult to maintain if nobody knows how to build it, its dependencies are unavailable or the organisation lacks the necessary access.

Conversely, a complicated application may remain maintainable when its structure is understood, testing is reliable and experienced developers can make changes safely.

The international standard ISO/IEC 25010:2023 provides a software product quality model that includes maintainability. It offers a useful reference for evaluating software quality without relying entirely on personal opinions about coding style.

For business leaders, I would translate maintainability into four questions:

  1. Can a new developer understand how the important parts work?
  2. Can they make a necessary change without excessive difficulty?
  3. Can they test whether the change works and has affected anything else?
  4. Can the business release and support the updated software safely?

Positive answers provide stronger evidence than simply being told the code is good.

Old Software Is Not Always Bad Software

Software age is not a reliable measure of maintainability.

An application developed ten years ago may still perform its intended purpose efficiently. It may have supported business growth, accumulated valuable business logic and required relatively little maintenance.

A newer application may already suffer from poor design, inadequate testing or rushed development.

I would be cautious about recommendations based primarily on the age of the technology or the personal preferences of an incoming development team.

An older programming language or framework can create genuine problems when it loses security support, becomes incompatible with essential infrastructure or requires skills that are difficult to obtain.

Those concerns deserve investigation. They do not automatically establish that rebuilding the entire application is the right response.

Business executives and a technology consultant reviewing the maintainability of existing software.
Assessing Software Maintainability

Separate Access From Technical Capability

Before asking whether someone can maintain the software, establish whether they have everything needed to assess it properly.

A new developer might be told that an application is difficult to maintain simply because essential information or access has not been provided.

That is a different problem from the software itself being poorly designed.

Can the New Developer Access the Code?

Start with the source code repository, where the application’s code and development history are normally maintained.

The receiving developer may need access to:

  • The current source code and relevant branches.
  • Build instructions and software dependencies.
  • Development and testing environments.
  • Database structures and relevant integration details.
  • Automated testing and deployment processes.
  • Architecture information and technical documentation.
  • Known defects and outstanding technical work.

The business should also establish who controls the repository and who can grant the appropriate permissions.

For example, GitHub’s repository role documentation distinguishes between different permission levels. Being able to view code is not equivalent to having the authority required to administer the repository or manage development activities.

An incoming developer may not require every administrative permission to perform an assessment. The access should match the agreed work and security requirements.

If important access is missing, resolve or document that limitation before drawing conclusions about maintainability.

Is Important Knowledge Missing?

An existing developer may understand details that are not immediately apparent from the source code.

Perhaps a customer billing process depends on an unusual commercial rule, or a particular integration was implemented to work around a supplier limitation.

Without that context, a replacement developer could interpret an intentional design decision as an error.

The knowledge may be recoverable through discussions with employees, existing records, configuration files, test cases or the application’s behaviour.

Missing knowledge increases the effort required to take over a system. It does not necessarily make the system technically unmaintainable.

Where knowledge remains concentrated in one person, a Key Person Technology Risk Review may help examine the wider organisational dependency.

Does the New Team Have the Right Skills?

A capable developer is not automatically experienced in every technology.

Someone specialising in modern JavaScript applications may need substantial time to understand a large legacy .NET or Java system. Equally, a developer familiar with business websites may not have the experience required for complex financial transaction processing.

That does not make either developer incompetent.

It means technical capability should match the software being assessed.

Before accepting a judgement that the codebase is unsuitable, ask whether the incoming team has relevant experience with its programming languages, frameworks, databases, integrations and deployment arrangements.

A skills mismatch may be easier to resolve than a software rebuild.

Look for Evidence in the Existing Code

A useful inherited codebase assessment examines whether developers can work effectively with the software, rather than simply producing a list of code quality complaints.

The depth of examination should match the business risk and the decision being considered.

I would start with the areas most relevant to current operational problems and planned development, rather than attempting to inspect every line of code.

Understand the Core Workflows

Identify the functions that matter most to the business.

For a subscription company, these might include customer registration, recurring billing, account changes and service cancellation.

For an automotive business, they could include bookings, vehicle availability, payments and customer agreements.

The developer should be able to trace at least one important business process through the application.

That means understanding where the business rules are implemented, which components interact and what other parts of the system might be affected by a change.

Difficulty tracing a workflow can indicate poor structure, missing documentation or unfamiliarity with the technology.

Further investigation should establish which explanation is most likely.

Examine Testing and Release Practices

Automated tests help developers determine whether a change has broken existing behaviour.

For example, changing a subscription renewal calculation should not accidentally affect cancellation rules or invoice generation.

Not every application will have an extensive automated test suite. However, the receiving team needs a credible way to verify important behaviour before releasing changes.

The existence of tests alone is not enough.

Ask whether the tests can be run, whether they provide useful coverage of critical business functions and whether their results are trusted.

The AWS Well-Architected Framework guidance on testing changes discusses testing application code, configuration, infrastructure and related changes before deployment.

I would also examine whether the deployment process is documented and repeatable.

If software can only be released by someone remembering a complicated sequence of manual steps, maintaining it will involve additional operational risk.

Review Dependencies and Technical Debt

Dependencies are external libraries, frameworks, services and components that the software relies upon.

Some may be outdated but still supported. Others may contain unresolved security vulnerabilities or no longer receive necessary updates.

Technical debt describes compromises in software design or implementation that can make future changes more difficult.

It is common for established software to contain some technical debt.

The useful question is whether that debt is creating an unacceptable business consequence.

Examples include:

  • Routine changes requiring excessive developer effort.
  • Defects recurring because components are tightly connected.
  • Important updates being delayed by incompatible dependencies.
  • Poor separation between business processes.
  • Inadequate testing of critical functionality.
  • Changes affecting unrelated parts of the system.

Each finding should describe the affected business capability and its likely impact.

A report stating that the code is messy is not particularly useful to a CEO.

A report explaining that changing the pricing rules risks disrupting customer invoicing, because both functions share an undocumented component, gives management something concrete to assess.

Diagnose the Real Takeover Problem

A replacement developer struggling with an inherited codebase does not automatically mean the software should be replaced.

There are four common categories of difficulty worth separating.

A Developer Takeover Decision Matrix

ProblemEvidence to look forLikely response
Missing accessUnavailable repositories, permissions, environments or configurationRecover access and establish appropriate control
Missing knowledgeUndocumented business rules, decisions, dependencies or proceduresReconstruct knowledge, document findings and provide familiarisation
Technical limitationsReproducible build failures, unsafe changes, obsolete dependencies or tightly coupled componentsAssess targeted repairs, refactoring or replacement
Capability mismatchIncoming team lacks experience with the language, architecture or operating environmentBring in suitable expertise or revise the team composition

These categories can overlap.

For example, an incoming supplier might lack experience with a particular framework while also discovering that the application has outdated dependencies.

The important point is to avoid treating every difficulty as evidence that the code is beyond repair.

Distinguish Symptoms From Causes

Consider a hypothetical business whose new development supplier says a customer management application is too complicated to maintain.

The supplier estimates that substantial work will be needed to take over the system.

Management should ask what specifically makes it difficult.

Is the code poorly structured? Are important dependencies unsupported? Does the development environment fail to build? Are business rules undocumented? Or is the supplier simply unfamiliar with the technology?

Each answer leads to a different decision.

I would ask the supplier to identify specific examples, explain their consequences and propose reasonable ways to address them.

If the problem is missing knowledge, a focused familiarisation exercise may help.

If the software genuinely cannot be modified safely, further technical assessment may be justified.

The difference matters because the remedies carry very different costs and risks.

Establish What Is Not Yet Known

Sometimes the evidence is insufficient to determine whether the software is maintainable.

That is a valid assessment outcome.

The next step may be a limited investigation with clearly defined questions, rather than a commitment to repair or replace.

A useful assessment distinguishes between:

  • Confirmed technical problems.
  • Missing information.
  • Risks that have not yet been tested.
  • Assumptions requiring validation.
  • Matters outside the assessment scope.

The business should not mistake uncertainty for proof that the software has failed.

Business and technology leaders distinguishing code problems from access, knowledge and skills gaps.
Diagnosing Developer Takeover Problems

Test One Change in a Safe Environment

One of the most useful ways to assess maintainability is to ask a suitably qualified developer to make a representative change in a controlled environment.

The exercise should test whether the team can understand, modify and verify the software without disrupting business operations.

It does not need to involve a major feature or a production deployment.

Choose a Representative Change

Select a small task connected to a real business requirement.

Examples could include correcting a known reporting defect, updating a non-critical calculation or modifying a simple workflow.

Avoid choosing something so trivial that it tells you little about the application.

Equally, avoid selecting a complicated change that introduces unrelated business requirements or requires access to sensitive production information.

The task should be useful, limited and achievable within a clearly agreed assessment scope.

I would prefer a change that exercises a meaningful part of the system, particularly one the business expects to maintain in future.

Run a Controlled Assessment

The receiving developer should follow a practical sequence:

  1. Understand the requirement. Explain the existing behaviour and what needs to change.
  2. Prepare the environment. Retrieve the code, identify dependencies and establish a safe development environment.
  3. Reproduce the current behaviour. Confirm how the relevant function currently works.
  4. Make the change. Modify the appropriate code while documenting unexpected difficulties.
  5. Test the result. Verify the intended behaviour and check for unintended consequences.
  6. Review the outcome. Explain the work completed, time spent, outstanding risks and what was learned.

Where appropriate, the change can be deployed to an approved test environment.

Any production deployment should follow the organisation’s normal change management and approval procedures.

The test should not introduce unnecessary risk simply to prove that a developer can take over the application.

Measure the Effort and Uncertainty

The outcome matters, but so does what happened during the exercise.

Did the developer spend most of the time understanding the system, establishing missing access or correcting genuine defects?

Were the problems caused by the codebase, the environment or unfamiliarity with the technology?

Could the developer explain the change and how it was tested?

The answers provide useful evidence about future maintenance.

A successful test does not prove that the entire application is maintainable. Equally, an unsuccessful first attempt does not prove that it must be rebuilt.

One task is a sample, not a complete technical assessment.

For a complex application, the team may need to examine more than one representative workflow before recommending a major investment.

The purpose is to replace speculation with evidence.

Compare Support, Repair and Replacement

Once the technical position becomes clearer, management can consider the practical options.

There are several ways to continue using an existing application. A complete rebuild is only one of them.

Continue Supporting the Software

If the software is reasonably maintainable, the most sensible option may be to retain it and establish a capable support arrangement.

The incoming developer may need time to understand the architecture and business rules.

That familiarisation has a cost, but learning an existing system is normal when changing development teams.

The business should distinguish reasonable onboarding effort from ongoing problems that prevent effective maintenance.

Continuing with the existing system may preserve working business processes and avoid the risks associated with replacing operational software.

Repair Specific Technical Problems

Some applications are broadly maintainable but contain components that need improvement.

For example, a reporting module may be tightly connected to other business functions, making changes difficult.

A targeted repair might separate responsibilities, improve tests or simplify the affected code.

Developers often call this refactoring: improving internal structure without deliberately changing the software’s externally visible behaviour.

A focused improvement can be appropriate when it addresses a verified problem.

The business should understand what the repair achieves, how the result will be tested and why the investment is worthwhile.

Replace Components Gradually

Sometimes part of an application has reached a point where replacing it is more practical than continually repairing it.

That does not necessarily require rebuilding the entire system.

One option is to replace an isolated business function while the remaining application continues operating.

The AWS guidance on the Strangler Fig pattern describes an incremental approach to replacing functionality in an existing application.

The technique is particularly relevant when a large replacement introduces unacceptable delivery or operational risk.

However, gradual replacement also creates complexity. Old and new components may need to operate together, share data and maintain compatible behaviour during the transition.

It is not automatically suitable for every application.

Consider a Full Rebuild

A full rebuild may be justified when technical limitations are severe, the existing architecture cannot reasonably support essential requirements or maintaining the application is no longer commercially sensible.

Those conclusions should follow a credible assessment.

A rebuild also requires more than recreating the screens users can see.

The existing system may contain years of business rules, integration behaviour, reporting logic, data relationships and exceptions that are poorly documented.

Replacing it introduces decisions about data migration, testing, customer disruption, business continuity and maintaining the existing system during development.

The new application may remove some technical problems while introducing others.

I would want leadership to understand the full scope and uncertainty before approving that level of investment.

Compare the Business Options

OptionMost appropriate whenMain consideration
Continue supportExisting software can be understood and changed safelyAllow realistic onboarding and maintenance effort
Targeted repairSpecific problems are increasing development risk or costFocus improvements on verified constraints
Gradual replacementParticular components need replacing while operations continueManage integration and transition complexity
Full rebuildExisting technology cannot reasonably meet important business needsAssess full cost, migration, continuity and delivery risk

These are alternatives to evaluate, not a predetermined sequence.

The best choice depends on technical evidence, operational requirements, commercial priorities and the organisation’s ability to manage the work.

Challenge a Proposed Software Rebuild

An incoming development company may recommend rebuilding your software.

That recommendation could be entirely reasonable.

The concern is whether it is supported by evidence and whether other options have been seriously considered.

An organisation selling development services has a commercial interest in the proposed work. That does not invalidate its technical judgement, but it is a reason for management to seek clear explanations.

Ask for Specific Evidence

Before accepting a rebuild proposal, I would ask:

  • Which parts of the existing software cannot reasonably be maintained?
  • What evidence demonstrates those limitations?
  • Have the developers successfully built and tested the application?
  • Which problems are caused by missing information or skills?
  • Could targeted repairs address the identified issues?
  • Have the costs and risks of keeping the existing system been compared with replacement?
  • What business capabilities would improve after rebuilding?

If the answers focus on preferred technologies rather than business outcomes, further investigation may be worthwhile.

A statement that the application was built using an old framework is not enough by itself.

A finding that an essential framework has no suitable security support, prevents required changes and cannot reasonably be upgraded provides a more meaningful basis for discussion.

Understand the Complete Cost

A proposal to rebuild should distinguish development costs from the wider costs of replacing operational software.

Management may need to consider the existing system’s ongoing support, new development, testing, integration changes, data migration, user training and transition arrangements.

There is also the possibility that the replacement will require additional work as undocumented requirements emerge.

Do not assume that the quoted development amount represents the complete business investment.

I would also look closely at what will happen if the new project takes longer than planned.

Can the existing application continue operating? Will both systems need maintenance? What happens if the replacement does not meet essential requirements?

These questions deserve answers before the business commits to a major change.

Turn Findings Into a Clear Decision

A technical assessment should finish with a decision that management can understand.

A long list of code quality issues may be useful to developers, but executives need a clear explanation of what the findings mean for investment, operations and delivery.

Request a One-Page Assessment

I would ask for an executive summary covering:

  • Current maintainability: Whether a capable developer can reasonably maintain and improve the software.
  • Evidence: What has been inspected, demonstrated and tested.
  • Main limitations: Which problems materially affect maintenance or future development.
  • Uncertainty: What remains unknown and why.
  • Recommended action: Continue support, repair specific problems, replace components or consider rebuilding.
  • Next decision: What approval, investigation or investment is required.

The assessment should distinguish confirmed findings from professional judgement.

Where further investigation is recommended, it should identify the question being answered and how the result will influence the decision.

That prevents assessments from turning into open-ended technical exercises without a clear business purpose.

Give the New Team a Fair Start

If the decision is to retain the existing software, the receiving developers need an achievable plan.

Allow time to learn critical workflows, understand dependencies and establish development practices appropriate to the system.

Avoid judging productivity solely on the first few weeks of an unfamiliar codebase.

At the same time, make progress visible.

The new team should be able to show what it has learned, which problems it has resolved and what it can now change with confidence.

Where problems continue because of unclear roles, communication or technical direction, Technology Leadership support may help strengthen accountability and decision-making.

The objective is to help capable people succeed, not to assign blame for decisions made years earlier.

Business executive and technology consultant comparing software repair and replacement options.
Choosing Between Software Repair and Rebuild

When an Independent Review Makes Sense

An internal technical team may have sufficient experience to assess the software and recommend a sensible way forward.

Independent advice becomes more valuable when leadership cannot confidently evaluate competing technical opinions or when the financial consequences of making the wrong decision are substantial.

This is particularly relevant when:

  • An incoming supplier recommends rebuilding software developed by another company.
  • Existing developers and replacement developers disagree about maintainability.
  • Management cannot establish why apparently simple changes take so long.
  • Technical debt is regularly used to justify additional expenditure.
  • The business has limited senior technical leadership.
  • Important investment decisions depend on the assessment.

I approach these situations by examining the evidence and understanding the perspectives of the people involved.

The existing developers may have valid reasons for their design decisions. The incoming team may have legitimate concerns. Management needs a fair assessment rather than another opinion based on incomplete information.

A review should identify the real limitations, explain their business consequences and recommend practical next steps.

For an established business dealing with repeated technology decisions, ongoing Fractional CTO support may also be appropriate.

That does not mean every difficult codebase requires executive-level consulting. Sometimes the right answer is simply to engage a developer with the relevant experience and provide a reasonable familiarisation period.

The principle remains people before technology.

Good technical decisions depend on capable people, clear responsibilities, realistic expectations and sound business judgement.

Frequently Asked Questions

Can Any Developer Maintain Our Software?

Not necessarily. The developer needs appropriate experience with the technology, sufficient access and time to understand the application. Difficulty with an unfamiliar codebase does not automatically mean the software is unmaintainable.

How Do We Assess Software Maintainability?

A software maintainability assessment should examine code structure, dependencies, documentation, testing and development processes. A controlled, representative change can provide practical evidence of how readily another developer can work with the application.

Should We Rebuild Old Software?

Not simply because it is old. A rebuild should be supported by evidence that maintaining or improving the existing application is no longer a reasonable option compared with replacement.

What If the New Developer Refuses?

Ask for specific technical reasons and evidence. The issue may involve genuine software limitations, missing knowledge, inadequate access or a mismatch between the developer’s skills and the existing technology.

Is an Independent Review Worth It?

An independent review can be useful when management faces a substantial development investment, conflicting technical recommendations or uncertainty about whether existing software can be maintained. The value comes from making a better-informed decision before committing resources.

Conclusion

Before accepting that your existing software needs replacing, establish whether a suitably qualified developer can reasonably understand, maintain and improve it. If your business is facing conflicting technical advice or a costly rebuild proposal, my independent Software Development Review can help assess the evidence and clarify your options. A sound investment decision starts with understanding the real state of your software maintainability.

Share This Post

Need support with software delivery?

Software projects can quickly run into trouble when priorities are unclear, delivery slows down, or nobody has a clear view of progress.

If you need help getting a software project back on track, improving delivery, or creating greater accountability across your team, take a look at my Project Delivery service or Contact Us to start the conversation.

Iain White Software Engineering Consultant

Successful software delivery is about more than writing good code. It is about turning business priorities into working software without losing control of time, cost or quality.

Iain White has spent decades working with software teams, technology leaders and business owners across projects ranging from new digital products to complex business systems.

He helps organisations understand why delivery is slowing down, where risk is building, and what needs to change to get work moving again.

His approach combines hands-on software experience with project delivery and technology leadership. That means looking beyond individual technical problems to the wider issues affecting priorities, people, processes and decision-making.

Through White Internet Consulting, he helps organisations bring clarity to software delivery, reduce risk and give business leaders greater confidence that their technology projects are heading in the right direction.