Software Engineering is not easy. Requirement Engineering is difficult. Designing is difficult. Programming is difficult. This is all complicated further by the fact that as Software Engineers, we are often thrown from domain to domain and expected to create perfect Software. In the face of such difficulty, how can we ever hope to succeed?
The answer is by building on top of a solid foundation. Just like a building needs a solid foundation in order to stay standing, such does a Software product. And just like a larger building requires a stronger foundation, a larger, more complex Software product requires a more well designed foundation. In fact, this analogy can be made across many other things such as businesses, careers, relationships, bridges, etc.
So what do I mean when I talk of a solid foundation for Software Engineering? What I’m talking about is more than just a well designed infrastructure, such as using design patterns. Its also more than studying Computer Science concepts in order to build concepts up from them. What I mean is that you need to develop a solid practice that will not only support your code, but all other parts of Software Engineering, including gathering requirements, communicating with stakeholders, designing your product, implementing it, and finally, maintaining and debugging it. As a solid base, I propose the Software Engineering Tripartite.
Software Engineering Tripartite
The Software Engineering Tripartite helps you succeed in Software Engineering by focusing on three core concepts: Agile, Software Craftsmanship, and DevOps. These three concepts map pretty well to three others pretty well known. Known as the Triangle of Success, these include Atittude, Behavior, and Technique.
Agile (and my favorite, Scrum) can be seen as describing your Behavior. This is the systematic approach, or step-by-step plan for reaching your goals. Agile teaches us many great practices that if followed, will help reveal issues and lead toward solutions more quickly.
Software Craftsmanship describes your Attitude. You can read more about Software Craftsmanship via its manifesto. Software Craftsmanship tells us that we should treat Engineering as professionals, creating solutions you will be proud of, writing good code, and thriving always for quality. Following the guidelines of Software Craftsmanship will help ensure that your dealings with stakeholders and your processes in Agile will be positive.
DevOps describes your Technique. By setting up a DevOs pipeline, you are enabled to successfully apply quality and to quickly develop software and get it in front of the customer for feedback, without this constant feedback (with likely refactoring) loop slowing you down.
These three concepts fit very naturally together. For example, Software Craftsmanship encourages quality code. One way to achieve this is through testing. Agile will give you the framework to develop acceptance tests with your stakeholders, so that you know the quality code you create actually solves the stakeholders needs. Finally, your DevOps pipeline will allow you to painlessly execute your test quickly and put your code in to an environment where your stakeholders can see it and provide feedback, completing the loop, and taking full advantage of the Software Engineering Tripartite.