Good Software Features

It occurred to me recently that, as social media has an incredible power to deliver negative feedback… and have it immediately disappear in an ocean of clueless naysayers and immediately be ignored, it would be useful to instead try give credit where credit is due for positive achievements, even when the overall goals of their achievers are nebulous or even problematic, so that others can see and notice and emulate.

Looking at the world of software, it often happens that a large company wants to launch a product to try to compete with existing small company products, but for various reasons (e.g. they want to be in the market yesterday, their resources are spread very thin, organisational infighting reduces a new project’s access to a fair share of the organisation's best developers, etc.) they don’t spend enough time acquiring the facts about what features they need, and they build a product that isn’t very good.

Putting these two together: Maybe a useful approach is to just have public lists of good features and rationales for different kinds of products, that anyone developing a new product can use.

Here goes. If this grows much more, I’ll have to build some kind of site for it, but for now, some outlines:

Music Streaming Subscription Service

  • Ongoing Gift Subscriptions: I can buy a subscription to your service for someone else as a gift; it is an ongoing subscription (I will continue to be charged in future months/years automatically unless I cancel it), but it doesn’t give that person the ability to buy any other products or services and charge me for them (example: Spotify, the late RDIO)

Online Software Store

  • Download Bandwidth Limiter. Downloading several gigs from a CDN at full speed will easily prevent any video streaming uses for a good fraction of an hour on typical consumer Internet service. A simple feature where the user manually sets a bit-rate limit in a settings dialog and the software throttles the downloads to that rate does wonders (example: Steam)

Automatic Software Updates Features

  • If an automatic update system will leave existing shortcuts pointing at an older version of the software, have the software check what versions are installed, and if there is a newer version installed, suggest that the user update their shortcuts (example: Blizzard Client)
  • Low-impact updates. Give the user the option to run an update manually or to have it run at a scheduled time or their choosing, without imposing arbitrary limits on this. The user’s normal use of the system is not locked out during an update — these days, even a cellphone OS has preemptive multitasking, so it shouldn’t require a great deal of additional engineering to make this possible. Avoid organising the system in such a way as a whole system restart is required for an update. If a restart is absolutely required to update some core component, do as much preparation in advance and cleanup afterwards in normal user mode where the user can do other things at the same time. (example: Debian and Red Hat Enterprise Linux and distros based on them)

GUI Design Tools

  • When a GUI framework allows resizing GUI elements automatically when a window resizes, whether in the form of sizer containers or explicit binding of element sides to both sides of an enclosing element, make the setting editable through a UI that is prominent — not buried under obscure settings — and intuitive — actually demonstrating what will happen as a consequence of the current setting with a preview and/or animation (example: Visual Studio’s old WinForms editor, Pythonista’s designer on iOS)