I am working on a large web application in Java using Spring and Hibernate as the persistence solution. And as for the methodology, we're on Scrum. My role is that of a Scrum Master. I am also the one managing the business requirements and overall direction of the application.
While dividing the requested features into tasks, we have two conflicting point of views. I'd want you to evaluate both ways and let me know your experience how you all are doing out there.
First approach
Divide the task into layers of it i.e. the POJO, the DAO, Service layer, Controller, and the View (JSP, JSTL, EL, JavaScript). Now each person works ONLY a single layer. For instance, the POJO guy is the one who will always develop the POJOs of each of the features required right from the User management to inventory, accounts and all.
Similarly, DAO guy would always expose the methods for DAO and would do nothing else. Same for the service. Then are the guys on the controllers only. They do nothing just write the controllers. And then are the one working on the view. The do nothing but writing the JSP for the controllers, the JavaScript interaction stuff.
Upside
- Each one is restricted to a particular kind of skill and area.
Downside
- Lots of communication overhead. POJO guy tells DAO one, and that one to the layer above it.
- Might not yield coherent design.
- Your team member's skill set would be jagged, can never work independently if restricted this way.
Second approach
You divide the requested feature and distribute them based on funtionality instead of the logical layers they lie in. For instance, if its about the User management, its a single developer responsible for desigining the POJO, then exposing the DAO for it, writing service layer on top of it, then exposing it via controller and rendering its views (Of course not the asthetic design issues).
Up side
- The features designed would be coherent.
- One developer is building the whole "column" required to implement a particular feature.
- Also, developers would get the understanding of the all of the skills required to roll an enterprise application.
Downside
- Only criticism has been that it requires more in depth understanding of the framework.
I'd like all of you express your ideas on this and how you're doing it in practice.