How I cut client project delivery time by 17%
Every new client project meant rebuilding familiar UI. Designers styled components in separate files; developers rebuilt them from handoff. I brought the patterns into a shared system both teams could use.
Problem
iauro designed and built products for clients. Designers kept separate project files, so familiar controls picked up new styles each time. A button in one app could look nothing like the button in the next.
That variation carried into handoff. Developers had to interpret specs and rebuild buttons, fields and modals for each project. QA then had more inconsistencies to catch, and delivery slowed.
We needed to ship faster without lowering quality as iauro took on more clients.
Each client project had its own buttons, fields and modals.
Decision
I considered two options:
-
Build a component library first
It was quick to start and would let designers reuse UI right away. But it would leave handoff issues in place, and teams might interpret components differently.
-
Build the system from a product audit
It was based on patterns teams already used, gave design and code a shared reference, and could change as teams gave feedback. But it would take time to research and audit alongside client work.
A component library would have made UI easier to reuse, but it would not fix the handoff. I chose to audit real products first, so the system reflected patterns designers and developers already knew. The audit took time, and client deadlines kept coming.
Root cause
I reviewed the process with designers and developers. The same components were restyled in Figma, rebuilt after handoff, then checked again in QA.
Design, handoff, build and QA all added repeat work.
The extra work landed on each group differently:
- Designers: UI changed between products, similar components had to be rebuilt, and teams had no shared design language.
- Developers: Custom designs took longer to build, code varied between projects and was hard to maintain, and timelines were hard to estimate.
- Business: Slow delivery hurt client satisfaction, more clients made the workload harder to manage, and rework drove up costs.
Once I saw where the time went, I looked for a fix teams would use in real projects.
Design
-
Map how teams work
I mapped how design work moved, then spoke with designers and developers about the slow spots. I reviewed common design-system practices, but kept the decisions tied to our team's needs.
-
Audit the existing UI
I reviewed interface elements across client products and grouped the patterns that kept appearing. Those became our primitives: color, type, spacing and corner radius. Then I rebuilt the components teams used most.
Repeated patterns became shared primitives and components.
I organized the Figma files around a core library. New client projects could start with those components instead of a blank file.
Every new client file could start from the core library.
-
Document and update the system
Each component page showed when to use it and how to meet accessibility standards. Designers and developers had one guide to check before they built.
Each page showed the approved button beside a common misuse.
Teams found gaps as they used the system. I updated the components and docs, then made those changes available to new projects.
A change to the core library reached future client work.
Constraints
Client deadlines kept running while I built the system. I had to deliver useful parts early, then make sure the structure could support more projects.
I built the system in phases without stopping client work.
Trade-offs
- Building components too early. I mapped how teams worked first; otherwise, the library might have solved the wrong problem.
- Shipping components without guidance. Without shared rules, each team could still interpret them differently.
- Documenting it once and stopping. I kept the docs and components open to updates as teams used the system.
Outcome
Client projects started from shared components. Designers and developers used the same guidance, so handoffs needed less interpretation. QA had fewer inconsistencies to catch.