views:

246

answers:

10

I'm a new software architect/lead, coming up with software design for a team of software developers. I'm coming up with the requirement spec, interface header files, and visio software design docs, and build plan, etc.

My question is: what do the rest of the team do during this period? I'm certainly engaging them in the design, but we dont need the whole team actively working on what I'm doing all the time.

Are there any good books for new software architect?

A: 

Usually there's another project they can work on, but...

I have my team review the project specs/requirements and put together a basic/preliminary structure to get them already thinking through the application and working out specific questions.

When we convene at the table to discuss the plan they already have an idea of what the project is and requires and in some cases, they present questions I may have missed or overlooked.

jerebear
+5  A: 

Generally the various stages overlap, so there will be some coding during design etc. There are a lot of things to do besides that. They can be reviewing unfamiliar technology that is going to be used, setting up source control system, reviewing business requirements, reviewing your documents to make sure they make sense and are clear. There is a lot of other work to be done besides programming.

Kevin
+2  A: 

What a software team does while the lead does the design is very different from company to company. On my company we try to work on the design while the developers are finalizing other projects or solving bugs.

Another approach that I've taken when starting a whole new project is to get the developers to work on the design as well - people with a good understanding of the requirements can help you designing smaller parts of the system and writing the specs for them. Other can work on mockups and frameworks. This worked rather well for the small software team I led in a previous job (4 developers in total).

Guss
+3  A: 

Stop doing the useless things you do and just start coding with them! ;)

zvolkov
This is totally NOT useless. Exaggerating a bit, almost anybody can code. Writing proper specs and designing a good software architecture, however, is the hardest part of any project...
Varkhan
I just don't know how can you do that w/o falling into the pit of Waterfall
zvolkov
+10, Varkhan. Having 4 years in software development (coding) experience and tried out designing/writing specs for the first time, I realize designing IS harder than coding. However, designing FIRST before coding is definitely the way to go! (and makes development much more fun~)
ShaChris23
Well guys I have like 10+ years in coding, architecture and PM and I still have no idea what I'm talking about :) Rudimentary specs are useful sometimes, when there's plenty of time and enough complexity. Otherwise they just get in the way. Can somebody undo the -2 please :)
zvolkov
I don't know what kind of projects you work on, but dumping 30 engineers onto a year-long project that hasn't been through an analysis stage is completely irresponsible--an utter waste of time. 2 people on a 3 month project--fine. Somewhere in between there is a transition :)
Bill K
+1 avoid the waterfall
Bjorn Reppen
+1 You'll have a lot more knowledge to use in design once you're a few weeks into coding. Get some requirements and specs down and go to town.
Adam Jaskiewicz
@Bill, sounds like this is past analysis and into design.
Adam Jaskiewicz
no downvote, but strongly disagree - the purpose of this phase is to understand the problem, even if you don't write anything down. That's why theres a hundred different methods and they all can work. I prefer Agile/XP these days, but waterfall can work too.
Steven A. Lowe
+1  A: 

If there is no overlap with another ongoing project, getting them involved as you're doing is great, maybe push it a little further by having them prototype and present the plus and minus of alternative technologies (APIs, frameworks, libraries, etc...) that your project could use.

Lancelot
A: 

If your team does not have any other projects to work on, ask experienced programmers of your your team to come up with at prototype so that you can create a requirement doc according to the needs of the client.

Also programmers novice to the technologies being used in the team could utilize this time to familiarize themselves with the technologies on which your team is going to develop the project.

stack programmer
A: 

Although it's too late now, a good way to approach it is to move the architect over before his current project has ended. Start freeing him up at like 25% then work your way up to 75-100% on the new project a month or two before it starts (maybe more depending on how much analysis and customer interaction there is).

On a trivial project (let's say 2 man-years) it might not be necessary, but anything bigger than that can end up in chaos if somebody doesn't at least get the analysis right before everybody jumps aboard.

Bill K
A: 

architect != designer

Chances are that all of your developers can help with the design; let them. Architects don't have to be "lone wolves" and do everything themselves. You lay out the guidelines and the principles and the scaffolding, rough in the wiring, and let your developers flesh out the details - whether it is drawing Visio diagrams or building prototypes to mitigate unknowns/risks.

Migrate towards Agile/XP and away from waterfall methods, and you'll find the team a lot more help.

Steven A. Lowe
A: 

When making the general design, it's very handy to have programmers create proof-of-concepts. Do that especially with parts of the system that could end up being show stoppers if they don't work in the way you plan to do them, so you can think of alternatives, and adjust the design.

That's going to help you to make the right design-decisions before moving entirely into a certain direction.

Just doing a design, and then moving on and start coding is a sure way to mess up a project. You won't realize that your design is not feasible (or just plain sucks) until you're half-way coding, and by then it's too late to make radical changes.

You'll waste time mitigating non-existing problems during the design, and you'll run into unforeseen problems during implementation.

Wouter van Nifterick
+1  A: 

As other have said, you typically want a ramp-up period during the first part of the project, and through the first iteration. You're planning on building this iteratively, aren't you? Start with a core team (nor more than 3-4 people, since you're going to need to communicate heavily with each other) to help you explore the requirements, get a basic data model in place, identify and setup any frameworks, identify and setup build and test tools. Some coding activities typically take place in the design phase: for UI mockups, run-ahead prototypes of technically sensitive areas (whatever risks you have should be mitigated by explirative coding: be they new technologies, undocumented interfaces to integrated systems, or unstable requirements).

But coders in the design phase should help with the design, in order to get their buy-in, and to help train up the rest of the team during the first iterations. Your role during this is to ensure that the major nonfunctional requirements (e.g. are known, prioritized, are met by the design, and can be tested). You should also collaborate with the project lead or whoever else is responsible for staffing and financing in order to sketch out the iterations and the staffing levels needed. Ensure the solution can be built iteratively, and aim at implementing only a basic structure during the first iteration, both to build confidence, and to eliminate risks. (Sometimes, you can push major risks to the second iteration, and focus the first towards confidence and team building.)

And of course, be sure you are not designing every detail. You should be able to use every design artifact in the next iteration (and elaborate them later as needed). Since design decisions are expensive to change, try to postpone them. However, some influence the entire solution (for instance, the data model, or your approach to security) and absolutely must be at least outlined up front. This isn't waterfall. This is just not closing your eyes and hoping a viable architecture will emerge by magic.

But design proceeds throughout the iterations. It's just that you do less of it as you go along, and with lesser impact on the solution (unless you're unlucky... and then things get expensive).

Pontus Gagge