Software Engineering

Software engineering is the application of a systematic, disciplined, quantifiable approach to the design, development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software. -- IEEE

Is often said that software is eating the world, software is needed on almost every industry, in every business and even now inside our bodies operating devices like insulin pumps and peace makers.

And yet Software engineering as a discipline is still not well defined, it has proven difficult to tasks, in fact in many cases Software Engineering is not considering a real Engineering discipline.

Is important that we start we a solid, comprehensive and agreed definition of Software Engineering; as a starting point we can take the Institute of Electrical and Electronics Engineers (IEEE) definition described in the Software Engineering Body of Knowledge.

Knowledge Areas

According to the Software Engineering Body of Knowledge (SWEBOK) standard the following are the recognized knowledge areas within the field of software engineering:

1. Software Requirements

Software requirements is a field within software engineering that deals with establishing the needs of stakeholders that are to be solved by software.

2. Software Design

Software design is the process by which an agent creates a specification of a software artifact, intended to accomplish goals, using a set of primitive components and subject to constraints.

3. Software Construction

Software construction is the detailed creation of working meaningful software through a combination of coding, verification, unit testing, integration testing, and debugging.

4. Software Testing

Software testing is an investigation conducted to provide stakeholders with information about the quality of the software product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation.

5. Software Maintenance

Software maintenance in software engineering is the modification of a software product after delivery to correct faults, to improve performance or other attributes

6. Software Configuration Management

In software engineering, software configuration management is the task of tracking and controlling changes in the software, part of the larger cross-disciplinary field of configuration management.

7. Software Engineering Management

Engineering management is a career that brings together the technological problem-solving ability of engineering and the organizational, administrative, and planning abilities of management in order to oversee the operational performance of complex engineering driven enterprises.

8. Software Development Process

Software Development Process is the process of dividing software development work into distinct phases to improve design, product management, and project management.

9. Software Quality

Software quality refers to two related but distinct notions:

  • Software functional quality reflects how well it complies with or conforms to a given design, based on functional requirements or specifications. That attribute can also be described as the fitness for purpose of a piece of software or how it compares to competitors in the marketplace as a worthwhile product. It is the degree to which the correct software was produced.
  • Software structural quality refers to how it meets non-functional requirements that support the delivery of the functional requirements, such as robustness or maintainability. It has a lot more to do with the degree to which the software works as needed.

10. Software engineering models and methods

Software engineering is the application of engineering to the development of software in a systematic method.

11. Software engineering professional practice

Software engineering professionalism is a movement to make software engineering a profession, with aspects such as degree and certification programs, professional associations, professional ethics, and government licensing.

12. Software engineering economics

13. Computing foundations

14. Mathematical foundations

15. Engineering foundations


The following is a non-exhaustive list of Software Engineering sub-disciplines that I consider both emerging and extremely interesting.


I like to think about Ecommerce software development as its own particular sub-discipline within the field of software engineering, traditional ecommerce development has been considered just web development but in ever moving, ever growing industry like ecommerce; there is too much specific domain knowledge needed in order for engineers to be effective at their job.

Knowing the basics of web development is no longer enough for being an effective ecommerce engineer; when we break it down there are many domains inside of the ecommerce field that a developer must be familiar with:

Financial Technology (FinTech)

External Links