Deprecating the oldest part of the product – a part users have known and used for two decades – can be intimidating even when you have a brilliant team, and the benefits are clear. Did you know replacing legacy applications is often considered one of the biggest challenges in information systems? Realtracs took on this challenge in early 2019 by prioritizing the replacement of our listing management system: a system critical in supporting our customers’ day-to-day operations.
Listing management represents the data input and upkeep associated with listings – properties on vs. off-market, their geolocation, their tax information, the price, and all the specifics on what the listing includes. As a multiple listing service (MLS), we ensure the most up-to-date and accurate listing data for all of our customers. We use the listing management data to power our own searches and portals. We also share the listing data with various data aggregators for further distribution. With data from more than tens of thousands of agents and hundreds of outbound data feeds (and growing), the path to replacement was complex.
The business objective that drove this change was primarily about ensuring data quality. The legacy listing management system was becoming a source of bad data in our database due to the lack of consistent validation between the dated, clunky input forms, and the data access layer. We needed to find better ways to handle data input, help our users provide accurate data, and regain the ability to quickly resolve data-related issues. We also needed more flexibility to align our data set with the Real Estate Standards Organization’s (RESO) data dictionary, the industry data standard.
Additionally, we faced increasing limitations around leveraging new technologies and maintaining compatibility between this legacy app, somewhat older applications, and the newest parts of the system. User experience suffered as well: there were many different “versions” of the product with diverging user interface designs, various color patterns, and numerous non-responsive interactions.
Finally, maintaining the legacy system was risky due to the tightly coupled codebase. Deployments were downright scary. We couldn’t move fast or easily make seemingly small changes. This introduced a lot of overhead and heavily conflicted with our Lean principles.
“Making small changes or bug fixes was risky and deploying sizable changes was very stressful, especially due to the importance of that application to our customers.”Josh Trisler, Realtracs Software Engineer
Data and Iterating
To pull it all off, the groundwork started in the legacy system in 2018. We had a lot of data standard gaps to address and data cleanup to perform. It wasn’t the most exciting work, but it was a necessary lift and the complexity of ensuring we didn’t screw it up for our customers kept us on our toes. Alongside these efforts to prepare for a future system replacement, we initiated product discovery work.
We tackled initial discovery from a few different angles: data analysis, user interviews, and internal stakeholder interviews. The data analysis involved poring over system usage and interaction statistics, competitive solution analyses, feature request backlogs, and prioritizing any known data gaps. For example, we knew that location and tax data played a critical role for our users, yet the quality of our location data and the comprehensiveness of our tax data suffered. So, we quickly prioritized correcting the data input process to safeguard against perpetuating the issue.
We continued down the path using continuous discovery and design iterations. As we discovered problems in the existing system that would hold us back from our desired state, we’d correct them. When we found features or data elements that were barely used (or were at odds with our standards), we removed them. We held design studios – a Lean UX practice – with internal stakeholders to explore opportunities, understand risks, and collaborate on the future state. At each step of the way, we relied on our design principles and our users to provide their feedback on our rough wireframe designs and talk through their hopes and their concerns.
This ongoing collaboration between product, engineering, internal stakeholders, and end-users led us to many new design patterns and the shared vision for a final state. By arriving at that shared vision we were able to set quarterly goals to iteratively roll out new backend and frontend bits, with care not to disrupt our customers.
We tackled ancillary parts of the listing process first, e.g. a sortable and searchable view of a user’s listings, listing status updates, and managing open houses. Then we moved to the much more complex and higher risk parts of adding/editing listing data. This iteration meant we gradually replaced legacy interactions with new UI components and had to maintain the core legacy system all along the way. We had to be patient and creative. And we finally got to put the finishing touches on the new listing management system in early 2020.
We held several retrospectives along the way to recognize our successes and continuously improve upon our processes. Here are some of the themes that consistently came through:
- Share the Experience: Involve your company and your users in the vision and the effort to celebrate wins and learn from missteps.
- Manage Expectations: Use everything at your disposal including in-app messaging, demos, and collaborative work sessions to help manage internal and external expectations.
- Release with Empathy: Help your users adjust to the changes by embracing well-planned iterations, running betas, and providing escape hatches or ways to go back to what they know while they adapt.
- Stay Flexible: Replacing a legacy system is grueling work. Tweaks – even to the architecture design – will be needed along the way.
By iterating through a challenging legacy system modernization, we achieved more accurate data, minimized the impact on our users along the way, and ultimately increased our ability to quickly deliver value to our customers.