How to Make Software that Doesn’t Suck a Lot

April 5th, 2017

A brief overview about the State of Things in the software industry, from a practical maker & doer point of view.

The software developer community have gradually woken up to the sweet sound of the letters ‘U’ and ‘X’. User. Experience.

As a profession we have started to show some real care for the people who use our products.

It is hard work to question your assumptions about what your users really need. So it’s genuinely encouraging to see our work becoming more and more relevant to our users.

There’s still TONS to learn though.

Let’s build products with software that works.  The need for systems that are about the needs of the actual people using them continues to be ginormously huge.

Conversely, there are still lots software project managers in the wild, telling themselves they have their ‘requirements’ right, never having met any actual users. This isn’t getting nearly the amount of attention it needs e.g. in our educational systems. The standard we should be aiming for is informal ‘hallway’ usability testing becoming part of the culture. 

Design challenges

The paths of UX, mainly User Centered Design and Participatory Design, are slowly getting integrated into the commercial world. There’s simply no entry to new markets without the level of quality users have come to expect.

The challenge of integration vs. modularity is still largely unsolved though.1 How do we deliver users both:

  • the freedom to NOT think too much about technical details,
  • AND the freedom to change everything they do want to?

Or should we just keep building an endless array of apps that fulfill needs for various separate user silos? Is that seriously all we are capable of?

As long as we just want more apps, DSLs and flexible architectures may help us build those for varied needs. However, it seems that a smoother path to learning from just using simplistic apps to becoming an active builder of electronic experiences should be possible.

Who knows, perhaps natural language processing, AI and AR/VR will provide some answers by way of more integrated experiences.

Architectural challenges

Slowly, JS ecosystems are maturing up to a point where the browser as a platform becomes more and more ubiquitous. Meanwhile, we already have a rich ecosystem of web, desktop, and industrial development stacks.

To build robust software, you do need the technical skills. On top of that, there needs to be certain amount of discipline in your thinking to be able to form your software architecture, based on real world requirements, into a coherent whole.

Conceptual modeling languages such as Concept D or ER are my tool of choice for robustly understanding existing organizational or systems constraints. They help understand even complex conceptual systems and their inter-dependencies in a systematic way. They make it possible to know that the system you are building is the same one your users are talking about.

Once you have a shared language of thinking, it typically becomes much easier to construct, say, object oriented architecture and relational databases, and eventually, apps.

On a more practical note though, I really like the Joel test. 🙂

And then there’s changing the world at large.

Alongside commercial software, we need a world of open source software that isn’t just about the techie point of view.

How do we build ecosystems that don’t force consumers to buy more devices, more CPU and memory every couple of years, just to remain active members of society?

On larger scale – What kind of a society do we ultimately want to be building? How do we use all this power to become more inclusive, not more exclusive? Do we still care about freedom of speech, or privacy? Can we afford not to?

Can we build cultures where technology really supports the endeavors of societies at large? One where we’re not constantly lost in a sea of cute little apps and just trying to get everything to work together?

Tell me your answers


(Last updated April 7th, 2017)