Disclaimer: The intent of this question isn't to discern what is better for the individual developer, but for the system as a whole.
I've worked in environments where small teams managed certain areas. For example, there would be a small team for every one of these functions:
UI
Framework code
Business/application logic
Database
I've also worked on teams where the developers were responsible for all of these areas and more (QA, analsyt, etc...). My current environment promotes agile development (specifically scrum) and everyone has their hands in every area mentioned above.
While there are pros and cons to each approach, I'd be curious to know if there are more pros and cons than I list below, and also what the generally feeling is about which approach is better.
Devs Do It All
Pros
1. Developers may be more well-rounded
2. Developers know more of the system
Cons
1. Everyone has their hands in all areas, increasing the probability of creating less-than-optimal results in that area
2. It can take longer to do something with which you are unfamiliar (jack of all trades, master of none)
Devs Specialize
Pros
1. Developers can create policies and procedures for their area of expertise and more easily enforce them
2. Developers have more of a chance to become deeply knowledgeable about their specific area and make it the best it can be
3. Other developers don't cross boundaries and degrade another area
Cons
1. As one colleague put it: "Why would you want to pigeon-hole yourself like that?" (Meaning some developers won't get a chance to work in certain areas.)
It's easy to say how wonderful agile is, and that we should do it all, but I'm somewhat of a fan of having areas of expertise. Without that expertise, I've seen code degrade, database schemas become difficult to manage, hack UI code, etc... Let's face it, some people make careers out of doing just UI work, or just database work. It's not that easy to just fill in and do as good of a job as an expert in that area.