views:

144

answers:

5

Hello,

I work for an organization that is pretty much a start-up within a large corporation. The team has several database engineers, and a few software engineers (in the data mining field). We're growing at a fast rate, which puts the need to have an overall architecture strategy or technology roadmap (or compass) for the next few years. As a software engineer, I've been assigned the task to start off on bi-monthly meetings to lead that discussion. So, my question is, how do you kick-off your role as an architect? how do you start off an organization-wide architecture discussion? I started reading the book "97 Things Every Software Architect Should Know", but I'd like to hear more from your experiences. So, as an architect, how did you start?

Best regards,

+1  A: 

I haven't personally had this experience, but here's a few hints:

  • Get training, and get the people which will be in these discussions trained in the subject. You'll have a more meaningful time.
  • Have an initial draft to be improved based on other people's ideas. It's much easier to start from a draft than to start from scratch
  • Have someone closely working with you on this (analogous to pair programming). Two minds working for one hour usually provide better output than one mind working for an hour when it comes to intelectually intense activities.
Samuel Carrijo
A: 

This is less from experience and more from practical thinking. First of all it's difficult to define software architecture - a great reference to start is always 'design patterns explained' as this takes a non-software approach to understanding architecture.

Start looking at specific core issues of architecture such as

  • Commonality and variability
  • separation of concerns
  • aggregation over abstraction

Architecture is not about removing complexity rather it's about managing it. So start by understanding the issues that comprise complexity in the context of your project

Fire Garden
+3  A: 
  1. Find out who's on your team
  2. Find out what they're interested in at the level of systems analysis
  3. Find out who knows people in the wider corporation
  4. Find out what's in use in the wider corporation
  5. Find out what people have used before in your particular division
  6. Take all of the above information and use it to start talking about Now, Soon, and Eventually. Pay particular attention to how you connect with the outside world both in terms of outside the division and outside the corporation.

Do not start talking about architecture until you know what you're starting with. Do not start a discussion about architecture until everyone else does, too.

Mike Burton
great answer, much better than mine =) +1
Samuel Carrijo
A: 

Focus on the non-functional requirements, and from there try to pick an architectural pattern. A software quality analysis will be helpful. I would then embellish on the pattern and describe it to the team, based on the levels of granularity they're interested in.

Mike
+1  A: 

Your question is a hard one because it touches on many areas: process, leadership, and software design (or architecture). I'm going to assume you have a standard process already, but if you don't then try one of the Agile processes. I'll talk about leadership and software architecture.

Leadership. Fred Brooks' great book, The Mythical Man-Month, talks about having a technical leader the way a surgical team has a leader. Personally, I like more collaboration than I see with doctors, so let's treat Brooks's surgical team as an extreme. Still, you need someone to technically coordinate who is doing what, things like allocating people to work in different parts of the system, deciding what the hardest (riskiest) parts are (so that they don't get deferred until they're expensive to change/fix), and make choices when the team disagrees. This kind of technical leadership is needed whether you are building software, cars, or pogo sticks.

Architecture/Design. The standard mantra is that "Every system has an architecture" but the corollary is that not every architecture is deliberately chosen. You may implicitly copy the architecture from your last project, say a 3-tier system. Or it may be pre-decided once you know you're using a framework like EJB. At the beginning of a project, you'll be making architectural decisions and some will be hard to change later. How will you persist data? Will you use a framework (eg Spring, EJB, RoR)? Will you process data incrementally or in batch?

Pretty much any architecture can be forced to meet your requirements. For example, you could use RoR to build an thermostat. But you'll have an easier time when your architecture is a good fit for the requirements. Sometimes you'll have requirements, such as low user interface latency, that can be helped out by a wise architecture choice, like using AJAX. So the beginning of your project is an opportunity to think about these things and get them right. (And this doesn't mean you go up to the mountain, think hard, then dictate your answers to the team -- here again I favor collaboration).

Don't be afraid to think about architecture up front, especially about ways it can help you avoid difficulties, but also don't try to decide everything in advance. You'll have trouble if one part of your team started using Ruby on Rails while another part started using EJB -- so make some technical decisions, the ones that are forced on you and the ones that will address your biggest risks.

One last thing: Early architecture discussions are a blessing and a curse. They are a blessing in that they get ideas out early and allow you to choose your design rather than blunder into it. But they are a curse in that everyone will have opinions, and it can be difficult to get them all pointed in the same direction (ie back to the need for technical leadership).

I recommend Chapter 12 of Applied Software Architecture for guidance on your question. The list of headings gives a good idea of its advice: Creating a vision, the architect as key technical consultant, the architect makes decisions, the architect coaches, the architect coordinates, the architect implements, the architect advocates. The 97 Things book you mention is more of a collection of pearls of wisdom rather than a cohesive guide to architecture.

George Fairbanks, Author of Just Enough Software Architecture

George Fairbanks