Projetei e observei que outros projetavam vários sistemas no passado e vi o processo se desenrolar de muitas maneiras diferentes, mas o que acho comum é que a arquitetura inicial deve ao menos planejar a existência da maioria dos recursos principais.
Por exemplo, eu vi um sistema de controle de HVAC que não tinha o conceito de prédios, pisos, salas etc. sendo adaptados a eles e o resultado foi tão feio quanto possível. Ou um dispositivo de música móvel construído a partir de componentes mais adequados para o seu relógio de bolso (não inteligente). Escusado será dizer que os produtos finais em ambos os casos não eram os favoritos dos clientes.
Quando você diz "concepção", isso é apenas um passo acima da "idéia" e um conceito pode ser muito confuso. Os negócios geralmente se preocupam com conceitos. Os clientes geralmente se preocupam com o UX - um conceito trazido à realidade de uma maneira fácil e agradável de usar e que agrega algum valor ao seu uso.
Você precisa fazer o "conceito" antes de qualquer programação. Não consigo me imaginar abrindo o visual studio (ou seu IDE de sua escolha) e escrevendo código aleatoriamente, para ver aonde ele vai.
Você não pode fazer um design completo (nem deveria) antes da codificação, mas deve ter um esboço aproximado do fluxo de trabalho do usuário.
O design e a codificação de UX geralmente se alimentam mutuamente, você provavelmente será forçado a usar alguma abordagem ágil para qualquer coisa, exceto o menor dos projetos, como uma maneira de incorporar esse fato à maneira como aborda o trabalho. Portanto, não pense que você é o pior dos programadores se não puder ver tudo de uma vez - ninguém pode e as pessoas que pensam que podem são as que ignoram o suficiente do problema para poderem afirmar que têm um programa completo. cenário.
Um exemplo para colocar um tamanho em algo grande. Conceito: "Crie uma ferramenta visual baseada em nuvem que permita às empresas integrar suas plataformas de software". Parece ótimo e é possível começar a escrever material de marketing e vendê-lo antes mesmo de ele estar lá. Você precisa ter isso antes de codificar.
Pré-design: "Possui formas e setas como no Visio para descrever a lógica; possui recursos de plug-in para permitir conexões com várias plataformas (SAP, SF, bancos de dados ...); possui um console de monitoramento onde é possível pesquisar dados que passam pelo sistema; ter uma maneira de descrever os dados visualmente e transformar um formato para outro ". Outra grande bolha de marketing. Também fornece algumas idéias sobre o que é importante; deve ter um esboço tão bruto antes da codificação também.
Design / Código: "Tenha um navegador hospedado um designer de HTML com esses e outros recursos; codifique o back-end em Java para que ele possa ser executado em qualquer servidor existente; defina estruturas de dados e UX para consultá-los ou modificá-los conforme necessário; planeje recuperação de desastre, erro relatórios, registro de auditoria; controle de versão do plano; controle de acesso do plano; .... "- quanto mais fina a lista, mais irrealista é prever tudo isso.
... no entanto, deve-se estar ciente de como as coisas podem acabar parecer grosseiras ou o seu produto final pode acabar com algumas implementações realmente inúteis que acabam matando o conceito de ótima aparência - digamos que seu designer visual exija 40 " tela para mostrar qualquer fluxo de trabalho do mundo real ou não há como pesquisar os logs além de uma correspondência exata de string limitada a um dos 20 campos do log etc. etc. Não há uma boa maneira de impedir que isso aconteça além de executar sua implementação - alguns terão sucesso, outros irão falhar.