Prioritization is an essential part of product management. Most products will not be able to accomplish everything they set out to, so prioritization becomes important in determining what gets done and when.
In this post we’ll go through a framework that can help with making decisions regarding your product strategy (and it’s accompanying features). This framework is called the RICE Framework and was originally introduced by Rich Mironov in his book ‘The Art of Product Management’. More recently this framework has been brought into the light again by Roman Pichler .
The model looks like this:
R – Relevance
I – Impact (on your company and users)
C – Confidence (of your solution and competition)
E – Ease of implementation (by you or by your team)
The RICE Framework is a prioritization model that can help you to decide what’s most important about your product and thus helps you prioritize work. It does this by giving us a simple way to think about the different factors your decisions might have an impact on.
It can be used in various ways for example for deciding which features to add when, but it also works well as a general life-cycle planning tool. Especially in larger organizations who tend to plan out release dates and accompanying features that far into the future it is good knowledge to have in your arsenal when trying to make sense of all these fixed dates and expectations. I sometimes see Product Managers in such places using it as a tool to figure out how much they can get done within the set timeframe, but I think it is equally useful for deciding what you’re going to work on next.
You end up with 4 quadrants which you could call Market Penetration, New Opportunities, Performance Improvements and Product Stabilization. Some of these should be pretty self-explanitory so I won’t go into too much detail here. The first 3 are all focused on growing your product in some way – market penetration is about gaining new users through making changes that appeal to wider audiences – new opportunities is about finding yourself in different markets by exploring new spaces or creating integrations with other products or services – performance improvements are about optimizing what you have already built not only to maximize the number of users you can support but also reduce support costs etc.
Starting with Performance Improvements – it is about making your product faster and more reliable by eliminating bugs or bottlenecks, adjusting resource allocation and allocating resources more efficiently. Performance Improvements will improve every aspect of your business from cost of customer acquisition right through to how long people stay on your product. By improving performance I mean both micro-optimizations that don’t really impact user experience but have a tremendous impact on business metrics as well as optimizing for a specific platform or infrastructure – Android, iOS, Mobile Web etc., Usually going this deep means also going cross platform because there will be common problems across them which you can solve once instead of solving separately for each one.
In this post I will focus more on micro optimizations you can make to your Android app to help improve performance. Please note – most of these tips are relevant to any kind of apps, not just games.
RICE framework can be used to measure the performance of your app. It is composed of three different metrics – Responsiveness, Idle Responsiveness and Context switching.
Your final goal should always be to improve responsiveness of your application. This means that when a user performs an action in your app, they expect the result immediately – not after they finish reading the news or simply leave your app. Better performance here will also help you keep a low number of context switches which are expensive when it comes to battery consumption. Measure it using the RICE framework explained above – you want each part of “R” sequence to have very minimal delay, ideally under 16ms , so there is no visible lag for the users .
To prioritize product features with the RICE framework, ask yourself the following question after every new feature is implemented or existing one changed:
“If a user performed this action, how many consecutive “R” sequences would it take before they are able to complete the task?”
For example – start typing something in Text View should be 2 “R”s. Entering some search term into Search Bar should also be ideally under 2 . It’s OK if there is a bit of delay for some actions so long as you can’t notice any lag after say 5-6 consecutive events.
Keep in mind that you can have very high responsiveness but still have issues with providing smooth transitions between UI components on screen. If you switch from Activity A which shows a list of Books to Activity B which shows some details on selected books, for example, the transition should be as smooth as possible. This is sometimes called a “seamless” experience.
The big difference of subjective perception of responsiveness vs. objective measurements is that any issue with performance might be noticed if it’s slow enough but not all problems are noticeable if they are fast enough . Maybe some click or swipe events will feel laggy on high end phones but most people won’t even notice on low-end devices where components would switch with ~0.5s delay between them.
So don’t get too obsessed with trying to reach 0ms delays 🙂 Just remove your obvious bottlenecks and you’ll probably do fine in terms of perceived UI responsiveness!