One of the biggest flaws of software can be its lack of constraints.
Take a To-Do list app as an example. I haven’t come across one which limits the number of tasks you’re allowed to put in there. This is really bad from the perspective of actually getting the job done. A more opinionated piece of software would limit you to say a dozen tasks at once. It’s less overwhelming, and it’s more likely that the user will actually complete them.
These kinds of contraints are built in to certain physical products. A physical To-Do list might be done on the back of an envelope. That envelope is a set size, which physically limits the amount of information you can store on it at any one time. In some ways an envelope is a better To-Do list than most software equivalents.
Twitter is an example or a service which has imposed constraints to good effect. By reducing the tweet to 140 characters it reduced the cognitive load on the reader.
Snapchat makes photos disappear after 24 hours. This has privacy benefits, but also, people just need to forget stuff sometimes. The human brain isn’t a perfect machine which remembers everything. Snapchat is the equivalent of a fleeting moment.
Software which is built with constraints can be far more successful than software which isn’t. At the heart of it is an appreciation that the users are humans and not robots, with our own limitations - the software should take account of that.