My team built more apps than we could maintain
The two back end developers had each shipped over a dozen internal tools for a wide range of use cases, including a database of public board members, problem reports, road project management, and City Hall’s internal staff directory.
As our backlog of projects grew bigger and bigger, we needed to ship more apps in less time.
Starting with a fresh coat of paint
I focused on a visual refresh of elements that were common to the apps that were already built.
Going responsive, one small opportunity at a time.
Parking enforcement officers needed to track broken meters and the work orders to repair them—right from their City-issued phones. I seized on an opportunity to help the team do something it had never done.
Making the pattern library themable
My team proudly makes its open source software available for other cities to use, so our UI needs to be adaptable to their branding.
Generating code samples for different tech stacks.
My team consisted of two specialists: one PHP developer, and one Java developer. The design documentation and code samples needed to be equally valuable to both of them.
Planning for growth with semantic versioning
I established a workflow with the following steps:
- Build new apps using the bleeding edge version of the pattern library.
- When a new app is ready to start user testing, ship a new release of the pattern library, and update the app to use the new release instead of the bleeding edge version.
- Use semantic versioning to communicate expectations about backward compatibility.
Results
Shortly after we unveiled the new design in the Staff Directory app, one high-ranking person from another department commented: “I usually hate everything you guys do, but I like this. This is good!”
Developers were able to implement UI with little to no input.
The theme for the City website helped me win buy-in for more challenging design projects. Once I proved that a UI pattern designed for one department can be used for any other department, I was able to design a landing page for the Parks & Recreation Department.
What I learned
When getting buy-in for a design system or pattern library, lean in to the productivity benefits with stakeholders.
At the time, this was a big change for the team. There was initially some resistance from individual developers to working with a UI library like this. However, once I convinced the engineering manager of the productivity benefits, it was much easier for me to proceed.
What I would do differently
Demo pages are good. Demo pages and documentation is better. These days, I recommend that pattern libraries inform the team about:
- The maturity and API stability of each component.
- Version history.
- Guidelines about when—or when not—to use each component.
Use Web Components to make the same patterns available to different tech stacks. Instead of using Gulp and static HTML to make the same design patterns available for different development platforms, I would recommend a front-end componentization strategy. That might be using something like React or Vue, or it could be using Web Components—potentially leveraging a library like Lit or a compiler like Stencil. It depends on the team.