In generale dovresti progettare attorno alla funzionalità.
Il ragionamento alla base di questo è che il tuo cliente avrà un'idea per un sistema in mente, e tuttavia non avrà davvero tutti i dettagli risolti. Queste sono cose che dovrai prendere in giro nel tempo, e sono cose che potrebbero - e molto probabilmente cambieranno -. Quando inizi con la GUI, chiedi al cliente di mettere tutte le sue idee sullo schermo, e tuttavia hai perso l'opportunità di avere una visione imparziale dei processi e delle funzionalità di cui il cliente ha bisogno. Certo, potrebbero avere molti dei loro bisogni definiti con il modo in cui potrebbero sembrare uno schermo, ma senza capire il flusso di lavoro critico e i problemi di gestione dei dati, si ottiene solo una piccola parte dell'immagine in primo piano. Le GUI possono essere pignoli per avere ragione, e puoi trovarti a spendere un sacco di tempo su di loro, il che potrebbe rischiare di finire il tempo per fare il serio back-end, e basandoti sulla GUI per dettare il design generale, si rischia di creare una dipendenza tra l'interfaccia utente e il back-end.
L'avvio del contrario sembra meno intuitivo per molte persone (incluso il cliente), ma in seguito può farti risparmiare molto mal di cuore. Mentre da un lato si desidera prendere decisioni importanti fino all'ultimo momento, avere tutte le informazioni possibili in anticipo vi permetterà una certa flessibilità nel modo in cui implementate un sistema. Avrai bisogno di sapere in anticipo se gestirai grandi volumi di dati e se comunicherai quei dati oltre i confini del PC locale dell'utente. Avrai bisogno di un sistema distribuito, N-Tier, Web-Based, ecc.? Conoscere questa roba in primo piano ti dà il tempo di ricercare le opzioni mentre codifichi le tue regole aziendali in librerie che potrebbero esistere in quasi tutte le configurazioni.
Qualcos'altro su cui ponderare, è che potresti voler consegnare un intero sistema alla fine, o programmare importanti rilasci di pietra miliare, o rilasciare in modo incrementale nello stile Agile. Quando si inizia con la GUI, si blocca il cliente in una particolare modalità di pensiero, cioè in come il software verrà percepito. Se inizi con il back-end e rilasci in modo incrementale, puoi costruire un'interfaccia rudimentale e dire al tuo cliente che si tratta semplicemente di fornire un mezzo per condurre un test controllato di funzionalità, in modo che il cliente possa decidere il modo migliore per presentare tale funzionalità ai loro utenti, mantengono il loro marchio e così via. A partire dalla GUI si limiterà a limitare il pensiero di tutti in termini di possibilità di presentazione di essere prevenuti verso ciò che tutti vedono per primi.