I started a few years ago a few small projects to explore various ideas related to software design. I wanted to learn about functional programming in various languages, about property based testing, or about alternatives to microservices.
Today I did the opening keynote for the second day of I T.A.K.E. Unconference 2018. It’s about how other designers learn and become better designers, and what we can take from them.
I got the idea of Usable Software Design through a number of conversation while seeking to define what is good software design. Within this process, I realized that software design is the code structure, that developers are the users of software design and that we can apply UX techniques to improve their experience, with similar gains as for usability.
How many design alternatives have you tried before picking your solution? If you are a code designer, I expect your answer to be very close to 1. Most other designers would find this unthinkable.
I’m very interested in applying general design principles to software design. I am convinced that software design is just design applied to a specific material: code. Since design as a discipline is thousands of years old (the pyramids were designed) while software as we know it today is only a few decades old, I find it obvious that there’s a lot to learn from it.
There are many ways to look at programming. Some people do it to make a living. Others want to see things working fast and hack it away. Others believe in building a profession from programming and thus seek practices and submit themselves to challenges that expand their views.
This is a long due blog post. I wrote it before the series of blog posts on Usable Software Design (first, second and third) but due to a strange series of events (including totally forgetting that I wrote it) is published after them. In a sense, the ideas from this blog post are superseded by the series on Usable Software Design. In many other senses, it contains a ton of background information useful to people who want to get a better grasp of Usable Software Design.