App utenti User app
- Sosta & TPLParking & transit
- Calcola percorsoTrip planner
- Live Activities + SiriLive Activities + Siri
- Mobilità condivisaShared mobility
L'ecosistema era già maturo. La sfida non era aggiungere funzionalità, ma far parlare la stessa lingua a prodotti cresciuti su superfici diverse. App utenti, operatori sul campo, backoffice e frontend web — quattro superfici, cinque aziende, quattro città. Un unico sistema da rendere riconoscibile, coerente e mantenibile. The ecosystem was already mature. The challenge wasn't adding features — it was making products grown on different surfaces speak the same language. User app, field operators, backoffice, and web frontends — four surfaces, five companies, four cities. One system to make recognisable, coherent, and maintainable.
Per ragioni contrattuali, nomi, schermate e dati sensibili sono stati anonimizzati. Il processo progettuale, le decisioni e le logiche di prodotto rimangono rappresentati fedelmente. For contractual reasons, names, screenshots and sensitive data have been anonymised. The design process, decisions and product rationale remain faithfully represented.
Come ho studiato il sistema prima di toccarlo. How I studied the system before touching it.
Una piattaforma cresciuta per quasi un decennio, dentro un solo ecosistema, su quattro superfici diverse. A platform grown over nearly a decade, inside one ecosystem, across four different surfaces.
La suite è nata nel 2013 come piattaforma di gestione sosta per una singola città. Negli anni si è estesa al trasporto pubblico locale, alla mobilità condivisa, ai servizi turistici. Oggi è in produzione su cinque aziende clienti in quattro città italiane, in modalità white-label: ogni azienda la usa col proprio branding, le proprie tariffe, i propri flussi di approvazione. The suite started in 2013 as a parking management platform for a single city. Over the years it expanded to public transport, shared mobility, tourist services. Today it runs in production across five operators in four Italian cities, white-label: each company runs it under its own branding, tariffs, and approval flows.
L'ecosistema vive su quattro superfici — ognuna pensata per un attore diverso, ognuna con un proprio ritmo d'uso. Tutte poggiano sullo stesso backbone dati ma per anni hanno parlato linguaggi diversi: terminologia incoerente, status non normalizzati, pattern UI che si ripetevano in tre modi diversi a seconda della pagina. The ecosystem lives on four surfaces — each built for a different actor, each with its own usage rhythm. They all sit on the same data backbone, but for years they spoke different languages: inconsistent terminology, non-normalized statuses, UI patterns repeated three different ways depending on the page.
Lead designer su tre superfici su quattro. Backoffice cloud: ridisegnato per intero, dall'audit alla messa in produzione. App utenti: ho riportato in superficie funzioni nascoste (calcola percorso), ideato e disegnato tutte le Live Activities e l'integrazione Siri, ottimizzato i flussi chiave. Frontend web: tre piattaforme, una per servizio, ideate da zero — IA, flow, UI, prototipi. Lead designer on three out of four surfaces. Cloud backoffice: full redesign, from audit to production. User app: surfaced hidden features (trip planner), conceived and designed all Live Activities and Siri integration, optimized key flows. Web frontends: three platforms, one per service, conceived from scratch — IA, flow, UI, prototypes.
In produzione da quasi dieci anni, nessuna manutenzione evolutiva. Sintomi ovunque. In production for nearly ten years, no evolutionary maintenance. Symptoms everywhere.
La piattaforma era cresciuta per accumulo, non per scelta. Ogni nuovo modulo aveva ereditato i pattern di chi era venuto prima, perpetuando incoerenze. Stati visualizzati come testo nudo in cinque forme diverse, ventisette ruoli in snake_case inglese dentro un'interfaccia italiana, una sidebar con diciassette voci di primo livello cresciute per stratificazione storica. The platform had grown by accumulation, not by choice. Each new module inherited the patterns of whoever came before, perpetuating inconsistencies. Statuses displayed as plain text in five different forms, twenty-seven roles in English snake_case inside an Italian interface, a sidebar with seventeen top-level entries grown by historical layering.
Il risultato operativo era che il backoffice non era affidabile. Gli operatori avevano costruito i propri sistemi di compensazione fuori dall'applicazione — database Access locali, registri Excel paralleli, post-it sui monitor. Ogni volta che una richiesta sfuggiva, partiva una telefonata, e dalla telefonata un ticket. The operational outcome: the backoffice was not reliable. Operators had built their own workarounds outside the app — local Access databases, parallel Excel registers, post-its on monitors. Every time a request slipped through, a phone call followed, and from the call a ticket.
17 voci di primo livello in sidebar · sezione Sosta esplosa in 10 sotto-voci. 17 top-level sidebar entries · Parking section bloated to 10 sub-entries.
27 ruoli in snake_case inglese nel modello permessi · niente descrizione in UI. 27 roles in English snake_case in the permission model · no UI description.
5+ forme per gli stati: terminated · pending · Approvato · attivo · Da Approvare.
5+ forms for statuses: terminated · pending · Approvato · attivo · Da Approvare.
Date in formato tecnico YYYY-MM-DD HH:MM:SS ovunque, mai localizzate.
Dates in tech format YYYY-MM-DD HH:MM:SS everywhere, never localized.
Bootstrap 3 · sidebar non collassabile · niente modalità compact · tabelle senza header sticky. Bootstrap 3 · non-collapsible sidebar · no compact mode · tables without sticky headers.
Access locali, registri Excel paralleli, post-it sui monitor — sistema non fidato. Local Access DBs, parallel Excel registers, post-its on monitors — system not trusted.
Calcola percorso nascosto in pagina dedicata · usato dal 10% dell'utenza TPL. Trip planner buried in a dedicated page · used by 10% of transit users.
Inesistenti · chi non aveva l'app andava in sportello fisico o mandava mail. Nonexistent · non-app users walked into the front-office or sent an email.
"Per certi titoli ci eravamo costruiti un Access in locale: senza, non riuscivamo a tenere il conto." "For some titles we'd built a local Access database — without it, we couldn't keep track." Operatore di backoffice · sintesi da intervista Backoffice operator · paraphrased from interview
Prima il metodo, poi la decisione. Method first, decision later.
In una piattaforma con così tanto debito tecnico e così tanti utenti reali, partire dal "ridisegnamo le schermate brutte" sarebbe stato suicida. Ho lavorato in quattro fasi sequenziali, ognuna con un output negoziabile col team prima di passare alla successiva. In a platform with this much technical debt and this many real users, starting from "let's redesign the ugly screens" would have been suicidal. I worked in four sequential phases, each producing a deliverable negotiated with the team before moving on.
12 interviste in 4 tornate su 2 clienti. Walkthrough pagina per pagina. Analisi storica dei ticket. 12 interviews across 4 rounds with 2 clients. Page-by-page walkthrough. Historical ticket analysis.
Problemi funzionali, problemi interfaccia, nice to have. Otto principi cross-section emergenti. Functional, interface, nice-to-have. Eight cross-section principles emerging.
Conservativa (17→13) · per dominio (17→9) · per workflow. Confronto esplicito di rischio. Conservative (17→13) · by domain (17→9) · by workflow. Explicit risk comparison.
Per dominio operativo. Riflette il lavoro reale di chi sta al banco. Adottata dai clienti. By operational domain. Mirrors how front-desk staff actually work. Adopted by clients.
12 sessioni in 4 tornate, su 2 clienti. Sportello, supervisori, verifier. 12 sessions in 4 rounds, with 2 clients. Front-desk, supervisors, verifiers.
Pagina per pagina su tutto il backoffice. Problemi categorizzati. Page by page across the entire backoffice. Issues categorized.
Storico di assistenza e workaround operativi. Support history and operational workarounds.
Funzionali · interfaccia · nice to have — più otto principi cross-section ricorrenti. Functional · interface · nice-to-have — plus eight cross-section principles recurring.
Regole applicate a oltre 100 pagine. Diventano il sistema di design. Rules applied to 100+ pages. They become the design system.
A conservativa · B per dominio · C per workflow. Adottata la B. A conservative · B by domain · C by workflow. B adopted.
Tre profili compositi emersi dalle interviste — sintesi reali, non personaggi inventati. Three composite profiles emerging from the interviews — real syntheses, not invented characters.
Vede decine di utenti al giorno. Attiva titoli speciali, gestisce richieste cartacee, rilascia tessere, risolve casi al volo. Lavora sotto pressione di coda fisica. Sees dozens of users a day. Activates special titles, handles paper requests, issues cards, resolves cases on the fly. Works under physical-queue pressure.
"Quando ho la coda davanti, mi rendo conto che ogni passaggio in più lo paghi. Anche solo aspettare che si carichi un'altra pagina, quando hai gente che ti guarda, è tanto." "When I've got a queue in front of me, every extra step costs you. Even just waiting for another page to load, with people watching, feels like a lot."
Coordina i controllori in turno, monitora la copertura zone, gestisce le segnalazioni. Vive su mappe live e dashboard. Decide dove muovere risorse in tempo reale. Coordinates field controllers, monitors zone coverage, handles user reports. Lives on live maps and dashboards. Decides where to move resources in real time.
"Sulla mappa vedo i puntini, ma se non capisco al volo chi sto guardando — chi è in turno, chi è in pausa — io non lo posso spostare nessuno." "I see the dots on the map, but if I can't tell at a glance who I'm looking at — who's on shift, who's on break — I can't move anyone around."
Verifica scansioni di titoli sosta e viaggio, indaga le anomalie nello storico, valida le contestazioni delle multe. Consulta tabelle ogni giorno, su mesi di dati. Reviews parking and transit ticket scans, investigates historical anomalies, validates fine disputes. Queries tables daily, across months of data.
"Mi capita di dover guardare tipo ventotto pagine di tabella dove c'è scritto 'Valido' ovunque, e devo trovare quello strano in mezzo. Non sai mai dove sta, e ci perdi mezza mattinata." "Sometimes I have to scan twenty-eight pages of table where every row says 'Valid', and I have to find the odd one out. You never know where it is, and there goes half your morning."
Una grammatica unica, tre superfici diverse. One grammar, three different surfaces.
La grammatica del rework — otto regole, valide su decine di pagine. The grammar of the rework — eight rules, valid across dozens of pages.
Ridisegnare cento pagine senza un sistema avrebbe perpetuato il problema iniziale. Ho estratto otto principi trasversali dall'audit, ognuno valido su decine di pagine. Quando un problema si è ripresentato in una nuova schermata, non l'ho risolto caso per caso: ho applicato il principio. Questo ha dimezzato il tempo di disegno della seconda metà del backoffice e ha reso il sistema mantenibile dopo il mio passaggio. Redesigning a hundred pages without a system would have perpetuated the original problem. I extracted eight cross-cutting principles from the audit, each valid across dozens of pages. When a problem reappeared on a new screen I didn't solve it case by case: I applied the principle. This halved the design time of the second half of the backoffice and made the system maintainable past my involvement.
27 ruoli snake_case → 6 aree in italiano con descrizione. 27 roles in snake_case → 6 areas in Italian with descriptions.
5 forme in 3 lingue → badge semantici in italiano. 5 forms in 3 languages → semantic badges in Italian.
8 grafici identici → KPI + 1 trend + bar chart top-N. 8 identical charts → KPIs + one trend + top-N bar chart.
Firstname, Search → italiano coerente + glossario.
Firstname, Search → coherent Italian + glossary.
"OK" blu su Elimina → Elimina sempre rosso, secondary per annulla. Blue "OK" on Delete → Delete always red, secondary to cancel.
28 pagine di "Valido" → filtro per stato + sticky header + compact. 28 pages of "Valid" → filter by status + sticky header + compact mode.
"Totale: 396" inline → card con dato grande + varianza esplicita. "Total: 396" inline → cards with large numbers + explicit variance.
Stati piatti, no azioni → Richiesta → Approvata → Chiusa, azioni in riga. Flat states, no actions → Request → Approved → Closed, inline actions.
I principi non sono rimasti astratti. Il principio 04 (lingua) ha generato un glossario condiviso col team dev — sei termini canonici che hanno sostituito decine di sinonimi convivevano sulle pagine. Principles didn't stay abstract. Principle 04 (language) produced a shared glossary with the dev team — six canonical terms replaced dozens of synonyms that used to coexist across pages.
Un backoffice ridisegnato da zero — dall'audit alla messa in produzione. A backoffice redesigned from scratch — from audit to production.
Diciassette voci di primo livello erano cresciute per stratificazione. Verifiche e posizioni controllori erano spezzate per ambito invece che per funzione. La Sosta era esplosa in dieci sotto-voci con nomi sovrapponibili. La struttura finale raggruppa per dominio operativo: ogni macro-area in sidebar riflette il modo in cui un operatore pensa al proprio lavoro, non il modo in cui il backend organizza i moduli. Seventeen top-level entries had grown by stratification. Verifications and controller positions were split by domain instead of function. Parking had exploded into ten sub-entries with overlapping names. The final structure groups by operational domain: each sidebar macro-area mirrors how an operator thinks about their work, not how the backend organizes its modules.
L'app era già potente. Il problema non era costruire, era riportare in superficie. The app was already powerful. The problem wasn't building, it was surfacing.
Sosta, TPL, mobilità condivisa, servizi turistici: tutto già presente, tutto già funzionante. Il problema era riportare in superficie le funzioni esistenti e dare loro un'integrazione di sistema operativo che le moltiplicasse — Live Activities, Siri, una home che mostrasse la prima azione utile invece di nasconderla in una pagina dedicata. Parking, transit, shared mobility, tourist services: all present, all working. The problem was bringing existing features to the surface and giving them OS-level integration that would multiply them — Live Activities, Siri, a home screen showing the first useful action instead of burying it.
Prima del rework, calcolare un percorso TPL richiedeva due tap: aprire il burger menu e cercare la voce tra le altre, con label poco evocative. Appena il 10% degli utenti TPL la trovava. Chi la scopriva ci tornava regolarmente — la funzione era buona, la sua superficie no. L'ho rimessa al centro della home con un pattern di morphing: il pulsante centrale della tab bar e una barra di ricerca compatta si scambiano di posto a seconda del contesto. Before the rework, calculating a transit route required two taps: opening the burger menu and hunting for the entry among the others, with weak labels. Barely 10% of transit users found it. Those who did discover it kept coming back — the feature was good, its surface wasn't. I brought it back to the center of the home with a morphing pattern: the tab-bar center button and a compact search bar swap places depending on context.
L'unico accesso è il burger. Calcola percorso non è una voce visibile in home. The only access is the burger. Trip planner is not visible on home.
"Calcola un percorso" — visibile in home, sempre. "Plan a trip" — visible on home, always.
Trovo "Calcola percorso" tra altre 6 voci di menu, con label poco evocativa. "Trip planner" sits among 6 other menu entries, with a weak label.
Animazione di sistema · niente cambio pagina · niente perdita di contesto. System animation · no page change · no loss of context.
Niente geolocation, niente CTA su titoli. Molti utenti escono dal flow. No geolocation, no ticket CTAs. Many users drop out.
Inverti capolinea, salva itinerario, → attiva o acquista il titolo digitale. Swap endpoints, save itinerary, → activate or buy the digital ticket.
degli utenti TPL la usava abitualmente. Chi la scopriva tornava — ma erano pochi. of transit users used it regularly. Those who discovered it kept coming back — but few did.
utenza ricorrente più che triplicata. Oltre il 70% di chi avvia un itinerario attiva un titolo digitale. recurring users more than tripled. Over 70% of those who start an itinerary activate a digital ticket.
Tre attività live. La sosta attiva: timer in conto alla rovescia, CTA "Estendi" raggiungibile dal lock screen. Il TPL "prossima fermata": parte automaticamente quando i beacon a bordo bus rilevano l'utente. L'itinerario: la più densa, mostra quante fermate mancano alla destinazione, quale autobus prendere al prossimo cambio, ETA al capolinea. Three live activities. Active parking: countdown timer, "Extend" CTA reachable from the lock screen. Transit "next stop": auto-starts when on-board beacons detect the user. Itinerary: the densest, shows how many stops to destination, which bus to take at next change, ETA at the endpoint.
L'itinerario è la live activity di cui sono più soddisfatto. Lo spazio della Dynamic Island e del lock screen è poco, le informazioni sono molte, l'utente sta camminando o è in piedi su un bus che balla. Ho dovuto trovare una grammatica che permettesse di leggere lo stato in mezzo secondo: la fermata corrente in grande, il countdown alla destinazione in evidenza, il cambio bus segnalato solo quando imminente. The itinerary is the live activity I'm most satisfied with. Dynamic Island and lock-screen space is scarce, information is dense, and the user is walking or standing on a bouncing bus. I had to find a grammar that allowed reading the state in half a second: the current stop large, the countdown to destination prominent, the bus change signaled only when imminent.
La sosta è un'azione ricorrente, ripetuta più volte al giorno. Ho integrato Siri per coprirla in voice — avviare, fermare, estendere — senza dover toccare il telefono. Per chi paga la sosta tutti i giorni, è la differenza tra aprire l'app cinque volte e dire una frase. Parking is a recurring action, repeated multiple times a day. I integrated Siri to cover it in voice — start, stop, extend — without touching the phone. For someone paying for parking daily, it's the difference between opening the app five times and saying a sentence.
Sui flussi chiave ho lavorato in modo sistematico — richiesta abbonamenti, iscrizione scuolabus, ricarica credito, pagamento titoli. Stessa ricetta: rimuovere campi che si possono derivare, anticipare il default, ridurre i tap, dare conferma visibile a ogni step. Niente di rivoluzionario, applicato con costanza su sei mesi. On key flows I worked systematically — subscription requests, school-bus enrollment, top-ups, ticket payments. Same recipe: remove fields that can be derived, anticipate defaults, reduce taps, give visible confirmation at every step. Nothing revolutionary, applied consistently over six months.
Tre canali web per chi non ha l'app — e una frizione che si dimezza. Three web channels for those without the app — and friction that halves.
Un pezzo di mondo non era coperto: i cittadini senza smartphone, o con smartphone ma riluttanti a installare un'altra app, o per servizi sporadici come l'iscrizione scuolabus. Per anni questa fetta si era dovuta presentare in sportello fisico o mandare mail. A slice of the world wasn't covered: citizens without smartphones, or with smartphones but reluctant to install another app, or services that are sporadic like school-bus enrollment. For years this slice had to walk into the front-office or send an email.
Ho ideato e disegnato tre frontend web indipendenti — uno per titoli di sosta speciali, uno per iscrizione scuolabus, uno per prenotazione bus turistico. Servizi diversi, utenti diversi, ma stessi vincoli progettuali e stessa grammatica visiva del backoffice: tipografia editoriale, label esplicite, errori chiari, conferma visibile a ogni step. I conceived and designed three independent web frontends — one for special parking titles, one for school-bus enrollment, one for tourist-bus booking. Different services, different users, but the same design constraints and the same visual grammar as the backoffice: editorial typography, explicit labels, clear errors, visible confirmation at every step.
I form sono lunghi per natura — soprattutto lo scuolabus, il più denso — e li ho costruiti come progressioni a step lineari: stato di avanzamento sempre visibile, salvataggio della bozza automatico, autocomplete indirizzo, upload documenti con preview e validazione client-side. Niente reload, niente perdita di dati a metà compilazione, niente "errore" senza spiegazione. Forms are long by nature — especially school bus, the densest — and I built them as linear step progressions: progress always visible, automatic draft saving, address autocomplete, document upload with preview and client-side validation. No reloads, no data loss mid-fill, no "error" without explanation.
La leva moltiplicatrice è stata l'integrazione diretta col backoffice. Le richieste compilate sui frontend web entrano nel backoffice già strutturate, già validate, già pronte per essere approvate in un clic. Anche quando l'utente si presenta comunque allo sportello, l'operatore apre la stessa interfaccia web a fianco e la usa come scheda di inserimento — niente doppia digitazione, niente errori di trascrizione. The multiplier was direct backoffice integration. Requests filled on the web frontends enter the backoffice already structured, already validated, ready to be approved in one click. Even when the user shows up at the desk anyway, the operator opens the same web interface alongside as a direct entry sheet — no double-typing, no transcription errors.
Tre piattaforme, oggi in produzione su tre dei cinque clienti. L'effetto cumulativo è netto: il frontoffice fisico si è ridotto di circa la metà, le pratiche scorrono più velocemente, gli operatori passano meno tempo a riscrivere e più tempo a risolvere casi reali. Three platforms, in production today on three of five clients. The cumulative effect is sharp: the physical front-office has been cut roughly in half, requests move faster, and front-desk operators spend less time re-typing and more time solving real cases.
Cosa è realmente cambiato, e cosa mi sono portato via. What actually changed, and what I took away.
I numeri arrivano dopo. Prima dei numeri, la cosa concreta che è cambiata è la giornata. Numbers come later. Before the numbers, what concretely changed is the day.
Sotto, quattro momenti di una giornata-tipo di operatore prima e dopo il rework. Le metriche subito dopo confermano il pattern. Below, four moments of a typical operator day before and after the rework. The metrics that follow confirm the pattern.
Quattro pagine aperte — anagrafica, titoli, tessere, ricariche — una per scheda. L'operatore salta tra tab per ricostruire chi ha davanti. Four open pages — records, titles, cards, top-ups — one per tab. The operator hops between tabs to piece together who's in front.
Scheda cliente unificata: tutto su una sola pagina, con tab interne. La storia dell'utente sta sotto un colpo d'occhio. Unified customer card: everything on one page, with internal tabs. The user's history sits under one glance.
L'operatore apre l'Access locale — il workaround per non perdere i titoli che il backoffice gestiva male. The operator opens the local Access DB — the workaround built to avoid losing titles the backoffice mishandled.
Tutti i titoli vivono nella scheda del cliente. Access dismesso: il sistema è di nuovo l'unica fonte di verità. Every title lives in the customer card. Access retired: the system is the single source of truth again.
Campi non editabili dall'UI. Per ogni correzione, script ad hoc sul DB o chiamata al team di sviluppo. Fields uneditable from the UI. Every correction means ad-hoc DB scripts or a call to the dev team.
Edit inline, validazione client automatica, audit log integrato. Ogni cambiamento è tracciato e reversibile. Inline edit, automatic client-side validation, built-in audit log. Every change is tracked and reversible.
"terminated" come testo nudo, in inglese, da decodificare ogni volta. Nessun filtro per stato in tabella. "terminated" as plain English text, decoded every time. No status filter in the table.
Badge colorato in italiano, riconoscibile a colpo d'occhio. Il filtro per stato vive come tab in cima alla tabella. Coloured Italian badge, glanceable. The status filter lives as tabs at the top of the table.
Otto numeri · sei mesi dopo il rilascio · cinque clienti in produzione. Eight numbers · six months post-release · five clients in production.
Tutte le metriche sono in range smussati rispetto ai numeri interni, per integrità del NDA. I dati reali sono ovunque più alti — il punto è il pattern, non la cifra puntuale: ogni superficie del prodotto è oggi più usata, più velocemente, da più persone, con meno frizione. All metrics are in conservative ranges relative to internal numbers, for NDA integrity. Real figures are everywhere higher — the point is the pattern, not the exact figure: every surface of the product is today used more, faster, by more people, with less friction.
Tre verità di sistema che porto via dal progetto. Non valgono solo nella mobilità urbana. Three system truths I take away from the project. They hold beyond urban mobility.
Su un prodotto in produzione da quasi un decennio, la tentazione era partire dalle schermate brutte e cominciare a rifarle. Fermarsi per dodici interviste, quattro tornate, un walkthrough completo del backoffice e un'analisi storica dei ticket è sembrata, all'inizio, un'indulgenza. È stata la differenza tra una serie di cerotti e un sistema che regge. On a product in production for nearly a decade, the temptation was to start from the ugly screens and patch them up. Stopping for twelve interviews, four rounds, a full backoffice walkthrough and historical ticket analysis felt, at first, like an indulgence. It was the difference between a series of band-aids and a system that holds.
In genere, quasi tutta l'attenzione di prodotto va verso le superfici consumer — ed è giusto che vada lì. Su questa suite la leva era opposta: ticket ridotti, pratiche più veloci, e un sistema di cui chi sta al banco si fida hanno reso più fluida ogni interazione con il cittadino. La parte B2B del prodotto consumer è dove il budget di design paga gli interessi più alti. Most product attention usually goes toward consumer surfaces — rightly so. On this suite the leverage was the opposite: fewer tickets, faster requests, and a system the front-desk staff actually trusts made every interaction with the citizen smoother. The B2B side of a consumer product is where the design budget pays the highest interest.
Avere speso settimane sulle tre ipotesi di architettura informativa, prima di abbozzare una singola schermata, ha azzerato il rework di disegno. Quando ci siamo seduti a ridisegnare le pagine, la struttura era già negoziata, il design system era già chiaro, i nodi politici già sciolti. È la fase del progetto di cui sono più orgoglioso — non perché ha prodotto qualcosa di vistoso, ma perché ha permesso a tutto il resto di accadere senza attriti. Spending weeks on the three IA hypotheses, before sketching a single screen, eliminated downstream rework. When we sat down to redesign the pages, the structure was already negotiated, the design system was already clear, the political knots already untied. It's the phase of the project I'm proudest of — not because it produced something showy, but because it let everything else happen without friction.