---
title: "Legacy app refresh"
layout: "study"
slug: "legacy"
summary: "Reshaping a complex and outdated school forms workflow into a clearer, calmer experience for administrators and families."
draft: false
hero:
title: "Legacy app refresh"
deck: "Reshaping a critical but outdated school forms workflow into a calmer, clearer experience for administrators and families."
svg: kangaroo-eyes.svg
list:
more: "Wallabyte supports schools and families through critical paperwork, but was woefully unusable. This case study covers how I approached that challenge—from identifying the highest impact issues to shaping a more coherent forms experience."
img: card.png
color: blue
facts:
- key: Role
color: yellow
- key: tools
color: red
- key: industry
color: green
study:
facts:
- label: "Role"
value: "UI/UX Design"
icon: "hat"
- label: "Timeline"
value: "Est. 6 months, expanded to 18"
icon: "calendar"
class: "min"
- label: "Tools"
value: "Figma"
icon: "pen"
- label: "Industry"
value: "K-12 education SaaS"
icon: "briefcase"
- label: "Stakeholders"
value: "Product, engineering, and school operations"
icon: "users"
toc:
- id: "intro"
label: "Introduction"
- id: "overview"
label: "Project overview"
- id: "problems"
label: "Core problems"
- id: "context"
label: "Delivery context"
- id: "response"
label: "Response"
- id: "impact"
label: "Impact"
- id: "reflection"
label: "Reflection"
footnotes:
- symbol: "†"
note: "Product names have been changed to maintain confidentiality. I'm happy to answer product questions as needed, but would need permission to share specifics like names and customers."
- symbol: "‡"
note: "User stories and personas were an important part of the discovery process and directly informed the problem statements behind this redesign. In this case, however, those audience definitions were already well established within the product, and reproducing them here wouldn't be worth it. What mattered most for the work was the wide variation in user contexts we needed to account for, from parents with one child to families, teachers, and staff operating across multiple children, schools, classrooms, and roles. That complexity is why testing required so many different demo accounts and permission combinations."
---
{{< intro id="intro" title="Designing for clarity over polish in complex admin software" >}}
Wallabyte† supports schools and families through critical paperwork—from permissions to registrations and even student health information. It solved this and more, but was **woefully unusable, even by admin-ware standards**. The forms experience had become frustrating enough that major customers, like NYC, were at risk of churn unless the workflow became **clearer, calmer, and easier to use**.
This case study covers how I approached that challenge—from identifying the highest impact issues to shaping a more coherent forms experience—all within the paradox of a userbase simultaneously frustrated yet resistant to change.
It is also meant to show how I simplify complex systems; work in a difficult set of circumstances; and **design to please the user, not myself**.
{{< /intro >}}
{{< overview
id="overview"
title="Project overview"
>}}
Wallabyte had two halves: an administrative app for creating and managing forms, and a parent- and staff-facing app for completing forms. This redesign only touched this second, smaller part—called **Wallabyte Central**—due to the particular churn risk it was creating.
The existing experience had become painful enough that major customers, including NYC, were at risk of leaving unless the product became significantly easier to use. My job was to figure out how to make their mobile and desktop experiences more efficient and pleasant.
At the same time, Wallabyte was also rebranding as **Schooltastic Forms**, now a year after it had been acquired by Schooltastic. This project was my first interaction with this app and team, and not only did I have to get up to speed quickly, its users could be seeing a lot of sudden change if this update wasn't handled carefully.
{{< figure
src="img/overview.png"
alt="Original app screens for Wallabyte Central on desktop and mobile"
caption="Original app screens for Wallabyte Central on desktop and mobile, for a user with multiple children and many form requests." >}}
{{< /overview >}}
{{< problems id="problems" title="Core problems" >}}
We identified **four main UI/UX issues to target in this refresh**, following my own deepdive into the product and several meetings with the product manager.
I was fortunate to share an entirely fresh set of eyes on a mature product, and it helped question a lot of assumptions that had been taken for granted over the years. This app necessitated multiple demo accounts with different permissions and scopes‡, and I spent the first week cataloguing my experiences.
These four problems became the core problem statements we used to frame the work and evaluate whether the redesign was actually solving the right things. The PM initially estimated a six-month path from early design through implementation.
{{< problem
title="Forms were too hard to find and track"
>}}
This was perhaps the chief user complaint and the most immediately obvious usability issue. The app distinguished forms that were _requested_ by the school to be completed, versus those _initiated_ by the end user from a collection of available forms.
Users had to remember how a form had been started just to find it again, and unfinished work was treated differently in both sections. **These distinctions didn't matter to the user** who just wanted to get in and get out.
{{< figure
src="img/problem-find.png"
alt="Screenshots of the old UI showing the different locations for forms"
caption="Users needed to remember if they responded to a form request (_left_) or if they started the form from their often massive library (_right_)" >}}
Highlighting this issue were the three distinct paths for a user to find the forms they submitted:
* **Dashboard**: at the bottom under the "Responded" section. This only showed recently submitted forms originally requested by a school.
* **Form Library**: again at the very bottom below the long list of available forms to start, containing the users self-initiated forms. This location often prevented users from ever discovering them.
* **My Account, then "All eForm Responses"**: contained only the user's "eForm" responses, which was another word for those requested by the school. This was never clear to the user, and they often felt forms were missing from this list.
{{< /problem >}}
{{< problem
title="Critical information and alerts were buried"
>}}
One of the revelations during the project's research phase was that **94% of end users completed forms on mobile devices**. Despite this overwhelming split, the app was never thought through from a mobile perspective and critical information—like alerts or approval requests—were buried at the bottom below static information or long lists.
Pages were never optimized and often zoomed out, 2-axis scrolling was prevalent on data-dense screens or those with tables, and completing forms with data inputs that were not browser-native created more problems than they solved.
{{< figure
src="img/problem-critical.png"
alt="Screenshots of the old UI showing that critical information was hard to find"
caption="Certain critical action items—like pending form approvals or student safety alerts—were buried at the bottom on mobile with no indication up top." >}}
{{< /problem >}}
{{< problem
title="Navigation was complex and frustrating"
>}}
Users needed to answer simple questions like "What do I need to complete?" and "What is urgent for me to do," but the navigation and terminology reflected internal product logic and developer-speak instead of what made sense to the user.
* Responders found it difficult to find forms saved for later.
* Staff found it difficult to locate self-service forms, and with lists of often 50 or more, the lack of a search or filter made this impossible.
* Parents found the mobile app generally difficult to navigate.
* Staff who needed to approve certain forms were unable to see the approval once they submitted their response, and they blamed the navigation for this failure.
{{< /problem >}}
{{< problem
title="Managing forms across multiple children felt confusing"
>}}
Parents and staff often needed to act on behalf of multiple children or schools, but the interface didn't make it clear enough when it mattered.
Simple things made it harder for users to quickly scan, like only showing the school or group avatar instead of the student that the form was requested for. Users could easily lose track of whose information they were viewing or updating, or bounce around the app to check first.
{{< figure
src="img/problem-multiple.png"
alt="Screenshots of the old UI showing how difficult the experience was for parents of multiple kids"
caption="Parents of multiple children found it difficult to quickly identify which form was for whom. Even though the names are there, the redundant avatars and group information required extra thought." >}}
{{< /problem >}}
{{< /problems >}}
{{< section id="context" title="Delivery context" >}}
The design problems themselves were clear enough, and we estimated roughly six months from early design through implementation.
A bunch of compounding delivery constraints, however, stretched this closer to _eighteen months_: distributed collaboration across many timezones, changing design direction, parallel system work, technical debt, and a product brief that changed too many times while the work was already underway.
This project reinforced one of my strongest product design beliefs: everything flows from the product brief. A well-researched and properly scoped product brief is what gives design and development a stable framework. Had this been done, all of the other issues below would have been totally manageable.
The original brief was directionally right but not validated enough up front, so scope changed in both directions as we learned more. That forced us to revisit work that had already been designed and restart discussions that should have been settled earlier.
The biggest example was multi-student handling. NYC's model—where users switched between separate student accounts—differed from how every other other customer used the product. This was well known, but because the value of that use case was not fully understood or incorporated into the brief early enough, we spent months researching and designing for cases that ultimately did not need a universal solution or would have worked for NYC's specific case.
The PM and I were based on the US east coast, while the development team was based in Australia. We made it work with weekly status calls at 8pm eastern to create some overlap, but the timezone gap slowed normal iteration.
Questions that might have been resolved in a Slack message turned into a full-day delay, and that was amplified by the fact that the team had no dedicated frontend specialist and needed more design support than usual during implementation.
At the same time of this project, Honeycomb, our design system, was under active development and beginning to show up in other platform products. This created a recurring strategic question: should this redesign fully adopt Honeycomb, or should it act as more of a stopgap refresh that preserved more of the existing product? Because leadership never fully committed to one path early enough, the design work sometimes had to serve both goals at once.
That ambiguity led me to create a temporary bridge between the legacy Wallabyte interface and Honeycomb so the team could keep moving. It helped in the short term, but it also created rework later when parts of that hybrid approach needed to be unwound.
Day-to-day design direction also caused delay as visual and IA decisions were often revisited after work had already advanced, usually in ways that reflected aesthetic preference more than product or implementation reality. In practice, that meant screens changed without a shared review process, and patterns I had already aligned with engineering or the PM sometimes had to be revisited.
The app header was a perfect example of overthinking and tinkering to a fault. We had a version of the common header design ready in our design system and it made sense to introduce that part of the design system now—it wasn't that much different than the current header.
Personal preference wedged its way in and a senior design leader felt strongly that the header's background color needed to signal the user's account type (parent, staff, approver, etc.).
We spent months alone on the header design, ultimately landing on the new Honeycomb header. This was an own-goal that could've been avoided any number of ways, and perhaps most efficiently through validating early on that user awareness of their account type was not an issue at all.
The codebase itself was old and carried substantial technical debt. This alone is not a huge issue! I've spent years working with developers on old tech stacks and sometimes even prefer it.
The team, however, chose to address some foundational frontend concerns at the same time as this refresh, including introducing Tailwind to make future UI work faster and more consistent. While I understood the logic, it meant the redesign was competing with platform modernization work rather than simply being layered onto a stable front end.
The original brief was not good enough
A distributed team made day-to-day collaboration slower
We were redesigning the product while also creating a larger design system
Direction changed too often inside the design process
Technical debt and platform changes were taken on in parallel