Finding out what makes us unique

Craig and I were having a discussion today about what uniquely defines Xoprecious. We aren’t just a normal web development shop, but it’s sometimes difficult to describe to potential clients and partners (and sometimes ourselves) what makes us unique. In the end, we don’t want to be hired because we can build a web application. We want our customers to have an intimate understanding of how we think and the way we achieve our craft. Craig mentioned that we don’t want to be like a phone company where you can just hire us to turn on or off your web solution. Web applications aren’t fast food to us. There’s always a better way to do something.

Plenty of firms build applications with Flash. But, we focus on end-to-end Flash application development. Flash applications aren’t just glorified web sites. They are rich pieces of software that have the luxury of both a robust backend and a compelling user interface. It does not mean simply tattooing a pretty skin on top of code.

When we build applications, we take on a lot more than most. While it may seem like a simple statement, in reality, it implies a lot. And what it implies also uncovers what makes us unique.

We are unique because we look at development as one integrated discipline rather than a series of discrete, unrelated ones. To be successful at building a Flash application from the very bottom to the top, it means we have to master things like…

  1. Sound database design (Entity-relationship model, normalization)
  2. Clean middle-tier programming (Data access layers, object modeling)
  3. Seamless client-server bridging (be it XML or remoting or web services)
  4. High-level OOP in Actionscript (MVC, event modeling, state management, etc.)
  5. Functional user interfaces (usability engineering, motion graphics, visual design)

Now, some may look at this and see five different disciplines, five different people to hire, five different brain exercises. To us, they are the same philosophy of design represented in five different ways. Each discipline requires you to think about how to organize your environment. Databases perform better and are easier to understand when they are normalized, when they follow consistent naming conventions for tables and fields. Actionscript is much easier to code when its indented properly, when views and controllers have a predictable naming convention. User interfaces are easier to use when form elements are aligned and transitions are smooth and consistent.

To us, there’s a philosophy of aesthetics and elegance that traverse each of these disciplines. When you get far enough away from actually putting down if statements or adding a drop shadow or creating a foreign key, you realize that all of these decisions you make represent your own philosophy on what makes the entire application beautiful. (In fact, our book talks about aesthetics in two ways – aesthetic interfaces and aesthetic code).

So, is our way of thinking really unique? If not, then at least our approach to development is. While we ultimately build an entire application in a traditional tiered approach, we are communicating and tweaking throughout the process. One person is building a set of data objects in Flash while the other is creating UI classes. But both people are thinking about how they will sync up, what events should be broadcasted, what information needs to be passed. There’s a sort of Zen quality to development. You’re building one thing but considering how it affects everything else. There’s a strange irony in the way we develop. Objects might be encapsulated from each other, tiers are well-defined and run as distinct parts of the entire application, but we develop with the knowledge of what’s going on everywhere.

This uniqueness blends into many goals of our company.

We want to be the interactive partner to clients, not just the “tech geeks.” We want to consult and think about what kind of solution works best to solve a particular problem because, like development, we find that applications should fit with an actual human problem in an elegant way. For instance, using blogging software to keep in touch with friends and family is an elegant solution. Using it to track billable time at work…not so much. A simplistic example, but you get the gist. Discovering what kind of technology pairs well with a particular problem requires much the same philosophy of aesthetics and elegance that building a UI, or object-oriented code requires.

We also want to build frameworks that make application development seamless. In my previous post on an agile Flash framework, I mention this idea of a generated code base that lets you build rich Flash apps while only coding in Actionscript. Underneath the covers, this framework still requires a bridge to Actionscript, middle-tier code, and a bunch of SQL. But, all that stuff can be deduced from a data model (much like the generated frameworks of Ruby on Rails or Django). Again, it’s that glorious idea of seamlessness, and the common philosophy that binds these disciplines that runs deep in conceptualizing such a framework.

So, in the end, we aren’t unique because we build Flash applications. It just so happens that Flash application development is the best medium we’ve found to foster our uniqueness.