We spend far too little effort in these:
-
Availability
We should make tools and services freely and easily available.
-
Accessibility
We should make tools maximally usable by those who are impaired.
-
Standardisation
Having different teams follow standards1 improves learnability of new tools, ease swithcing to alternatives2, as well as interoperability.
-
Usability
Tools that are a not pleasant to use cause needless frustration. We need to build tools that follow usability levels that can also be tweaked according to individual levels, and that in a global way3.
-
Information access
We should have ways of reliably categorizing and ranking useful information, and search engines that presents such information in a way that maximizes comprehension.
-
Migration tooling
We need to be more willing to keep improving foundational software4, to a point we more readily release breaking changes, which implies solid (and easy) migration tooling. This means replacing designs that are not ideal for learning and usability, instead of being stuck due to large ecosystems depending upon such designs.
-
Documentation
There should be various types of documentation to fit different levels and styles of learning. Breaking changes for foundational software should also be clearly documented, alongside migration tooling. The documentation should be to a level where one would not need to use external means (such as search engines) to learn any aspect of the software.
this includes protocols and APIs
avoids vendor lockin
all tools on all devices of a given user should feel similar (cohesive), complete with centralised configuration
software that other software is relies upon, things like operating systems and platform libraries.