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’.

As a profession we have started to show some real care for our users. It is hard work to question your assumptions about what your users really need. 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 commercial software that works, and is genuinely about the needs of its users. And a world of open source software that isn’t just about the techie point of view.

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

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.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. We will eventually reach the end of that road though.

Who knows, perhaps natural language processing, AI and AR/VR will provide some answers by way of 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.

And then there’s changing the world at large.

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?

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?

Tell me your answers

 

(Last updated April 7th, 2017)