Bei solchen Sachen gibts ja immer ganz verschiedene Ansätze - und es kommt auch immer darauf an, was man denn nu macht.
Bei dem Entwurf von Internetseiten - bzw. dem Design derselben hab ich immer erstmal papier und stift benutzt um mir Gedanken zu machen, was ich erreichen will... einen sog. Anforderungskatalog (Requirements)... daran kann man eine Analysephase anknüpfen in der man dann schon mehr in die Details geht, wie man z.B. irgendwas umsetzen kann (welche Programmiersprache, Tools, Infrastruktur wird benötigt...) ... sowas nennt man in der Industrie auch gerne Requirements Engineering

... also eigentlich gehört dazu noch mehr.. aber im Prinzip bezeichnet dieser hübsche Begriff den gesamten Bereich vom Aufstellen der Requirements bis hin zur Erstellung des Pflichtenhefts für den Kunden.
Wenn man quasi selbst der Kunde ist - fällt dabei ne ganze Menge weg

- aber die Frage "Was will ich erreichen - welche Unterziele kann ich dabei setzen?" ist schon gut zu stellen... und mit Hilfe dieser Anforderungen kann man dann zusehen, wie man's denn umsetzen kann.
Wenn jetzt nur das Design der Seite im Raum steht, kommen dann schnell Skizzen der Seiten dazu, die den Aufbau der Seite beschreiben... meinetwegen kann man auch die Navigationsstruktur skizzieren mit "Flussdiagrammen".
Bei der Programmierung wirds dann schon interessanter. Dabei kommt es auch ein wenig auf das verwendete Programmier-Paradigma an. Wenn man objektorientiert arbeitet, ist eine entsprechende Designphase fast unabdingbar... (ob die dann nur im Kopf stattfindet ist ja egal

). In einer solchen Phase kann man verschiedene Techniken eines Softwareengineers anwenden, um die Arbeit vernünftig strukturieren zu können... die statische Struktur eines Entwurfs - und die sog. Architektur eines Systems sind die primären Faktoren beim Entwurf einer Software oder was auch immer...
Die Architektur beschreibt dabei sowohl den statischen Aufbau (kann man z.B. mit Klassendiagrammen sehr gut erledigen) als auch die Interaktionsmöglichkeiten der Einzelkomponenten (Klassen)... was man nicht mehr so gut mit objektorientierter Methodik hinbekommt... da hilft es Blockdiagramme zu malen bei einfachen Projekten... damit man am Ende wirklich weiß, welche Komponenten mit welchem Verhalten mit anderen Komponenten zusammenarbeiten müssen, damit das ganze harmonisch zusammenpasst.
Selbst wenn man großer Anhänger des sog. Extreme Programmings ist

- ein Buzzword der letzten Jahre, kommt man häufig zumindest nicht um die statische Struktur einer Software herum... solche Designentscheidungen sind die, die man später am schwierigsten ändern kann, daher muss man sich da wirklich vernünftig gedanken drüber machen. Bei anderen Dingen kann man erstmal versuchen die obersten Anforderungen zu erfüllen - wenn man dann feststellt, dass man nicht hinkommt - die grobe Struktur aber stimmt - kann man sog. Refactoring betreiben um das Design entsprechend zu verfeinern...
Also ganz grob gesagt - ich würd immer nen Mittelweg gehen... Konzepte aufstellen, Anforderungen aufsetzen, das ganze Analysieren, Design machen (Struktur festlegen) und dann loslegen mit der Implementierung... und je nachdem wie gut das Design war, kann man dann innerhalb der Implementierungsphase tatsächlich noch einiges anpassen...
Wenn das Design schlecht war, kommt man schnell zu dem Punkt, dass man bei geänderten Anforderungen (selbst wenn diese nicht so groß waren), das ganze Projekt beerdigen muss, alles wegschmeißen kann und von vorne programmieren muss

... und das will man ja meist dann doch vermeiden.