Successful software development today requires the right people as much as the best code. I like to say that great people, who form great teams, have a shot at creating great software. And great companies are increasingly those that make great software, no matter what sector they’re in.
How, then, do you form a high-functioning, highly-effective modern software development team? What does this team look like? Who are the people you want to recruit? And how should they work together in the name of accelerated, scalable, and sustained innovation?
To help answer these questions, I offer five simple axioms from my experience about what makes for successful, modern software development:
1. Attitude is everything. Hiring software developers with the right disposition matters a lot. Software is a reflection of the people who develop it; personality, as much as technical acumen, is key. Hire jerks, and your software is more likely to be difficult to use, and you will lose customers. On the other hand, engineers who are nice people are motivated to create humane systems they themselves would use. They will build great software for your users because they have empathy for them as human beings. You also have a considerable advantage if your engineering team understands and internalizes the full business context in which it is operating. Any engineer who refuses to learn at least a little about product design, marketing, and distribution channels and says, “Just tell me what to build” is not going to make software that cares about your users’ needs.
2. Collaboration is essential. While you want friendly, welcoming engineers who can empathize with both their coworkers and customers, it’s clearly impossible for engineers to know everything about all areas. Engineers who see themselves as specialists are the ones who will excel and help build great companies. In other words, shared experiences and friendly communities, rather than solitary coding, increases software innovation, despite tech media’s lionization of technology giants like Steve Jobs. Jobs was brilliant, but he simply could not have delivered Apple’s stunning record of innovation without a strong team.
Engineers have to work well together, and with the rest of the company, in order to successfully innovate. We need to view software development like a Hollywood film — movie productions require the coordinated efforts of a producer, director, cinematographer, screenplay writer, editor, costume-maker and stage-hand.
3. Personal interaction is a must. Technology allows the workplace to be more distributed, so we have more individuals working remotely than in the past. While geographic barriers can’t be eliminated, we can retain a commitment to personal interaction as part of the development process.
At Chef, we use the Zoom video conferencing platform for everything from 1:1 meetings between people in different locations to “all-hands” company meetings, enabling everyone to see each other face-to-face. And we have an unwritten rule that conference calls will be conducted, where possible, with the video turned on. While it might be tempting for a CFO to rub his or her hands with glee at all the operational cost savings made possible by a distributed workforce (no rent, no electricity bill, for example), smart executives will reinvest those savings into strong collaboration tools, and, more critically, a travel budget for coworkers to regularly see each other in real life and spend time together. Sometimes there is simply no substitute for in-person shared experiences.
4. Scalable standardization is critical. Software engineers today are like 19th century blacksmiths; they each have their own tool kits and different ways of working. It’s very important that companies balance engineers’ interests in trying out new tools and languages with the potential that this experimentation will complicate product development, thereby making it more difficult to train new engineers and increasing costs related to an unwieldy, heterogenous codebase. The companies most likely to succeed today are not the ones jumping on the latest Javascript framework. They are the ones choosing battle-tested, “boring” technology. While they are unlikely to be splashed on the front page of Hacker News for their technology choices, they are the ones quietly building runaway companies. After all, Slack, one of the most successful collaboration products to hit the market in the last few years, uses the relatively “boring” LAMP (Linux, Apache, MySQL and PHP) stack that has been around since the 1990s.
5. Acceptance of complexity is vital. My last observation about software development is the most important: Complexity is a fact of life, because life itself is complex, and software systems mirror real-life systems. Why is that medical billing system so “convoluted,” after all? It’s because the rules governing medical billing are complex. Beware of anyone advocating “simplicity” as a virtue. Simplicity in and of itself is not desireable; ease-of-use and delight is. Don’t confuse the two. It’s possible to have software that can handle the most complex use cases and still be easy for someone to understand in a logical way. Simple software, on the other hand, eventually hits a wall when its architecture cannot handle complex, real-life use cases.
Software engineering generates astonishing and advanced products that are changing the world in powerful and profound ways. But we can’t forget that achieving a high level of innovation is still fundamentally a human endeavor, fraught with strong emotions and viewpoints beyond just the engineering aspects. Embracing the humanity of software development, its paradox, and, most importantly, its potential, is the only way to create great software products that your customers will love. Organizations that align software development teams to the five axioms outlined here will have the best chance at greatness.