Case Study: the City Page
The Solution
Go to greatschools.net, and browse different cities like San Francisco, Akron or Foxboro. Or search for the city where you went to school. Interesting stuff:- nearby cities dynamically calculated from lat/long. values
- several variations of this page: one for "thick" states with school ratings and one for "thin" states with minimal information
- user-generated comments are plugged in dynamically
- 20,000 cities are in the database. The page decays reasonably if the city is not in the database.
The Problems
The site navigation is out of sync with the users mental models. The GreatSchools website has a information about 120,000 U.S. schools and their students, teachers and test scores, and includes various tools to find and compare schools. The user must first pick the state they are interested in, and then the data is presented in a straightforward manner. The vistor can search or browse for a given school, district or city. This is close to how the data sources provide the data.
But for many visitors-- who are parents and not school data experts-- this can be non-intuitive or confusing. Our data is grouped by districts but very few people think of the world that way. It's especially challenging for a key subset of parents-- those who are moving and unfamiliar with an area. There were quite a few dead-ends that the user would get stuck in.
Presenting the right navigation for these people is difficult. What model beyond a basic school search would help our vistors the most?
Secondarily, the site can feel stale. Even though we have 5 FTE importing data into our system, this can be invisible to the visitors. And our user contributed content ("parent reviews") is of high interest but buried.
Technical Challenges
There was no clearly correct taxonomy for our users. We'd bounced around the idea of organizing by county, city or metro area. We had data about all these geographical areas, but the quality was questionable. We knew our metro area data was probably inconsistent, and we had little knowledge of how accurate the counties or cities were.
Looking to the rest of the web didn't help much. Popular sites like Craig's List use metro areas ("SF Bay Area"), and then break that down into cities and neighborhoods. But they do this with a phased roll-out into individual metro areas, and build the data from there. They individually build the taxonomy. But we didn't really have the resources for something like this, since we area already a nationwide site. Other sites like Yahoo local had resources we couldn't imagine to do this.
This situation has paralyzed us into doing nothing about this problem for some time.
The data lacks referencial integrity. The federal government (via NCES) release some basic data, but it is not available often nor does it include in-depth statistics. Therefore, GreatSchools gets data data from 68 different sources (besides NCES, state departments of education, individual state departments of education, universities and some individual school districts). The data acquisition grew organically, and so it was represented in various ways, often mirroring what the data source provided (although over the past year we've devoted significant resources to bringing standardizing these).
The organization was paralyzed by the situation. Although we knew there had to be a better way, the team was unable to conceptualize a solution.
Solution
Wave the Pirate Flag
It became clear that this was important to the site, but that the organization would not get to a solution. The development process was too incremental, risk-adverse and beaurocratic. A fellow engineer had done a mash-up of our data with yahoo maps one night. This was met with excitement but nothing followed.
So I decided to experiment a little. My belief was that a "city" was the best common geographical grouping that we had. States were too large, metro areas too ambiguous, and counties sometimes unknown. There were certainly census blocks and voting districts, but I dismissed these quickly. With nothing but my own intuition I picked city as the strongest metaphor. I didn't consider the quality of our cities in the database.
Very quickly I threw a mashup of a city's schools into a Google map. I added a section of "community data"-- this was a matter of looking an object up and throwing some fields on the page which took a couple hours.
Iterate
This prototype garnered enough attention that I pursued it more.
The map evolved quite a bit. It started as a large 600px x 600px map of all the schools in a city. It was clear that this only worked well for cities with between 3 and 20 schools. Otherwise it was too empty or too slow. We tried showing all different combinations, learning that it's best to have what is mapped duplicated in a list next to the map. This led us to showing "top-rated" schools Germs of Ideas - maps - nearby cities - perhaps if cities are the wrong metaphor for some users this will keep people from feeling trapped. - recent parent reviews - community data problem To users, data not visible to user, unfamiliar areas may remain unfamiliar. May or may not see it. Internally, data model doesn't support anything else. No momentum organizationally to solve the problem. Paralasys. Approach Covert prototyping. Mitigate primary risk. Solving the city problem. Analyse the situation. Techniques Test driven development to clean data. Use of 80/20 rule. User stories to communicate and prioritize work. key accomplishments data cleansing prototyping test-driven development user stories design trade-offs