Em teoria, existem pelo menos cinco abordagens possíveis.
Careca:
Comece com simulações da interface do usuário ou um protótipo de papel. Transforme-os em diálogos reais e trabalhe da maneira que deseja, desde os manipuladores de botão e outros controles até a lógica e o banco de dados.
Debaixo para cima:
Comece com as estruturas de dados (provavelmente o esquema do banco de dados). Em seguida, adicione lógica (modelando processos do mundo real); finalmente, sua interface do usuário é apenas uma interface para acionar a lógica e exibir os resultados.
Lógica primeiro:
Comece com a lógica do programa, implementando o acesso a dados e uma interface do usuário rudimentar, conforme necessário. Formalize e reforce as estruturas de dados e, finalmente, aprimore a interface do usuário corretamente.
Conheça no meio:
Comece com o esquema do banco de dados e a interface do usuário e trabalhe simultaneamente para o ponto em que eles se encontram. Com essa abordagem, a lógica vem por último.
Expansão horizontal:
Comece identificando a quantidade mínima absoluta de funcionalidade que faria algo interessante e implemente toda a pilha (estruturas de dados, lógica e interface do usuário) desta parte. Poderia ser apenas um ciclo CRUD básico com uma caixa de diálogo de edição simples para apenas uma entidade. Em seguida, comece a adicionar mais recursos, implementando toda a pilha para cada recurso (daí 'horizontal').
Cada um deles tem prós e contras.
De cima para baixo fornece algo visível no início do processo e permite que você verifique seu design funcional com as partes interessadas - as simulações geralmente dizem aos usuários mais sobre um design do que fluxogramas ou paredes de texto.
De baixo para cima, você tem a chance de criar um esquema de banco de dados sólido antes de se comprometer com qualquer coisa; como um esquema de banco de dados é notoriamente difícil de modificar uma vez liberado, você deseja acertar esta parte - o impacto da modificação de uma interface do usuário é muito menor e produz bugs cada vez menos graves.
Primeiro a lógica significa que você pode testar a lógica antes de gastar muito tempo no banco de dados e na apresentação, o que é especialmente interessante se sua lógica for realmente complexa.
O meet-in-the-middle combina as vantagens de baixo para cima e de cima para baixo, mas você terá que alternar entre duas tarefas e corre o risco de acabar com uma lógica mais complexa do que o necessário, porque suas duas terminações. não se encontram naturalmente.
A expansão horizontal funciona bem com um fluxo de trabalho iterativo e tem a vantagem adicional de que, se você priorizar bem, terá um aplicativo em funcionamento a qualquer momento; portanto, se você não cumprir um prazo, terá uma versão com menos recursos, mas ainda é totalmente funcional, ao contrário de uma versão que possui um banco de dados completo, mas sem interface do usuário.
Então, qual você escolhe depende do seu estilo pessoal e das circunstâncias.