Goose: (as Maverick is looking around the room) What are you doing?
Maverick: Just wondering who’s the best.
Viper: In case some of you are wondering who the best is, they’re up here on this plaque on the wall…(turns to Maverick) Do you think your name’s gonna be on that plaque, Lieutenant?
Maverick: Yes, sir.
Viper: That’s pretty arrogant, considering the company you’re in.
Maverick: (pauses) Yes, sir.
Viper: (smiles) I like that in a pilot. Just remember, when it’s over out there, we’re all on the same team.
Top Gun (1986, directed by Tony Scott)
Corny as it may sound, we actually have a copy of Top Gun in the Factual office. Like Tom Cruise’s Maverick, every engineer here strives to be the best individually, while remembering that, when the coding’s all done, we’re all on the same team.
Nurturing those two qualities - individual and collective excellence - is essential to the success of any team, whether it’s a team of fighter pilots or computer engineers. We can’t say much about fighter pilot culture, but we do have a few recommendations on how to create a healthy and productive startup engineering culture. Keep in mind, this list isn’t exhaustive, but we think it covers the essentials:
1. It all starts with hiring. This might seem obvious, but we can’t stress enough how important it is to hire great people from the beginning. Personal referrals always seem to work out best for us. We recommend using your personal network of friends and colleagues, and performing strategic searches on professional networking sites like Linkedin, to find known-quantity and high-quality engineers who will contribute to your company’s success. We try to hire “Maverick” engineers who are self-motivated and perhaps even ever-so-slightly cocky, but who also work well within a team setting. (Incidentally, one of our engineers in Shanghai’s nickname is Maverick - and he definitely lives up to the name.)
2. Create a developer-friendly, non-Dilbert like setting. Remember where the characters in the movie Office Space worked? Do the opposite of that. Software developers seem to thrive in a unique, creative environment that somewhat resembles a playground or a (tidy) college dormitory. Here at Factual, we’ve got various games, medicine balls, and posters of ’80s metal bands throughout the office. It helps to establish a fun work environment. (Although, it also makes us realize that we’ll never be quite as cool as Mötley Crüe.)
3. Stimulate creativity and passion. Make sure your engineers are allowed to bring their creativity and imagination to the work they do. We generally try to encourage the artist in our developers as well as the programmer, and reward them for individual innovation and achievements. Don’t create an overly competitive atmosphere, but spotlight great work whenever possible.
4. Make logic-driven decisions. It might be a generalization, but engineers tend to be logic-driven people. When we’re given a directive, we want to be sure it’s based on logic and (if possible) supported by data. If people from other departments (business development, marketing) are making wish lists or demands that will affect an engineer’s workload, make sure they’re supported by logic and facts, not just blind estimates and “gut-feelings.” Many an engineer has worked long hours only to find out that their work was low priority, or worse, unnecessary, due to somebody’s “gut feelings.” That’s what we engineers call a “punch in the gut.”
5. Address issues quickly. If problems or issues arise - as they inevitably will - make sure to deal with them head-on and as soon as humanly possible. Most people don’t like working in dysfunctional environments, but we’ve found that engineers seem to hate it more - perhaps because their job involves fixing problems. Consequently, they get frustrated when there are glaring “bugs” in the organization. These sorts of organizational bugs can include bad coworkers, ineffective processes, or lacking the right hardware or software. We’ve found that engineers will come to you with suggestions on how to fix issues like these, and probably the worst thing you can do is ignore these suggestions. You do so at your own (and the company’s) peril.
6. Frequent code reviews and collaboration. No engineer is an island, and we’ve found that most engineers love teaching new tricks to each other. One of the best methods for learning new techniques is through the code review. This is a great method for more senior engineers to pass on their wisdom to junior developers - and sometimes the young whippersnappers can teach the old dogs a trick or two. Code reviews are also known for being a key best-practice for reducing defects and have an astounding ROI. Of course, code reviews aren’t the only way to share knowledge, so we try to encourage an environment of open engineering collaboration.
7. Good balance between interaction and “quiet” focus time. In order to do their work, engineers need long blocks of quiet, uninterrupted focus time. So do your best to give them that time and protect it vigorously. If possible, set up a company-wide quiet-time policy, so that other teams know when the engineering team is not to be disturbed. Also, try to cut down on the number of meetings engineers need to go to. And for the meetings they do need to attend, make sure people come prepared and stick to the agenda, so that the meetings don’t last any longer than necessary. That said, encourage engineers to make time to interact with each other and with the other teams in your company. They should do this both on a daily basis (lunch, an impromptu game of foosball), as well as through more structured activities outside the office. A game of Guitar Hero at a local bar can do wonders for boosting team spirit.
8. Have lots of snacks/food in the office. A hungry engineer is an unproductive engineer. Not to mention a grumpy one. So make sure there are lots of food choices available in the office. (And if one of your engineers is, say, vegan, make sure there are good options for him too. Trust us: he’ll appreciate it.)
9. Communicate, communicate, communicate. We discussed this in our blog post about off-shoring, but it’s critical to engineering culture in general. Make sure that everyone on the engineering team communicates effectively with everyone else about what they’re working on and what’s expected of them, in the near- and long-term. (We do this through daily scrums, supplemented with IMs, remote Skypes, and one-on-one face time.) This helps eliminate errors, redundancy, and team frustration, while boosting productivity, efficiency, and team cohesiveness. Of course, only you can determine how much communication your engineering team needs. Don’t add more than you need - but you probably need more than you think.
10. Invest in your engineers. Your engineering team is one of your company’s most important resources. Allow them to grow and develop. Encourage them to attend conferences, take classes, communicate externally with other developers on and offline, and in general to improve and expand their skill set. In addition, be sure they have a voice in the company, a forum where they can express their ideas and have an influence on the product. Keep reminding them (and reminding yourself) that they’re not cogs. They’re artists. Mavericks. The more often you do, the better they’ll work - and the more likely they’ll want to stay on your team for years to come.
So there you have it. These are just a few of the things that have worked for us.
What’s worked for you?
–Myron Ahn and David McMillan