A concept or idea not associated with any specific instance.
In other words, when we’re presented with problems or asked to come up with solutions at Arc90, we’ll often go up one level (or two, or three) from the particular problem at hand and think more generically about a solution. This will often result in systems that are more flexible and extensible and less tightly-coupled to the problem at hand. This facilitates reuse and better positions us (and our clients) to deal with similar problems down the road. Very often, we can leverage what we’ve built with some minor tweaks as new but similar challenges crop up.
There’s another benefit to abstraction: it cuts us (or at least part of us) out of the picture. Yes, we could create a new report every time a client asks for one, but why not give them a platform that allows non-technical users the ability to create their own reports as they need them? We just provide the facility, supporting tools and necessary support.
The outcome of such an approach will often lead to establishing and publishing standards around the business artifacts that travel around. XML and loosely-couples services are our friends in this world of abstraction.
Arc90 : Rock Stars!
So all this higher level thinking should give us automatic Rock Star status right? Well, not exactly. We also tout ourselves as a shop that values and imbues design into what we build. Not just software design (we do plenty of that) but experience design and interaction design. There’s just one snag: in the world of interaction design, abstraction is not your friend. In fact, it doesn’t even exist. Good experience design is paying close attention to exactly what abstraction gleans over: the ugly, exception-riddled reality of everyday business.
A good user interface embraces such realities. Heck, it’s based on such realities. Good interface design says: "I want to learn about how your work. I’m here to fit into your world." It’s a custom-tailored fit. It’s not about meeting a need and positioning for the next twenty needs. It’s all about getting it right now.
"And In This Corner…Weighing In At 185lbs…"
So far I’ve pitted abstraction against interaction design as if they were enemies. This is not the case. Abstraction is all about plotting a strategy around how to build forward-looking software ecosystems. Interaction design is about the very edge of that ecosystem. The edge that is actually touched by people. You can design the most elegant, abstractly-architected system, but if the tools and interfaces don’t make sense to end users, what have you really achieved? From the viewpoint of software architecture, experience design is tactical. It’s about immediate gratification in many ways. It doesn’t care that a particular view requires 20 SQL joins and would "tax the database." It’s all about what makes sense to the people using it.
It’s an interesting tension that we continue to struggle with at Arc90. We want to build forward-looking, flexible systems but we also don’t want to handcuff our clients. Yes, we’re empowering them, but with power comes responsibility…and the opportunity to screw things up on a grander scale. Hence the need for well-designed, nicely-tailored tools and interfaces.
"Well Which Is It Young Fella?"
The trick is to separate the two disciplines and to not let one poison the other. An interaction designer shouldn’t care about the elegant API that lies underneath. And the software architect shouldn’t be designing solely around user goals. It’s all about respecting both philosophies and not letting one suffocate the other.
In fact, that separation is critical. Just as it’s fatal to think about a software architecture as an afterthought of an interface prototype, it’s just as dangerous to view a user interface as an afterthought of a software system. It’s about respecting and creating some space for (and between) both disciplines.
This way, nobody gets hurt.