Module 1: Foundations of Software Engineering
1.1 What Is Software Engineering and Why Does It Matter?
What You Will Learn
By the end of this lesson you will be able to explain the difference between "coding" and "software engineering" in your own words, describe why structured processes matter when building programs that real people depend on, and identify the key qualities that make software reliable and maintainable.
Beyond Just Writing Code
Many people think software engineering is simply "writing code." While coding is an important skill, it is only one part of a much larger picture. Imagine you want to build a house. You could buy bricks and cement and start laying walls, but without a plan, a budget, an understanding of who will live there, and inspections along the way, the house might collapse or fail to meet the family's needs. Software engineering is the disciplined approach to building software so that it works correctly, can be improved over time, and serves the people who use it.
In Zambia, a self-taught developer might write a Python script to calculate prices for a market stall. That is coding. But if that same person is hired to build a mobile-money agent management system for a company in Lusaka, they need software engineering. The system must handle thousands of transactions, protect sensitive customer data, work when the internet is slow, and be updated when ZRA tax rules change. Building that system requires planning, design, testing, documentation, and teamwork — not just typing code into an editor.
What Is Software Engineering?
Software engineering is the application of engineering principles to the design, development, maintenance, testing, and evaluation of software. It treats software creation as an engineering discipline rather than an artistic craft. This means we follow systematic methods, use proven tools, measure quality, and document our decisions so that other people can understand and improve our work.
The term was first coined in the 1960s when people realised that writing large programs without structure led to disasters: projects ran over budget, software crashed, and maintenance became impossible. Today, software engineering includes requirements gathering, system design, coding, testing, deployment, and ongoing maintenance. It also involves understanding the business context, user needs, and ethical responsibilities.
Key Qualities of Good Software
Not all software is equal. Good software engineering produces systems that share these qualities:
- Reliability — The software performs correctly under expected conditions. A ZESCO token purchasing app that crashes when network latency is high is unreliable.
- Maintainability — Other developers can read, understand, and modify the code months or years later. Clear naming, comments, and documentation make this possible.
- Scalability — The system can handle growth. A bus-ticket booking app that works for ten users but fails for a thousand needs better engineering.
- Usability — Real people can use it without frustration. A farmer in Mongu should be able to check crop prices on your app without calling a nephew for help.
- Security — Sensitive data is protected. An app that stores NRC numbers or mobile money PINs in plain text is dangerous.
Worked Example: The Informal System
Mr Mutale runs a small hardware shop in Kalomo. He keeps stock records in a notebook. When a customer asks if he has roofing sheets, he walks to the back store and checks. This "system" works for one shop, but it has problems:
- Only Mr Mutale knows where everything is recorded.
- If the notebook is lost in a rainy season flood, the records disappear.
- He cannot quickly see which items are running low.
- His son, who studies in Lusaka, cannot help manage stock from a distance.
A software engineer would not simply write a program. They would first interview Mr Mutale, understand his daily routine, design a simple database, create a user-friendly interface, test it with real data, train Mr Mutale to use it, and plan for backups. That complete process is software engineering.
Try It Yourself
- Think of a small business or organisation you know in Zambia. Write down three problems they face that software could solve.
- For each problem, identify whether a simple script would be enough, or whether a full software engineering process is needed. Explain why.
- Search online for one news story about a software failure (for example, a website crash or data breach). Write two sentences describing what went wrong and how better engineering might have prevented it.
- List the five qualities of good software from this lesson. Next to each one, write a real Zambian example where that quality matters.
Key Terms
- Software engineering — the disciplined application of engineering principles to design, build, test, and maintain software systems.
- Coding — the act of writing instructions in a programming language; one part of software engineering.
- Reliability — the ability of software to perform correctly and consistently under normal conditions.
- Maintainability — how easily software can be understood, modified, and extended by other developers.
- Scalability — the capacity of a system to handle increased workload or growth without failing.
Summary
Software engineering is far broader than coding. It is a structured discipline that ensures software is reliable, maintainable, scalable, usable, and secure. Whether you are building a simple tool for a local shop or a national payment platform, the principles of software engineering help you deliver something that works, lasts, and serves real people well.