How should my team decide between 3-tier and 2-tier architectures?

.net, architecture, soa

Solution

There's a time and place for up-front design, and it can only be made by an experienced architect who knows the ins and outs of your project. For me, if there is every any doubt or if it could go either way, I take it like this:

- Start small (one layer)

- Use interface-driven development & good SRP, agile design, etc

- Once you have a working prototype, have a redesign session. The choice should be much clearer.

YMMV.

Problem

My team is discussing the future direction we take our projects. Half the team believes in a pure 3-tier architecture while the other half favors a 2-tier architecture. Project Assumptions: - Enterprise business applications - Business logic needed between user and database - Data validation necessary - Service-oriented (prefer RESTful services) - Multi-year maintenance plan - Support hundreds of users 3-tier Team Favors: - Persistant layer <==> Domain layer <==> UI layer - Service boundary between at least persistant layer and domain layer. Domain layer might have service boundary between it. - Translations between each layer (clean DTO separation) - Hand roll persistance unless we can find creative yet elegant automation 2-tier Team Favors: - Entity Framework + WCF Data Service layer <==> UI layer - Business logic kept in WCF Data Service interceptors - Minimal translation between layers - favor faster coding So that's the high-level argument. What considerations should we take into account? What experiences have you had with either approach?

Original source