'Software design period...what do other developers do? [closed]

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?



Solution 1:[1]

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.

Solution 2:[2]

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. Others can work on mockups, frameworks. This worked rather well for the small software team I led in a previous job (4 developers in total).

I also found it useful to have other team members research parts I'm unsure of (or even validating that things I think should work will indeed work), such as:

  • Investigating whether an external API provides the features we need
  • Writing a small proof of concept or technology demonstrator
  • Create an API mockup (header file, interface or REST endpoint) to investigate whether the API looks useful.

Solution 3:[3]

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

Solution 4:[4]

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.

Solution 5:[5]

As a new software architect, I can recommend some books that helped me understand the role of the architect (but of course not to master it):

  • Fundamentals of Software Architecture An Engineering Approach:
    This book gives good modern overview of software architecture and its many aspects, good place to start if you are a beginner or broaden your knowlage.

  • Software Architecture in Practice:
    Explains what software architecture is, why it's important, and how to design, instantiate, analyze, evolve, and manage it in disciplined and effective ways.

  • Software Architect's Handbook:
    This book takes you through all the important concepts, right from design principles to different considerations at various stages of your career in software architecture. It begins by covering the fundamentals, benefits, and purpose of software architecture.

  • Clean Architecture: A Craftsman's Guide to Software Structure and Design:
    Learn what software architects need to achieve and how to achieve it, master essential software design principles and see how designs and architectures go wrong.

  • Software Architecture: The Hard Parts:
    An advanced architecture book, with this book, you'll learn how to think critically about the trade-offs involved with distributed architectures.

Solution 6:[6]

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.

Solution 7:[7]

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.

Solution 8:[8]

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.

Solution 9:[9]

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.

Solution 10:[10]

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.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 kemiller2002
Solution 2
Solution 3 Andriy Volkov
Solution 4 Lancelot
Solution 5
Solution 6 jerebear
Solution 7 Bill K
Solution 8
Solution 9 Community
Solution 10 Wouter van Nifterick