Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I need some advice on collaborative software environments. More specifically, I am looking for books and reference materials that can aid me in understanding team and code structures and the interactions thereof. In other words books, blogs or white papers explaining:

  • Different strategies for structuring teams that share common code between each other but have distinct individual functions?

To summarise my question I would like to know what would be a good source of knowledge if I were to set up teams in an organisation that shared code but each unit still remained autonomous.

I have done some research on this subject and explored:

  • code review tools,
  • distributed VCS,
  • continuous integration tools,
  • Unit testing automation.

The tough part about implementing these tools are to determine where a good place would be to start, which tools are low hanging fruit, which tools or methods provide higher success rates. If someone asks me about code quality reference I point them to Code Complete. I am looking for an equivalent guide on software team structures and tools to make this equation work better.

I realise that this question is quite vague but it arose as "we need to share code between teams without breaking each others stuff and causing management headaches and reams of red tape"

The answer is definitely not simple and requires changes on many levels, hence the question. If the question is too vague please vote to close or delete. I would accept any good starting point as an answer.

share|improve this question
    
So, you are not in charge and those that are don't see the problem and/or are not willing to implement changes if you can't convince them they won't be too difficult? –  JeffO May 19 '11 at 11:33
    
Not exactly... I was asked to investigate. Whatever solution needs facts to back it up with... I was just trying to get some opinions and possibly links to white papers, good blog posts covering the topic, peoples' personal experiences. Not getting pelted for asking a question... this is horrible. –  Tjaart May 19 '11 at 12:06
    
Sorry, but I don't see any evidence of you "getting pelted for asking a question". Your question(s!) are extremely broad, with very little background. Getting down voted is not the same as getting pelted. It is an indication that your question is not well formed by community standards, making it difficult to provide you with a useful answer. –  Beofett May 19 '11 at 12:31
    
Nobody here has provided me any advice on how to improve the question, instead i keep getting told how bad the question is. That doesn't help me at all, and doesn't bring me even close to getting an answer. I have to admit that at this stage I am not even sure where to look, which is why I asked here. It was obviously a mistake to do so. –  Tjaart May 19 '11 at 12:46
    
"your question(s!) are extremely broad, with very little background", "Could you be more specific on why you can't follow an open source project to learn what is already widely-practiced?" and "it would have been great if your rather vague question had links to the things you already know making it possible to explain these concepts in more detail without providing useless background that you already were well aware of" are all examples of people providing you advice on how to improve the question. Yet you did not provide more context, narrow the focus, or do anything other than complain. –  Beofett May 19 '11 at 13:10
show 3 more comments

2 Answers

up vote 1 down vote accepted

More specifically, I am looking for books and reference materials that can aid me in understanding team and code structures and the interactions thereof. In other words books, blogs or white papers explaining:

Different strategies for structuring teams that share common code between each other but have distinct individual functions? To summarise my question I would like to know what would be a good source of knowledge if I were to set up teams in an organisation that shared code but each unit still remained autonomous.

I realise that this question is quite vague but it arose as "we need to share code between teams without breaking each others stuff and causing management headaches and reams of red tape"

This might by more of a PM question, in which case it should be migrated to http://pm.stackexchange.com, however, here is my answer...

Sharing software modules - Software modules can be "shared" as code or as binaries...

Personally I prefer sharing binaries, as it leads to less ambiguity on the matter of which version everyone has and it requires editor to open up the same environment (e.g. VS solution) as the author, thus seeing the same unit test and integration test projects and running them after local compiles.

Software modules and teams...

It is best when each software module has more than one author, that way there is no single point of knowledge which among other things, can lead to bottle necks when there is a need for changes.

Modules can be developed in a team or cross team. Infrastructure modules are usually developed either by dedicated infrastructure teams or cross teamed.

It is easier to communicate within the same team, therefore, it is preferable if modules are developed in a single team.

The are a few common divisions to teams:

  • Horizontal teams - e.g. Data team, Engine team, UI team
  • Vertical teams - team per product/project (or sub project)
  • Vertical teams + infrastructure/architecture team(s)

Horizontal teams are a bi-product of matrix management (a known anti-pattern) and lead to teams that may specialize in something, but do not often receive fresh minds (since the teams can be rather static) and the development time is larger this way (more points of both time and API integration).

Vertical teams are used by methodologies such as SCRUM, however, they can lead to redundancy, since different products may have a lot in common.

Infrastructure/architecture teams research points for process optimization and reuse and can provide reusable components, making product development teams' work easier (once the organization gets used to the new process).

As of books - There is no single book or source of knowledge I recommend, on the contrary, I find leaning on a single point of knowledge problematic. Even the most famous books have some strong points and some weaker. The strong points are what make them famous and are often reachable by common sense, just formalized for the first time in that book. Taking everything a book or someone says for granted is not recommended, especially since what is right in one circumstance is not necessarily right in another.

Try to read as much as you can and take the good and relevant parts for each. Do not be too theoretical about your research, check what works and when, especially what works in your circumstances.

Also, learn from others' experience, both inside your organization and others you know and online, ask how similar things have been done and what was good and bad in those solutions.

share|improve this answer
add comment

We are a .Net outfit running a mixture of ASP .Net, WPF, Web Services and windows services.

We currently don't have a defined architecture

False. You just defined your architecture. I think you're confused about something and need to clarify your question.

Where can I start to look at for information on collobaritive environments like ours?

Um. You're a .Net shop. You can get information everywhere.

Is it possible to build an architecture that makes functionality sharing possible without making it painful to manage?

No. Sharing code requires active management. Sorry.

Should we be opting for web services or libraries?

Both.

What are the pros and cons of each?

Too big and vague to even begin discussing in this kind of question. It's a separate lifetime of study.

In the case of libraries, how would we go about keeping everyone up to date on new versions, regression testing and change control without hampering deadlines to jump through hoops of red tape?

Sorry. It's hard. Using libraries requires active, involved, every-day management of the shared code.

If you find this confusing, please start following a large, popular open-source product. Any product. It doesn't matter. It just has to be (1) something you will actually use (some folks are anti-open source, making this exercise difficult) (2) large number of other users (3) active changes from the community of users. The Apache httpd server is an example.

Watching an open source community is the best way to learn about managing change, announcing new versions and things like that.

share|improve this answer
    
Is being rude neccesary? Your answer is completely unhelpful and don't even begin to provide any sort of solution or starting point. You also ignore the fact that I realise management of libraries are necesary, but am looking for guides at how to do it effectively, with the leats pain... –  Tjaart May 19 '11 at 10:20
2  
@Tjaart: "looking for guides at how to do it effectively" I provided specific, detailed guidance. I'm sorry you didn't like it. Could you be more specific on why you can't follow an open source project to learn what is already widely-practiced? –  S.Lott May 19 '11 at 10:25
    
I follow the KDE project. I am semi-aware of their governance frameworks, code review board etc... I also read Qt labs blogs occasionally. Many of the factors that make open source projects successful are quite heavy handed methods. I am for these, but I need strong motivation to get management on board. It would have been great if your extremely short answers had links explaining these concepts in more detail, instead of yes, no, maybe etc... –  Tjaart May 19 '11 at 10:40
2  
@Tjaart: It would have been great if your rather vague question had links to the things you already know making it possible to explain these concepts in more detail without providing useless background that you already were well aware of. –  S.Lott May 19 '11 at 10:55
    
I think i will just figure this out by myself. –  Tjaart May 19 '11 at 12:35
show 2 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.