Back to Insights
Technology

Software Should Be Designed for the Person Who Will Maintain It

Software Should Be Designed for the Person Who Will Maintain It

The person who builds software today may not be the person maintaining it two years later. Good systems are built so someone else can understand and safely change them.

Ashish Kondhalkar
Ashish Kondhalkar Founder & CTO

Most software is designed around the people who will use it.

That's obviously important.

But there is another person who gets overlooked:

the person who will have to maintain it.

That person may not even be part of the company yet.

They may be the developer who joins two years after the original project was completed.

And they will have to understand what everyone else built.

The original team won't always be there

Software changes hands.

Developers move on.

Companies change vendors.

Teams grow.

Projects get transferred.

Someone who knew every detail of the application eventually stops being available.

That's normal.

Software should be able to survive it.

Clever code isn't always good code

Developers sometimes enjoy solving problems in clever ways.

But cleverness can become a problem when the next developer can't understand it.

A simple solution that is easy to read is often more valuable than an elegant solution that requires a long explanation.

The question isn't:

“Can I make this more clever?”

It's:

“Will another competent developer understand this six months from now?”

Documentation helps, but it isn't enough

Good documentation matters.

But documentation can't compensate for unnecessarily complicated software.

If understanding a simple business rule requires reading a 40-page document, something may be wrong with the implementation.

The code itself should communicate as much as reasonably possible.

Clear naming helps.

Simple structure helps.

Consistent patterns help.

Tests help.

Good documentation fills the gaps.

Maintenance is part of the original design

A system should be built with its future in mind.

That means considering:

  • How will it be tested?

  • How will it be deployed?

  • How will failures be investigated?

  • Where are important business rules?

  • How will dependencies be updated?

  • How will another developer get started?

  • What happens if the original team disappears?

These aren't “later” questions.

They are part of building software properly.

The future maintainer is a real user

We often talk about user experience as though users only mean customers or employees.

But developers are users too.

They interact with the codebase.

They need to understand it.

They need to change it safely.

They need to diagnose problems.

If the software makes all of that unnecessarily difficult, the business eventually pays for it.

Usually through slower development and higher maintenance costs.

Build for the second developer

A useful test is simple:

Imagine the developer who wrote the system disappears tomorrow.

Could another competent engineer take over?

They don't need to understand everything immediately.

But they should be able to figure it out.

They should know where to start.

They should be able to run the application.

They should be able to make a small change without being afraid of the entire system.

That's maintainability.

And maintainability isn't something you add after development.

It is something you design for from the beginning.

Tags maintainability, documentation, software architecture, ownership