I have spent some years now working as a software architect. There were couple of rather large projects, in both Java and .NET, that I was working on.
Infrastructure vs real problems
The thing with software architecture is that it tries to set up some basic rules, and solve some primary problems, so that rest of the team can carry on implementing features. Large amount of these architecture problems, from my experience, fall into the category of infrastructure.
Now what do I mean by infrastructure problems? When you first start learning how to program, you are playing with objects, variables, and applying some logic to them in order to get the results that you want. It is the problem solving activity which brings lots of value, and also personal fun in the programming. Later, when you start working with real projects, it starts to look very different. Large part of the challenges you face are not direct problem solving, but rather configuration and setup. We are spending a lot of time to get the data where we want it.
Objects are outdated
Now why is that? Well, modern programming languages and tools are not addressing the infrastructure issues. You still need to think about your objects, which need to be serialized in order to be accessible by another remote system, and also need to be mapped in some sort of ORM in order to be persisted, and so on, and it is wasting time, which should be spent on solving real problems.
Imagine the time when the higher level languages started to replace assembly programming. In those days programmers started to get more productive when they used higher level language, because it abstracted away the complications of dealing with registers, stack and so on. Make no mistake, you still needed to be familiar with assembly in order to really understand what is going on below, but still using those high level tools made them more productive.
A new solution
I propose that we take things one more level up, which would abstract away our infrastructure issues with data distribution and access, and leap into a new level of productivity. It requires that we forget about objects and services and databases the way we think about them today, and start looking at as infrastructure. Then, we can abstract it away and focus on problem solving, with a new kind of solution for our objects.
An emerging new approach which addresses these issues is the open-source IOG library, which recently published a first alpha release for the .NET platform. Give it a try, and let me know what you think!