Posts

early zuckerberg

Agile Product Owner Tips on Feature Prioritization

As a long-time software developer and development team leader, one of my passions is working with high-performing software development teams. For those in our industry that have worked with a great development team, you understand the difference in productivity can be tremendous. So the goal of helping teams improve their performance has always seemed to be a righteous (though often elusive) goal.

High Performance Teams

It seems that benchmark for the ultimate high-performing team normally consists of a couple of smart guys in a dorm room, basement or garage. So it’s worth asking what those teams have that the average development team does not.

jobs woz apple early bill gates
Obviously, we are talking about some of the most intelligent and motivated people in the software industry. Assuming you have a great product and you are intelligent and motivated, what is the next most important advantage that these high-performing teams have?

A tricky question for sure. My experience leads me to believe that the secret lies in the fact that they were both the development team AND the product visionaries.  This creates a single source of input (what most of us know as “requirements”) for the development team and creates an enormous source of efficiency. As product managers, product owners and stakeholders, this example gives us a tangible area where we can positively influence the productivity of our software development teams.

The Product Owner

Agile software development best practices acknowledge the importance of communication between the business and the technical team. Probably the most significant is the existence of the product owner role. Having been in this role a couple of times, I can tell you that there is no easy day as a product owner. The ideal product owner is one person with the experience, authority, and bandwidth to make all decisions regarding what features go into their product, as well as the priority with which they are added. Development teams that have had the luxury of working with a product owner that meets all these criteria will tell you that this helps their efficiency tremendously.

However, having a single product owner is often impossible or impractical for a variety of reasons. Perhaps the company culture is one where a committee makes decisions. Maybe the product footprint is large enough that one person can’t understand it all. Possibly the product has such a broad range of users and business goals that multiple stakeholders makes sense to represent different user’s interests. In these cases, it is critical to get clear on how the collective group assigns value and priority to a particular feature.

The reason a single product owner is a best practice is because that person only has one way to measure the value of a feature. They have their understanding of what is important, and might occasionally be swayed from that by other stakeholders. But generally speaking, they just decide what to do next and communicate that to the development team.

Too Many Cooks in the Kitchen

When multiple stakeholders become active participants in deciding feature priority, things get complicated. This can result in unclear or ambiguous direction to the development team. The reason this occurs is because now you have different perspectives feeding the priority. Something as simple as one person valuing new customer obtainment, while another values maximizing revenue from existing customers can cause major inconsistencies in how importance is conveyed to the development team. Throw in other common themes of software product enhancement such as usability, performance, new market penetration, competitive threats, lowering maintenance costs, integration with new business partners and keeping up with technology platform advances and you have a majorly complex value system that is driving priority.

Feature Prioritization Matrix

In order to cut through the complexity inherent in a situation with multiple vocal stakeholders with competing priorities, there is a simple tool I have used to help with prioritization, and ultimately help the development team get what they need to stay efficient and productive. The idea is to score each new feature with a weighted average system to create a numeric priority.

Let’s say the group of stakeholders agrees upon the following three primary business drivers for their new mobile app:

  1. Attract new users
  2. Retain existing users
  3. Lower support costs

Further, the group agrees that they are currently focusing on growing the user base as the primary goal, and that while lowering support costs is important it should be considered the least important of the three. So they could assign relative weights as follows:

  1. Attract new users – 50%
  2. Retain existing users – 30%
  3. Lower support costs – 20%

Creating this definition of how to measure value of a feature is a critical discussion. If you can get the group of stakeholders to agree to this, then you can have this discussion one time instead of having it every time a new feature is being considered. Take as much time as you need in order to drive alignment on this measurement system. It’s important.

 

feature prioritization matrix

Now that the measurement system is in place, as a group you can consider each feature and rate the feature’s value on a scale of 1-5 (1 = least, 5 = most) against each of the criteria. So for a feature such as, “add chat capability to the app,” the group produces this:

  1. Attract new users – 50% weighting : Group score (1-5) 4
  2. Retain existing users – 30% weighting : Group score (1-5) 5
  3. Lower support costs – 20% weighting : Group score (1-5) 1

This allows you to generate a numeric score for this feature. You’ll find that instead of discussing how valuable a feature is as a group (which can be an emotional and complex discussion), you’ll be discussing to what extent a feature can “attract new users” on a scale of 1-5. This is a much easier discussion to have, and compromise comes quickly by using the 1-5 scale.

This exercise can be done with dozens (I’ve even done it with hundreds) of features relatively quickly. Once completed, every feature has a numeric priority that considers the primary business drivers that everybody agrees on. Order the features in descending order and you have a prioritized backlog that was collaboratively created by a team of stakeholders.

The best way to accomplish this is to create an Excel document with the features listed down the left side and the business drivers listed across the top. Then, fill in the matrix for each score and create the formula to compute each feature’s weighted average score.

You can create your own template, or download our feature prioritization matrix to get started:

I have literally watched the anxiety leave stakeholders’ faces when the list is sorted. The stress they felt around having to campaign for the features they thought were most important instantaneously disappears. This can be either because these features were indeed the most important or because they were not the most important when compared to the other features in the backlog. There is great relief in knowing in either case. It’s a simple but powerful tool to get through what can be a politically charged exercise, and it will help your development team’s productivity by providing clear direction.

Tips for Success

Tip #1: I’ve found that many people want to include the “cost to implement” of the feature as a business driver. The idea is that if something is inexpensive to build, but has a lot of other values then we should prioritize it highly. I typically advise against including cost, or if you do, weight it very low, for two reasons. First, these features are often high-level ideas at this stage of planning and normally have not been estimated, so cost to implement is very difficult to know. Second, if you assign too high of a weight to cost to implement, it can make it difficult to ever make any significant sized enhancements bubble up to the top of the priority list.

Tip #2: I’ve also found that many people like to include “ability to generate revenue” as a business driver. I also recommend against this. Again, the assumption is that any feature that is being talked about here has already been vetted in terms of ROI. Also, generating revenue is a by-product of most other business drivers, such as, “Attract New Users.” Including revenue generation by itself usually ends up double counting the revenue benefit that already exists in other categories.

Talk to us about how our agile project methodology can speed the development of your next digital solution.








yellow happyface1

Is Your Website Mobile Friendly?

Nielsen’s mobile phone statistics for the third quarter showed smartphones now account for more than 28 percent of the entire U.S. cellphone market. As such, mobile smartphone applications (apps) are the newest “must-have” item for retailers and businesses wanting to connect with tech-savvy consumers.

While mobile apps definitely have the potential to build your business by engaging customers in unique ways, many overlook a logical starting point: making your website mobile friendly. Some businesses have chosen to circumvent website compatibility and usability issues by offering apps that try to provide the same features as their website. While apps do have their time and place, they are not the silver bullet.

The benefits of mobile website optimization vs. applications include:

  • Better Compatibility: apps are extremely platform specific, meaning that without having an app on each platform, you are alienating a portion of your potential traffic.  As opposed to developing mobile applications for 2, 3 (or more) platforms, one standard website optimized for all smartphones can be accessed anytime on any device.
  • Lower Cost: many times the mobile website can deliver the same functionality as would a stand-alone application at less than half the price of a full-fledged app. You may get more bang for your buck from the properly optimized mobile site than you would from an application.
  • Customer Usability: the end-users experience is ultimately what matters. While applications can serve advanced purposes, it can still be difficult to navigate simple sites if it’s not properly optimized for finger-based browsing.
  • Maximum Reach: mobile websites can reach a broader audience than can an individual app, based on the fact that they are aligned with your businesses website.

In order to make the case for mobile sites, it is important to look at the market and an increasing percentage US adults use their smart phones to browse the web; as the next generations of smart phones are launched, mobile browsing will only continue to grow. Many carriers are also requiring mandatory data plans with the sale of web-enabled phones, anticipating the growth of mobile web use.

Additionally, many non-phone mobile devices use a “limited function” browser to browse the web. This includes tablet devices such as the iPad and Amazon’s Kindle Reader. These devices also usually benefit from a mobile site, though not as significantly as smart phones.

This presents challenges to many companies who have invested in a very good and very effective website, but suffer from it being incompatible with mobile browsers, or just plain difficult to use on mobile devices.

Specifically, sites programmed in Flash are currently not compatible with almost any phone browser. Flash sites are excellent tools for traditional desktop browsers, and provide great tools for customer engagement, but are completely dysfunctional on mobile phones. Even if this changes with some of the new OS launches and upgrades this year, Flash sites will still require some mobile optimization to exhibit the same level of effectiveness.

None of this is meant to completely discount the value of apps for the right situation, just to emphasize that taking a step back to start with the overall mobile browsing experience makes sense. Apps and widgets definitely have their place and may ultimately work better for your particular business – but don’t ignore the basics when it comes to mobile website optimization.

speed1

9 Easy Ways to Speed Up Your Website’s Load Time

Google recently announced that they began factoring in web site load time into their search engine ranking algorithm. This has brought the importance of a fast load time front and center even though “fewer than 1% of search queries will change as a result” of this update. MentorMate.com likely was not impacted very significantly from this change to Google’s ranking algorithm; however, we still decided to optimize our site’s load time. We did this because Google showed that “delays of under a half-second impact business metrics.” It’s better to be safe than sorry, and besides, it’s not that difficult to optimize your site. We recommend you do the same with your web site, here are nine easy ways to do just that:

1. Place scripts near closing body tag

Scripts block parallel downloads. While a script is downloading, the browser will wait until it finishes before downloading anything else. This is why it is recommended that you get everything else out of the way before having your users download scripts.

2. Remove any broken links/references

Simply enter your web page URL in Pingdom’s Full Page Test Tool. This tool will color-code any broken links/references in red so you can easily identify them.

3. Specify image dimensions

When image dimensions are not specified in the HTML and/or CSS of a web page, the web server must spend resources calculating these dimensions. It’s particularly important to specify the dimensions of images being used in conjunction with heavy Javascript image-manipulation libraries.

4. Localize external file references to minimize DNS requests

This is another spot in which Pingdom’s Full Page Test Tool comes in handy. Enter your URL and look for any file references to external domains. If possible, copy these files onto your own domain and link to them locally to minimize DNS requests.

5. Minimize slow-loading libraries and external widgets

Libraries and external widgets need to be chosen carefully. Sometimes it’s worth sacrificing load time for particularly engaging/useful libraries and/or widgets; however, sometimes you can live without the library and/or widget. For example, on MentorMate.com we felt it was worth sacrificing Sexybuttons for better load time, but sacrificing load time for Shadowbox. External widgets can be particularly bad for a site’s load time because of their reliance on external servers.

6. Compress your files using gzip

These days, gzip comes pre-installed on most web servers. You can check to see if gzip is running your server quite easily using Google’s Firebug “Speed Test” extension. Open Firefox, visit the web site you’d like to optimize, and open Firebug. From there, click “Analyze Performance” and select the “Resources” tab. Then you can expand any file to view details. If gzip is installed and compressing the element you are viewing, you will see what is highlighted in red in the following screenshot:

gzip

7. Merge Javascript and CSS files or use Minify

Depending on the complexity of your site, it can be quite time consuming to merge all CSS into one file. The same goes for Javascript. This is why Minify was developed.  Minify “combines multiple CSS or Javascript files, removes unnecessary whitespace and comments, and serves them with gzip encoding and optimal client-side cache headers.” Then you simply need to install it on your site, select the files you want it to serve together, change some references in your header, and you’re good to go. This will minimize your site’s load time by further helping to reduce HTTP requests.

8. Load cross-browser compatibility hacks only for necessary browsers

For instance, we use the IE PNG FIX for IE6 PNG transparency compatibility. This script adds an extra second to web site load time. For this reason, we only load the script if the visitor is running IE6 by applying an IE6-specific stylesheet which references the IE PNG FIX. This way the extra load time will only impact IE6 visitors.

We simply added the following line of code to our header:

9. Use CSS sprites to minimize HTTP Requests

A CSS sprite is the combination of multiple images into one. Then CSS is used to reference different aspects of the image where needed. This reduces load time by minimizing all of these images into only one  HTTP request. CSS Tricks has a good example of CSS sprites.

stopwatch 500x360

Optimized paging query implementation for Microsoft SQL Server 2005

We did performance tests on several methods of paging implementation and found the fastest one:

One significant advantage of this implementation approach is that there is no need for a second query that returns the total count of the paged data. The total record count is returned as a column in the result set. This minimizes the number of queries that are needed to return a paged result set. If not needed, the “TotalRows” column can be removed from the query.