There is a number of ways to organize a team and, from my point of view, there is none better or worse than the others, it simply depends on the goals, focus and priorities of the team.
What I call a vertical organization consists of a project focussed structure where the team is built up when the project starts and disbanded when the project is closed. There is as many teams as projects and first - and often exclusive - priority is delivering the project on time, cost, scope and quality.
This structure team is especially effective for critical projects and short term efforts but do not necessarily delivers long term and high quality products.
On the other hand, we can organize a team in a horizontal fashion, with specialized resources for specifics domains and not transient teams but stable in the mid term. In this way, deliverables quality increases as same people are doing very similar work for some time so they become experts in their technical and functional domain.
Horizontal organization is the most usual for operations departments and those where the stability weights more than the agility.
Is anyone better than the other? Yes, the balanced one is the best. Depending on the maturity of the company, department, systems, and professionals, depending on the business priorities, timeframe for meeting objectives and which one of the triple constraint (quality, cost and time) weights more, there is balance on vertical and horizontal functions.
There is always room for horizontal functions such as Technical Office, Quality Assurance, Program Office, Operations, Business as Usual projects, Architecture among many others, as well as some others must be driven as vertical functions, such us, first implementation of a new architecture or system, complex projects with many dependencies and so on.
Finding the balance is, as always, the challenge...