A good work environment is one where people trust you and you trust them. Trust comes from communication. And I mean the clear communication that has a clear objective and purpose, not the management buzzword bingos that fill in meeting time.
Everything ends up tying back to good and positive communication.
- Setup an IRC chat. We tried many other group chat systems before, and we always come back to IRC. Choice of clients help as everyone will have their preference. There are also a lot of bots that can help also make it a more central communication hub. We have it with both our monitoring software and our build system. This help cut down on the noisy chatter in a dev area.
- Make sure that accomplishments are visible to the rest of the company. (If you follow real Agile/Scrum, that's your sprint review). This will help avoid the "cost center" label that brings underfunding.
- See if you can accomodate hardware/software requests. It makes no sense denying a well paid programmer a 200$ ram upgrade that can speed up his work.
- Bad news will happen. Your job will be to deal with it and to bat for your team. Don't throw them or a team member under the bus.
- Make sure the rest of the company communicates with your before going to bother your team. If need be, get a Scrum Master.
- You'll probably read a lot about offices vs open areas vs cubes. Cubes are a sucky halfway system. Open areas is better for communication but introduce distractions. Offices cut down on distractions but tend to create silos of knowledge. The best I've seen is an open area with offices available for meetings. If possible, get an open area that is not shared with non team members.
- Break down silos. Avoid having specific team members always working on the same system or module in the code. Its true that work will get done quicker by having the silo, however if when something breaks and that person is unavailable, its going to be much harder to fix it.
- Reviews: If the only focus of HR with the reviews is to have a paper trail when someone needs to be de-hired, they will always suck. Done properly, they are tools that can help your team members grow. You can ask your team member to fill out the form in a self-evaluation way, then have a meeting with them to see how their view of themselves compare to yours.
- Breaks are important. Be it coffee, lunch, paid break, evenings, weekends. They matter.
- Overtime only works for about 2 weeks, after that, the productivity level goes back down to pre overtime rates. There are numerous studies on this that have been published.
- Make sure that your team has all the tools needed to do proper QA. If your production environment is load balanced, then the QA must be load balanced.
- Whiteboards should be easily accessible, with plenty of fresh markers. At least have 2 more then the size of the team plus you. Whiteboard paint isn't so good as its much harder to clean to do the orange peel effect.
- Team lunches are nice, get some budget for them.
- If need be, fire the bad apple in the team. If someone is always disruptive, produces low quality code, keep messing up, is rude, you need to let them go. It sucks and its a very hard thing to do.
Agile / Scrum:
If you follow it this is critical:
- Do not skip the retrospective. This is critical as that is the way the team will improve.
- Make sure that all changes to a sprint go through the PO. The PO will need to remove the equivalent amount of work from the sprint. Ensure this happens.
- Internally, plan a buffer of time for miscileanous improvements. Let the team decide and take charge of that time. Do not let additions to a sprint chew up that time.