Beyond Domain Experience – 3 Qualities of Great Software Teams

A shot from the Surgeon Simulator 2013 sim game.
Surgeon Simulator 2013

Let’s look at a hypothetical situation. You have a medical issue requiring surgery. While there are many surgeons that could get the job done, each one has their own level of ability and skill. Through their choices, the surgeon will affect overall “quality” of the operation — which procedure is used, cosmetic results, general odds of success, and how any unforeseen complications will be dealt with. The surgeon won’t have a complete picture of the situation until the operation is underway, and even then surprises are possible, so overall skill is essential.

If faced with this choice, how do you determine which surgeon to hire? It’s not easy when risks are (potentially) high and your technical understanding of the field is low. Your choice could have a potentially dramatic effect on the outcome, and there’s no going back.

I imagine that this is very similar to how it feels to be tasked with selecting a firm to develop custom software for your business.

Even the most simple software is actually quite complex — enough so that it’s usually impossible to foresee all the logic, effort, and challenges that its creation entails. If the firm you hire isn’t up to the task, by the time you see the effects it may be too late to start fresh.

So how do you identify a good firm and maximize the quality and success of your project? My perspective, as a software developer, is that a quality firm will have:

1. An Eagerness to Learn

A quality consultancy will seek to provide you with an understanding of their process for developing software. By educating you — the client — they will empower you to participate, influence the project, and ensure that it’s useful to you and your business.

A better consultancy will also seek to educate itself about your business domain. When the software engineers not only understand what they need to create, but how it fits into your business and why it is useful to you, the difference can be profound. Rather than just implement what you ask for, they will be able to see why you’re asking for it, and even help you create innovative solutions.

The best consultancy, however, will seek to do all of this while displaying an ongoing dedication to the craft of software by continually educating themselves on new ideas and tools, then educating the broader design/development community through blogging and participating at conferences.

2. A Broad Range of Experience

Software does not exist in a vacuum. To be ultimately useful, software must exist with and interact with other parts of the real world (or other software).

If, for example, you are looking for an iOS app, it may be tempting to select a firm that specializes exclusively in iOS. However, a firm with a broad range of experience will be more skilled at interfacing with the rest of your business. Those with broader experience will also have more tools at their disposal, making it possible to choose the best one for your particular needs.

Additionally, if your project involves multiple different components, choosing a firm that can handle them all will ultimately multiply the efficiency of the project. Real magic happens when the developers of each component are all aligned with the same goal. They can anticipate each other’s problems and solve them collaboratively, greatly increasing the harmony between components and the efficiency of building them.

3. Strong Design Skills

Design is far more than just aesthetics; it’s both form and function. It’s manifested in how things are organized, how they behave, which features are included (and which are not). Good design is absolutely essential for a product that is powerful, effective, and straightforward. Essentially, it’s a critical part of every step of the process of creating software.

It stands to reason, then, that a firm with in-house design skills and tight collaboration between designers and developers will ultimately provide you with a better product, and be more efficient at doing so.