All work is design. And in this post we are going to review it from the point of software development.
When I say "Design", I don't mean it from the point of UX Design. That would be a small portion of the work. Neither do I look from the point of view of "Design Thinking" and that would be only about the discovery portion of the work, working to discover what to work on and build upon.
All work is design.
Let's now delve into some details on the above. Every step of the software development process is to evolve incremental understanding of design until it reaches the point where the work can be shipped.
In fact, shipping software alone by itself is not absolute to understanding of design. It just starts the next iteration of validation with included feedback from the shipping to create another cycle of design.
Let us look at a full life-cycle of design in the software development process. By no means is this list meant to be exhaustive. Your design steps might vary based on your context, but this is an example of what iterative evolutionary design could look like:
- Design of the challenge, idea or problem - in order to understand it better, apply several eyeballs to get several perspectives
- Design some common understanding
- Design some potential value areas to focus upon
- Design a large number of solution options
- Design one on or more solutions to pick up to build on
- Design the build, bound each build by designing what is expected from what is being built (often called acceptance tests in ATDD/BDD)
- Design the design (also known as UX)
- Design the architecture (aka Design model)
- Design the standards to which it to build (also known as "Definition of done")
- Design the scenarios to design the overall tests (Acceptance tests)
- Design the overall tests
- Design the understanding of the overall tests by discussions
- Design the smaller tests to build some code (Unit tests)
- Design the smaller test code by writing them
- Design the code to run the designed smaller tests (also known as continuous integration)
- Design the overall code to run the overall tests (also known as continuous delivery)
- Design a Release to customer (manual or continuous deployment process)
- And so on...
As I said your steps might vary, but when you look at it from the "lens" of design, it is all design.