Who Owns What Timeline feature: tracking landlord behavior over time

Sam Rabiyah
JustFix
Published in
6 min readJun 25, 2019

Who Owns What, part of JustFix.nyc’s product suite, is a research tool that lets users find NYC buildings with similar ownership. Since we publicly released Who Owns What last December, the tool has helped tenants research their landlords, organizers conduct outreach, lawyers build strong legal cases, and journalists unveil patterns in data. To date, it has served 60,000 users across 125,000 total address searches.

Who Owns What is a tool driven by the communities who have historically championed our cities, and our goal has always been to leverage technology to make the process of defending homes and stopping displacement easier for those fighting that fight.

Last week, we released the new Timeline feature for Who Owns What — a feature that visualizes the history of landlord behavior over time. Like all of our products at JustFix.nyc, the process for making the Timeline feature relied heavily on community-driven design and development, which means we’ve spent the last several months listening to experts in the housing movement tell us how they use city data to track bad landlords, organize residents, and ultimately fight displacement. This post will walk you through our process.

Our new Timeline tab in action!

The Project: Visualizing ownership and building conditions through time

Pretty much since we began work on Who Owns What, we’ve noticed that many people not only want to know what buildings a landlord owns, but also how their portfolio has changed over time. We asked ourselves, if Who Owns What could automate the process of linking properties together under common ownership, could we also give users a quick look back in time at a building’s history?

Last October, we hosted a “Listen-in Workshop” at our office in Brooklyn to see what tenants and organizers in our network saw as the key housing issues they were fighting, as well as how historical data informed their work. In preparation, we gathered as many sources of data we could from the NYC Open Data portal and came up with some conceptual visualizations to show what information was possible to gather.

Some information design concepts from our October Listen-in

At our workshop, we presented our list of concepts and asked folks which pieces of information would be most helpful to their work, and (more importantly) what they thought was missing and could be added.

Ultimately, the folks we talked to told us that the most important things they looked at when researching a building’s history were changes in ownership and trends in maintenance/building issues. However, participants also gathered a long (and growing) list of other indicators they looked at in addition. Given this initial feedback, we started prototyping!

Read more about our design process in the Community-Driven User Testing section.

Technical Solution: PostgreSQL + Chart.js

Since Who Owns What is built upon a community-developed PostgreSQL database called nyc-db, the easiest way for us to bring in historical building data was to write more queries to this database. First, we wrote several individual queries that grouped different data indicators by month — for example, here’s a query that generated a count of violations issued by the Department of Housing Preservation and Development (HPD) each month:

SELECT
TO_CHAR(NOVISSUEDDATE, 'YYYY-MM') AS MONTH,
COUNT(*) FILTER (WHERE CLASS = 'A') AS VIOLS_CLASS_A,
COUNT(*) FILTER (WHERE CLASS = 'B') AS VIOLS_CLASS_B,
COUNT(*) FILTER (WHERE CLASS = 'C') AS VIOLS_CLASS_C,
COUNT(*) FILTER (WHERE CLASS IS NOT NULL) AS VIOLS_TOTAL
FROM HPD_VIOLATIONS
WHERE BBL = ‘1019260029’ --EXAMPLE BBL
AND NOVISSUEDDATE >= '2010-01-01'
GROUP BY MONTH

We then made use of PostgreSQL’s built-in Series Generating Functions, which allowed us to create a list of months between January 2010 and the current date.

SELECT TO_CHAR(I::DATE , ‘YYYY-MM’) AS MONTH
FROM GENERATE_SERIES(‘2010–01–01’, CURRENT_DATE — INTERVAL ‘1 MONTH’, ‘1 MONTH’::INTERVAL) I

Essentially, the GENERATE_SERIES query created a single-field table that we could then join with other queries (like the “HPD Violations” example above) through a common “MONTH” field. So, combining all of our queries together as subqueries in one long SQL statement, we ended up with a nicely-organized table of building data, ordered and indexed by month from 2010 to the current time.

Once we had our Timeline data accessible via API call, the only remaining steps were picking a charting library and configuring our visualizations. We considered using D3 or Highcharts, but after seeing this comparison table, we ended up going with Chart.js as our charting library for the following reasons:

  1. Lots of online documentation and usage (about 600K weekly downloads via npm)
  2. Clean and simple built-in UI
  3. Easily customizable with plugins
  4. Plays nice with React via the react-chartjs-2 module
  5. Open source, just like us :)

Despite the utter frustration of trying to style canvas elements, Chart.js turned out to be a great solution for our data viz needs. Adding custom functionalities to the charts — like our “X-axis shift” buttons — was pretty manageable as well.

Our data viz implementation with custom user interactions

Community-Driven User Testing

Throughout the last three months, while actively engineering the Timeline feature, we conducted 20 user testing sessions (10 in-person and 10 remote) with tenant leaders, housing organizers, legal aid providers, data analysts, and general housing advocates in our community. Conducting user testing during active development and not after an initial release was an intentional choice of ours to keep this product update grounded in our users.

For our in-person sessions, we’d sit down with folks — mainly people who’ve used Who Owns What in the past for their work — for about 30 minutes and watch how they interacted with a demo of the Timeline tab. Key to this process was mapping their journey through this tool, their “before” and their “after,” to really pinpoint when during their work they would interact with the feature.

User testing with a tenant organizer in May! (Photo Credit: Analisa Freitas)

For folks we couldn’t meet with face-to-face, we generated a self-guided form that walked folks through the same demo and follow-up that we incorporated during our in-person user testing.

Ultimately, this process of human-centered design enriched and energized our development process and got us closer to meeting folks where they were at with their work. Each round of user testing we conducted would inform our next engineering sprint, which in turn would be followed by more user testing. We discovered key ways that folks would use the new Timeline feature, as well as which data was important (or not important) to show, that we would’ve otherwise missed had we not conducted testing prior to launch.

So, we want to give a huge thank you to all of our testers for helping create this new feature— we couldn’t have done anything without you.

Future Additions

The Timeline feature released last week should be considered a version 1.0 — we have tons more ideas from our community that we hope to release on a rolling basis over the following year. As a sneak preview, here are some potential thoughts we are testing out:

  • Department of Buildings Complaints and Violations over time
  • Tax exemption/abatement history
  • Download Timeline data button
  • More comprehensive history of past property sales (not limited to most recent)
  • Charts showing portfolio-wide data

Have any feedback or ideas? Drop us some knowledge through our feedback form.

Oh, and like all JustFix.nyc products, Who Owns What is open source! You can find the code on our Github.

--

--