Companies like Google and Facebook are famous for having some of the best working environments with perks like free meals, free gym, creative work spaces, child care services, pets, etc. Considering that they’ve been noted as being very forward thinking with regards to their company culture, it’s a wonder that other companies, especially those that want to be competitive or even non-tech companies, have not followed suit in comparison. Still, even with such a lavish work environment, are environments like Google or Facebook perfect? If not, how can companies who do not have the luxury of billions of dollars at their disposal compete or even make their work environments attractive to developers?
While Google in particular has attempted to innovate on the front of a cutting edge work environment, the reality is that their company culture really emulates that of a university campus, much in the way that both founders had started. Facebook too resembles the prototypical college campus where people are expected to work long hours, but are treated with food and amenities to make their work environments bearable. For those who have been in the work force for some time, especially in a career as physically and mentally demanding as engineering, pulling all nighters 24/7 does not have any appeal, especially once someone starts a family up. People eventually want to have more spare private time as being around ones coworkers on a daily basis can be extremely fatiguing.
For myself, I think that at the very least a decent tech environment requires the understanding of what makes an engineer productive. Movies like The Social Network perpetuate a diseased myth about the young, motivated and heavily inspired developer who codes night and day on a project that they want to own. I referenced this aspect in a previous blog but the point here is that engineers are human but have very difficult problems to solve most of the time. Difficult problems require environments that provide room for concentration, research and experimentation.
Unfortunately, most businesses generally do not respect nor truly understand this aspect and force developers to enter into Death March cycles driven through dates devised by the unwitting marketing and sales departments. The result of these Death March cycles often lead to failed products or situations such as Sony’s recent hack, various EA game launches like Ultima 9 or even more spectacular failures such as the Mars probe that crashed. Obviously, giving developers of questionable quality infinite time is equally unreasonable, but at the very least the business from top to bottom of the organization needs to have the fundamental understanding of how an engineer operates.
So in practice what does this mean? In a work environment, engineers require quiet. In recent years, the open environment has become immensely popular for companies because supposedly it allows for easier communication and more face-to-face time compared to the ancient cubicle culture. Ironically, the cubicle culture is far better suited to developers if private rooms are not affordable (which generally is the case). Developers simply need privacy and ways to avoid distraction. The open environment, while less dehumanizing, tends to create a more frat-party like environment on average as people shout over the walls and people can become distracted by conversations and others passing by.
Usually, to offset part of the noise even in a cubicle type of setting, I believe that companies should allow people to listen to their music (or whatever background noise suits them). For an engineer, they require something to help ease them into a zen-like setting because their mind needs to become free of everything around them as they home in on a particular problem. Since problem solving/coding grooves tend to evolve in cycles, you want to be able to provide this continual stream of zen that the developer can slip in and out of.
As entering into the “zone” for solving problems, you need to remove as much anxiety as possible. I feel that artificial, irrational deadlines without the developers’ input creates a high level of anxiety not to mention unnecessary tension between teams. Developers are typically pretty smart people but they hate being manipulated and can see through the politics of a work environment. The most experienced ones more than likely will do what they can to avoid any of these environments while inexperienced developers will confirm dates without understanding how true work estimations operate. In turn, this simply creates a poor set of expectations that end up in bad workmanship and makes everyone look bad.
Along those lines, removing unnecessary meetings is key. Meetings should be saved for engineers only when critical decisions are necessary. Most meetings I’ve seen with engineers generally are time wasters with redundant status reports. These days there are plenty of automated methods like ticketing systems such as JIRA or Assembla that can be more informative without heavily impacting a developer’s time. Other useless meetings that I’ve seen often force developers to be on call to answer questions. A well managed group might assign a lead, architect or software manager who should understand the system for these questions. If not then the product manager or even project manager should have enough insight to compensate. But engineers should rarely be on a call like this and other resources should be trained internally to be able to support these types of meetings. In short, your engineers should be doing the task of engineering.
Also, as I mentioned the research aspect, engineers need the internet and free, administrative free computer setup. Some companies use web blockers or lock down their employee computers where software can only be installed through a company’s internal IT team. For an engineer to remain productive, they absolutely need uninhibited access to these two elements. The web has gotten so big that it’s impossible to identify every URL and lock them down. Even sites like YouTube provide invaluable learning tools where many websites use to provide code examples, tutorials and setup instructions.
Another thing I believe is to prevent engineers from taking their work home. I find that these days the typical response to “how long do you stay in the office?” is “when we finish our work.” That’s a pretty abstract and legally weasley way of saying, “You ain’t going home or you’re bringing your laptop home every day!” With engineering, you simply never finish anymore. The internet has effectively killed the idea of finished software products. The ramifications of this paradigm shift is that engineers especially are more than ever expected to work around the clock to support websites.
Now, supporting a website is vastly different from continuing to work on one. The problem I have with continually working on a website from home is that it’s really unhealthy both physically and mentally. People need to have regular schedules to avoid having long term health problems and be able to focus on their home life. Simple things like cooking tend to take a back seat to the convenience of fast food once working on a deadline starts taking precedence over one’s life. As I had established how solving problems requires engineers to enter into a certain state, it’s equally critical for engineers to get out of that state. It’s not uncommon for an obsessed developer to avoid caring for themselves because they’re simply too mentally exhausted to care. If engineers stay in this loop, then they become a danger to themselves, the project and possibly others if proper care isn’t administered.
I think a good working environment will help provide things to support a healthy living in both work-life balance and maybe even perks. Of course, no industry can avoid the long hour death marches from time to time, but you do want to mitigate that aspect. For places that expect it to come about, they need some means to ensure that their workers are fairly compensated. Unfortunately, states like California had thrown out protective labor laws that would prevent companies from overworking their employees and many companies get around the legal loopholes by essentially forcing would-be candidates to sign a contract that effectively allows the company to get uncompensated overtime work from a potential candidate (and if the person doesn’t sign, they simply do not get the job).
Even so, companies have to realize at the end of the day, engineers are human and require a maintenance. So if the company does demand long hours, I say that they should be providing solid meals, access to a local gym and telecommute/remote work options at the very least. In a city like Los Angeles, for instance, the traffic unfairly eats up the average employee time for about 2 hours a day. If you work in the more crowded sections of the city like West LA, Downtown LA, etc., then a good section of your time is consumed just by going to lunch and finding a parking spot (or even just getting out of your office). I’m certain companies can find some way of doing a tax write off for meals, especially for people who have to work long hours. And I would go as far as to say that gym time should be mandated to a degree (or at least some corporate sponsored physical fitness program) for at least 3 times a week. It might be a pain but it allots time that in the end should re-invest itself into its employees.
Now, surprisingly even with technology such as Skype, most work places still do not offer telecommute possibilities. In a supposed progressive city like Los Angeles with as much traffic as it has, it’s pretty damn stupid that most companies demand people to show up for work. Part of the issue is the trust factor that I think has not evolved with employees. There’s this utter desire for managers to remain in power through micromanaging every second of their employees’ time visually. This is such an archaic MBA technique from Machiavelli’s The Prince that I believe it’s killing the industry (if not, at least slowing it down).
Here’s the thing. Many companies already issue out laptops so that employees can do work from home (especially those engineers who might have to do some form of support). All new laptops that I know of have built-in cameras. And Skype allows for free teleconferencing. So why not just have people use Skype with their cameras turned on? I’ve seen it work effectively with someone at a previous company. The only time he had to show up was on Wednesday. But the net effect was that he didn’t have to commute, was able to spend more time with his family, spent less on taxes and his overall cost of living and was quite effective at his job. Do managers simply fear that they’ll lose their ability to yell and scream at their employees if the person turns off their Skype once the manager becomes unruly? I mean, companies should really re-think whether they even need this person if that’s all his real job is at the end of the day.
Some argue that they hate cube farms and embrace onsite only work environments because of synergy. For teams like marketing people, managers, sales, customer service, etc. onsite only works well as these groups are the ones that need synergy. As I stated before, developers need quiet and a state of zen. So what better place than home helps establish a feeling of security?
Also, there’s quite a bit of benefits for allowing telecommuting. First, your company will probably see a large reduction in cost. You don’t have to worry about parking spaces, electricity, internet costs, utilities, desks and possibly computers. That’s easily a few thousand dollars saved right there with a few hundred per employee saved per month. And you never have to worry about employees getting into automotive accidents or getting jammed in one, which might throw out some scheduled meetings. Then if we go with the 2 hour commute time, you eliminate that on behalf of the employee. That would infinitely make that person happier as that’s one massive thing less in their lives that they would be stressed about. I can’t tell you how many times that traffic would affect my mood once I stepped into the office. Instead, my focus would be on the code itself. And lunch breaks probably will be minimized as well since people would be eating at home. So you get an hour of possible productivity right there.
What about structure for the development team itself? I suppose this part really depends on how big the development team is. The rule I’ve heard is that once you hit over 8 or so developers, you should have a project manager. At the very least, as a web developer, I like having a product manager and a designer as part of my group. Optimally, I’d add a dedicated front end developer, a dev ops type, one QA guy and backup backend (or full stack) developer to the team just to round things out at first. But the main thing is that you really need to establish the development practices early on. Things like having ticketing systems in place such as JIRA, a person dedicated to writing the tickets (possibly a combination of the product manager and QA person with the project manager eventually owning this aspect down the road).
Also, you want to establish coding standards and a technical/product roadmap. The technical roadmap might not be as important but you do want to provide a direction with milestones so that the engineers understand what’s at stake when they drive towards a deadline (if there is one). Getting people to write unit test and starting off with Test Driven Development to work with stories/requirements written on tickets helps immensely. In addition, having a release cycle is good too as it keeps the business up-to-date and confident in the product.
What about perks? The only real perk that interest me beyond what I’ve stated here is unlimited vacation policies. I know people who are for and against it and I know the arguments for both. But I think the biggest thing for me is dealing with sick days. Sick days is such a bullshit thing in working environments because you can’t really schedule yourself or your loved ones in advance for getting sick. You might take a day off for a doctor’s appointment, but you can never estimate how long a cold will last. And the problem is that the idea of sick days tend to make people return to work far earlier than they should, thus perpetuating the flu season in the worst manner. Some companies might end up forcing the person to take out their vacation days if they overextend themselves, but I don’t think this is fair. If a person is sick, they are sick and shouldn’t be penalized too harshly for their condition. I remember last year I got so sick but was adamant about attending a meeting when my boss showed up. In the end, he contracted my virus and was out for over a month (he had pneumonia). So that’s just karma for poor management (I should’ve been sent home immediately).
The real thing I demand at the end of the day is common sense from my coworkers and management. I feel that ego, ambition, fear, insecurity, etc. all lead to irrational behavior at work, creating a very totalitarian, dystopic world. The truth is that history has shown that Machiavelli has been time and time again proven wrong about how fear rather than love is the correct way to rule a kingdom. Usually, ruling by fear ends up in mass revolts where everything falls apart in a very horrible way (just look at the French Revolution). Instead, a combination of common sense and understanding are the keys to building a better work environment, especially for us poor devs who already have it hard enough trying to keep up with the latest crazes in technology.