Haji Omer Sheno
Haji Omer ShenoHaji Omer Sheno
Back to blog
September 11, 20264 min read

I Don't Build Software Just to Write Code

Digital HealthSoftware EngineeringHealthcare TechnologyEthiopiaSystem ArchitectureHOROO Innovations

The Difference Between Building Software and Solving a Problem

There is an important difference between building software and solving a problem.

They are related.

But they are not the same thing.

A developer can successfully build an application and still fail to solve the organization's problem.

This is one of the most important lessons I have learned from working on real-world systems.


The Code Can Be Perfect and the System Can Still Fail

Imagine a hospital asks for a new digital system.

Why?

This is why software engineering is more than programming.


Start With the Workflow

Before designing a system, I want to understand the workflow.

For example:

These questions can reveal problems that are invisible when looking only at a list of software features.


Features Are Not the Same as Solutions

A requirements document might say:

But those are features.

They do not automatically describe the real problem.

The real problem might be:

Patient information is being entered multiple times.

Or:

Financial transactions cannot easily be reconciled.

Or:

Pharmacy stock information is not available to management.

Or:

Insurance information is disconnected from service delivery.

Those are operational problems.

The software features should exist because they solve those problems.


Healthcare Makes This Even More Important

Healthcare systems are particularly sensitive to workflow design.

A small design decision can affect:

This means a developer working in healthcare needs to think beyond code.

And you need to understand the environment in which the software will operate.


Local Context Matters

Building software in Ethiopia also comes with its own realities.

A solution that works perfectly in one environment may need significant adaptation in another.

This is why I believe local software development should not simply copy solutions from elsewhere.

We should learn from global technology while designing for local realities.


What I Try to Build

When I approach a project, I try to think in this order:

1. Problem

What is actually going wrong?

2. People

Who experiences the problem?

3. Workflow

How does the organization currently operate?

4. Data

What information is created, changed, and consumed?

5. Solution

What should the digital system actually do?

6. Technology

Which architecture and technologies are appropriate?

7. Deployment

How will the system work in the real environment?

8. Improvement

What do users teach us after deployment?

This approach changes the role of the developer.

You are no longer simply receiving requirements and writing code.

You become part of the problem-solving process.


The Developer's Real Responsibility

I believe a strong software engineer should be able to ask:

Why?

Not only:

What feature do you want?

If someone asks for a dashboard, ask:

What decision will the dashboard help you make?

If someone asks for a report, ask:

What problem will the report help you solve?

If someone asks for automation, ask:

What manual process are we trying to improve?

Those questions often lead to better systems.


My Approach Going Forward

My goal is to continue building systems that solve practical problems in healthcare and business.

But one thing will remain:

Organizations will still have problems that need to be understood and solved.

That is where I want my work to remain focused.

Not technology for technology's sake.

But:

Problem → Understanding → System → Deployment → Impact.

That is the kind of engineering I want to practice.

— Haji Omer Sheno