# What is software engineering
Software engineering is not the same as software development. Here's why.
![[What is software engineering - cover image.png]]
In this article, I'll share my personal take on the difference between software development and _software engineering_ (SE). It is a personal opinion, so take it with a grain of salt.
This content is part of my [Dev Concepts series of books](https://dev-concepts.dev/).
## So what is it about?
Many people may tell you that both terms refer to the same concept. Personally, I don't agree. The way I see things, software development is the "what" (i.e., the activity) and software engineering is _broader_; it corresponds to the "what" _and_ the "how" (i.e., the _process_, the approaches, the methodologies, etc).
TIP: Before going any further, I want to clearly state that the term "engineering" might be wrongly interpreted. Software engineering takes inspiration from engineering and tries to apply similar structured approaches to software development, but fundamentally, Software development/engineering is and will remain a _creative_ endeavor. The software world is complex. Even if we try to apply engineering techniques to professionalize the way we work, it is hard to predict software development time, to provide verifiable proof that a piece of software does what it should be doing, etc.
I like the definition of the IEEE standards body:
> _Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. —_ IEEE 610.12-1990
To create software, we perform various activities, and _how_ we approach those activities has a _huge_ impact on the results and on the overall quality. Writing code is only a part of the story. There are many more activities around coding. For instance, before coding, we need to understand user needs (i.e., their requirements). Then, we need to clarify the business rules (e.g., is X accepted or not, when, how, _why_), the workflows (e.g., what happens before/after X), the data models (i.e., what concepts/data will the application manipulate), the data flows, etc. Still before coding, we also need to _architect_ and _design_ the solution so that it is built on solid grounds.
The coding part itself is also critical of course, and there are many dimensions/things to take care of. Security is also something of the utmost importance. Finally, once code has been written for an application, it needs to be built, tested/validated, released, deployed, monitored, maintained, etc. My [Dev Concepts series of books](https://dev-concepts.dev/) as a whole discusses those topics.
Luckily, there's actually a generally accepted _standard_ defining a set of _phases_ for software development projects. It is called the Software/System Development Life Cycle (SDLC). Personally, I think that all software developers should clearly understand the SDLC and apply it in their projects, whether big or small.
Next to the software development phases, there are other things to consider like the software development approaches/methodologies (e.g., Agile, XP, etc) and project management techniques (e.g., PMBOK), which greatly impact the way we work, and collaborate with each other.
To finish this short post, I'll leave you with a wonderful quote from Margaret Hamilton, one of the pioneers of software engineering:
> Software during the early days of this project was treated like a stepchild and not taken as seriously as other engineering disciplines, such as hardware engineering; and it was regarded as an art and as magic, not a science. I had always believed that both art and science were involved in its creation, but at that time most thought otherwise. Knowing this, I fought to bring the software legitimacy so that it (and those building it) would be given its due respect and thus I began to use the term “software engineering” to distinguish it from hardware and other kinds of engineering; yet, treat each type of engineering as part of the overall systems engineering process. When I first started using this phrase, it was considered to be quite amusing. It was an ongoing joke for a long time. They liked to kid me about my radical ideas. Software eventually and necessarily gained the same respect as any other discipline. — Margaret Hamilton, Lead software engineer of the Apollo Project
## Conclusion
In this short article, I've introduced the notion of software engineering. It's just an idea, a simple _concept_. And that's the magic; if you learn the concepts one by one, then you'll quickly become one of us, a software crafter. It's not that hard; it's like everything, it just takes time.
That's it for today! ✨
LINK:
- [[The Enduring Value of Timeless Concepts (Article)]]
- https://www.dsebastien.net/the-value-of-timeless-concepts//
LINK:
- [[Organize Everything With The LIFT principle (Article)]]
- https://www.dsebastien.net/2022-04-26-lift//
LINK:
- [[How to build a Product - From idea to code (Article)]]
- https://www.dsebastien.net/2022-01-25-product-development-process//
LINK:
- [[How to use Tailwind with Svelte and Nrwl NX (Article)]]
- https://www.dsebastien.net/2021-10-18-svelte-tailwind-nx//
LINK:
- [[Knowii Community]]
- https://www.store.dsebastien.net//product/knowii-community
## Related
- [[What is software development (Article)]]
- [[What is the difference between software developers, engineers, coders, and programmers (Article)]]