As a result I wrote a longish response to the post that for reason or another never got released. Anyhow, in this post I'm going to reiterate the contents of my response and expand on it a bit.
Architecture - What Is It?
Often when we are talking about architecture we refer to design of actual buildings. The concept yields itself beyond that domain of course.
Pretty much anything has an architecture. It may not be apparent at first but it's bound to be there.
Architecture can also be seen as a balancing act. It defines what something is, and perhaps more importantly, what something is not. Essentially it sets bounds for actual construction.
Architecture is often seen as something that has to be described explicitly. This does not mean it cannot be implicit, however. Sometimes it's an emergent property.
Architecture As an Emergent Propertyfractal theory.
The interesting thing about nature in particular is the fact that its structures tend to be recursive. Just consider a tree and its structure for an example.
L-systems have been designed to model this behavior. They manage to mimic nature surprisingly well.
Architecture in Software DevelopmentBoth of these views - architecture as an explicit or emergent property - can be seen in software development. Raymond uses concepts of cathedral and bazaar to characterize these views in the context of open and closed source development. Quite fitting metaphors I think. :)
How does architecture manifest itself in software development? It is possible that there is a separate architect that determines the basic structure of the application. On the other hand there may not be one. You just start hacking and end up with something that works more or less.
Is one way better than another? Probably not. Sometimes it makes more sense to focus on actual functionality than the way it has been structured and vice versa. I guess beautiful code manages to combine these aspects in perfect harmony.
Phil Farmmafia as a Software Architect
By this definition even Phil Farmmafia hacking on his old C64 is a software architect. He might not know it but in my view he still is one.
Just being aware of this fact actually makes you a better programmer. I think it's not fair to elevate architects to a pedestal. It may make sense it some particular environment but definitely not in hobby hacking. :)
As I mentioned earlier architecture is all about structures and constraints. By spotting these during the development work you make things a lot easier for yourself in the long run.
Extract the rules out of the code-base and be sure to enforce them. This can be done via various methodologies (testing, refactoring, just plain restructuring).
This might sound like a backwards way to design. It's something that works, however. Simply put it's not possible to know every constraint before you start out implementing something. In casual development you figure them out as you go.