All Features Are Not Created Equal
When planning out what to build next for a software product, it's useful to bucket items into the broadest possible categories: new features, bug fixes, refactors, etc. Especially for features, however, there are other useful distinctions that can be made. Features can improve your project's Capability, Accessibility, Flexibility, and Efficiency (conveniently shoehorned into an acronym as CAFE).
So why do we need yet another acronym or to make these distinctions at all? Because recognizing their differences and achieving a proper balance between them can make the difference between a product users like and a product users love.
Capability: Doing New Things
Features that increase capability are probably the first thing most people think of as a “feature." Adding capability means that your product is simply able to do something now that it wasn't able to do before. Examples might include:
- Allowing users to attach photos to posts
- Adding real-time notifications of server-side changes
- Adding on to something the product provides (newfilters, new components, etc.)
Note: I'm including expansions of existing capability in the same category because they tend to have similar impacts on your product.
Capability tends to increase the efficiency of the product and slightly reduce its accessibility and flexibility.
Accessibility: Improving Ease-of-Use
Features that increase a product's accessibility will make it easier to use for a segment or the entire user population. A few examples of accessibility:
Adding an onboarding process to make it easier for
beginners to use the product
Automating previously manual parts of a process
Simplifying and streamlining the user interface
Having an intuitive application is obviously beneficial both in proving your value to new customers and fostering loyalty in long-term users.
Accessibility tends to have complex interaction with the other feature types. It has the potential to increase or reduce any of the other factors, and additionally should be a factor of all of the features you build.
Flexibility: Improving the Reach of Existing Features
Features that increase a product's flexibility will allow users to do more with what's already there. A few examples of adding flexibility might be:
- Building an API to allow 3rd party developer access
- Implementing connections to other services' APIs
Allowing users to define custom fields, create reusable
templates, or change the look and feel of the product
Having a flexible application helps your product serve a larger audience than it otherwise would by allowing your users to build into (or out of) your existing functionality.
Flexibility has a tendency to increase efficiency (by allowing power users to adapt the tool to suit their needs) but decrease accessibility (more things to consider and configure means less intuitive).
Efficiency: Doing Things Faster
Features that increase efficiency simply allow users (usually more experienced users) to accomplish their goals within your product faster and with fewer steps. Examples might include:
- Adding keyboard shortcuts to your product
- Allowing users to create custom workflows
- Support email reply commands to perform actions
Having an efficient application improves the value proposition of your product by saving users time (which therefore saves them money).
Efficiency and Accessibility are a fairly direct push and pull. Implementing a wizard that walks beginning users through a process may slow down an experienced user who knows exactly what they want. Similarly, exposing advanced configuration options to a newcomer can make a product seem confusing. Balancing the two requires careful thought and effort.
At Divshot, we're building a front-end development platform that lives in the browser. We have everyone from experienced programmers to people who have never written a line of HTML in their life using our product. When I started to think of our roadmap in terms of these feature archetypes, it helped me do a better job of task triage. All of the feature types are important, but one may be more or less important than others at a given time. If you recognize them as different you have a better chance of maintaining a balance in your development cycle.