Good software

A lot has been written on this subject, and if you want the definitive guide on product design and software development (if there is such a thing), this is definitely not it. What this is however, is my personal vision on what’s important for building quality tech products and user experiences.

Good software…

Abstracts the logic

Software is only ever a tool, and brings value by simplifying processes. Good software solves real world problems, abstracts the technical details, and allows the user to perform an action without having to think about what happens in the background.

Begs for interaction

Users shouldn’t feel overwhelmed or scared. Create an environment that makes users confident to be able to click around without having a fear of breaking things or accidentally removing data.

Giving users the confidence to go on their own exploratory journey will help with not needing much guidance or instruction.

  • Add text where necessary. Rows of vague icons are scary.
  • Illustrations and colour help interfaces feel airy.

Uses everyday terminology

Your users are probably not computer science graduates or developers, so don’t talk to them like they are. Instead, use friendly, welcoming language that’s easy to understand and succinct.

  • ‘Preferences’ feel much more gentle and personal than ’settings’.
  • Sometimes using terminology that is technically incorrect but generally accepted is fine. Things starting with ‘http://’ can be referred to as ‘links’, even though they are really just URLs.
  • Don’t talk about servers unless you really have to. ‘Linking your email account’ is so much easier to understand than ‘connecting your SMTP server’.

Adheres to expectations

Don’t reinvent the wheel. Use established patterns wherever possible.

  • If there’s a rich text editor, I’ll expect to be able to mark text as bold or italic.
  • If there’s a modal window, I expect to be able to click outside of it to close it.
  • If I’m on a web page, I expect to be able to share the URL in the address bar in such a way that my recipient sees the same thing that I do.
  • If I’m using a native app, I expect it to look like the other apps on my platform, even if it’s really an embedded web app.

Feels light-weight

Enjoyable experiences are created by simplicity, (the sense of) speed, and a quick onboarding.

  • Optimise sizes to allow me to quickly give the product a try, whether that’s downloading a native application or loading a web app in my browser.
  • If you require certain information from me to perform certain functionality, ask me that information progressively as I use the application, instead of requiring me to enter a lot of data upfront.
  • Make interactions feel snappy and quick, even if they take a long time to finish, by using loading animations, placeholders and giving the user status information (“34 of 150 documents scanned”).

Doesn’t require documentation

With a few exceptions, you shouldn’t need FAQs, instruction manuals, guided tours or video tutorials. Everyday interactions should feel intuitive, be straightforward and logical.

  • A single glance at an interface should be enough to clarify how to create a new post, invite a teammate, start a new conversation, etc.
  • Icons help me identify common actions (cog for settings, lock for login/logout, trash can for delete).
  • Full sentences instead of short titles and keywords add context in the rare cases where it is needed.

Appeals to power users

If you expect me to add your tool to my arsenal of applications I use every day, think of ways to improve my productivity.

  • Allow keyboard shortcuts for editing text, and try to stick to conventions as much as possible (⌘+B to make text bold, ⌘+K to insert a link, ⌘+N to open a new window or document).
  • Allow multi-select and bulk actions for lists of items (invite multiple users at once, mark all posts as draft or published at once, etc).
  • Remember states, like window sizes and the documents I recently worked on.