I'm a junior developer (~3 years' exp.) and at my job we're in the process of architecting a new system. My lead developer will be the principal architect, however he's challenged me to try architecting the system myself (in parallel).
Over the course of a few iterations of brainstorming ideas and proposing what I saw as architecture suggestions, my lead has given me the feedback that most of what I've been doing was "designing" and not "architecting".
He described the difference as architecture being implementation-agnostic whereas a design is the description of an implementation. He said I need to take off my designer hat and put on my architect hat. He gave me a little bit of advice on how to do so, but I would like to ask you as well:
How do I get out of software designer mode and start thinking more like an architect?
Here are some examples of "designs" I came up with that weren't seen as relevant to the architecture by my lead:
- I came up with an algorithm for loading and unloading resources from our system and my lead said that algorithms are categorically not architecture.
- I came up with a set of events the system should be raising and in what order it should raise them, but this too didn't seem to cut it as architecture.
I seem to be getting caught up in the details and not stepping back far enough. I find that even when I come up with something that is at an architecture level, I often got there by trying out various implementations and mucking around in the details then generalizing and abstracting. When I described this to my lead, he said that I was taking the wrong approach: I needed to be thinking "top down" and not "bottom up".
Here are some more specific details about the project:
- The project we're architecting is a web application.
- I'm estimating around 10-100 thousand lines of code.
- We're a start up. Our engineering team is about 3-5 people.
- The closest thing I could compare our application to is a lightweight CMS. It has similar complexity and deals largely with component loading and unloading, layout management, and plug-in style modules.
- The application is ajax-y. The user downloads the client once then requests data as it needs it from the server.
- We will be using the MVC pattern.
- The application will have authentication.
- We aren't very concerned about old browser support (whew!), so we're looking to leverage the latest and greatest that is out there and will be coming out. (HTML5, CSS3, WebGL?, Media Source Extensions, and more!)
Here are some goals of the project:
- The application needs to scale. In the near term our users will be on the order of hundreds to thousands, but we're planning for tens of thousands to millions and beyond.
- We hope the application will be around forever. This isn't a temporary solution. (Actually we already have a temporary solution, and what we're architecting is the long-term replacement for what we have).
- The application should be secure as it may have contact with sensitive personal information.
- The application needs to be stable. (Ideally, it'd be stable around the level of gmail but it doesn't need to be at the extreme of a Mars rover.)