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:UIFramework codeBusiness/application logicDatabaseI'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 AllPros1. Developers may be more well-rounded2. Developers know more of the systemCons1. Everyone has their hands in all areas, increasing the probability of creating less-than-optimal results in that area2. It can take longer to do something with which you are unfamiliar (jack of all trades, master of none)Devs SpecializePros1. Developers can create policies and procedures for their area of expertise and more easily enforce them2. Developers have more of a chance to become deeply knowledgeable about their specific area and make it the best it can be3. Other developers don't cross boundaries and degrade another areaCons1. 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.
Should Developers Perform All Tasks or Should They Specialize?
programming practices;productivity;development process;organization