Je vais commencer en disant que je n'ai surtout de développement web où beaucoup de l'architecture est déjà décidé à l'avance (WebForms, maintenant MVC) et la plupart de mes projets sont de taille raisonnable, une personne efforts qui ont moins d'un an. Je sais aussi que je vais avoir un ORM et DAL pour gérer mon business object et de données d'interaction, respectivement. Récemment, j'ai passé à l'aide de LINQ pour cela, de sorte que beaucoup de la "conception" devient de conception de base de données et la cartographie via le DBML designer.
Généralement, je travaille dans un TDD (test driven development). Je ne passe pas beaucoup de temps avant de travailler sur l'architecture ou de la conception de détails. Je ne recueillir l'ensemble de l'interaction de l'utilisateur avec l'application via des histoires. J'utilise les histoires de travailler sur la conception de l'interaction et de découvrir les principaux composants de l'application. Je fais beaucoup de tableau blanc au cours de ce processus avec le client, parfois capturer les détails avec un appareil photo numérique si elles semblent suffisamment important pour garder sous forme de diagramme. Principalement mes histoires de capturer en forme du récit dans un wiki. Finalement, les histoires s'organiser dans les rejets et les itérations.
En ce moment j'ai l'habitude ont une assez bonne idée de l'architecture. Si c'est compliqué ou il y a d'inhabituel bits -- des choses qui diffèrent de mes pratiques normales -- ou je travaille avec quelqu'un d'autre (pas standard), je vais diagramme de choses (encore une fois sur un tableau blanc). La même chose est vraie de la complexité des interactions -- je peut concevoir la mise en page et de flux sur un tableau blanc, de garder (ou de la capture via l'appareil) jusqu'à ce que j'en ai fini avec cet article. Une fois que j'ai une idée générale de l'endroit où je vais et ce qui doit être fait d'abord, je vais commencer à écrire des tests pour les premières histoires. Habituellement, cela se passe de la façon suivante: "d'Accord, je vais avoir besoin de ces classes. Je vais commencer avec celui-ci et il doit le faire." Puis j'ai commencer gaiement TDDing le long et à l'architecture/design se développe à partir des besoins de l'application.
Périodiquement, je vais me retrouver à vouloir écrire des bits de code encore ou penser "ce vraiment les odeurs" et je vais refactoriser ma conception à éliminer les doubles emplois ou de remplacer le malodorante bits avec quelque chose de plus élégant. Surtout, je suis préoccupé par l'obtention de la fonctionnalité vers le bas tout en suivant les bons principes de conception. Je trouve que l'utilisation de modèles connus et de prêter attention à de bons principes comme vous allez le long fonctionne assez bien.