Fortunately, I have been lucky enough to work with a lot of dev teams. Good and bad.
I've seen teams with a sickness so deeply in their DNA that they were doomed to fail. I've also seen teams that gets you up in the morning while looking forward to meet your colleagues.
But that team that keeps you in being that place and continue working with them, didn't happen accidentally. Someone created it. This is my list for a happy and efficient development team. Cause these two are tied together and evolving along side.
Everyone should write the same code. Otherwise, you'll end up with a huge code base that no one can understand, leave aside to scale it.
###Git & Git flow or in other words. Now, this is the first and the last time I'm talking about this. If you don't keep your code under some kind of version control, there is nothing much left for you.
Version controlling your code means that you keep history of every file change, every line addition and deletion. Jumping from the present to a certain point of past, that you know your code was working will save you tone of hours of frustration and money. ###Dev Environments that simulates the live project. You make changes to the live site? No, it's not normal. No, no one does this any more. What it takes to be able to deliver the best to our clients? Is to test it for them, before them.
Make sure you can make a change to your project, or a replica of it, and be able to reproduce any sort of abnormality you can before it goes live.
###Automation is key. He/She who has ever worked at a fast grown company, knows that speed is priority. But keep doing the same process over and over again can't be efficient. Find those processes. Automate them. Out source them. Hire people to do them and get back to your work.
###Tasks Assignment & Prioritisation that are visible by everyone, Making sure everyone knows what it has to be done. Most of the times, team will stay in idle state when they don't know what to do. Talks should be clear to everyone and allow them to do work for a given time before new tasks arrive and reassigned. Those tasks should be sorted by criticality - prioritisation should be respected.
###Responsibilities must be clear to everyone. Have you ever been in a situation where the manager asks why something happened and everyone in the team is looking each other? I know, it sucks. But clearly, there weren't no responsibilities. Keeping responsibilities clear means that everyone knows when it's time to stand up and take the response. So, the team can learn and continue.
###Document Everything because no one can guarantee you a job for ever like no manager can guarantee a team that would stay the same for ever. Documenting means that while the faces in team changes, the work can continue. Each new person coming can immediately get in track and continue the task the someone left unfinished.
##Finally I would say that, when you're joining a team, you can't simply wait everyone to be as you would like to be. You may have to put a little something in the mix. Teams are not born perfect. It's the everyday inside process that will eventually mature and fill with wisdom the people behind. A perfect recipe to scale your team.