Friday, 29 November 2013

One configuration file to rule them all. Automated deployment for multiple .NET websites.

Spring is almost over and my garden is now full of weeds (especially that evil crab grass), apart from a two metre square where I went nuts for an hour.
So naturally, being at one with nature, I was thinking about build and deploy scripts. About the sticky tape and chewing gum shambles of third party libraries and configuration it's been my pleasure to marshall into release packages over the years.
Image of overgrown garden
It doesn't have to be that way.  As I watch a line of ants crawl up a weed into the car..
Build and deployment can be challenging to manage. I have settled on a strategy I find flexible enough to cope with complex web deployments and easy enough to reliably maintain.

The Plan

So in short, here's the plan

Wednesday, 13 February 2013

The Role of the Development Manager in an Agile Environment


A great deal of modern literature , blogs, conference addresses - discuss the nirvana of multiple Scrum Teams interfacing directly via a Product Owner into the rest of the business in this new Agile Age. Management structures have been swept away and all the pen pushers have been replaced by highly productive developers all focused on exactly the right prioritised tasks. "Management" is so 1990s. A webinar I watched last week discussed the view that the only people who want to get into management are obsessed with "Power, Control and Status".

The reality in my experience is somewhat different. In fact I'm struggling to think of a single company that does not have a "Development Manager" role in one form or another and various other levels of "management". So what do these people do? Aren't all decisions now devolved down to the teams, making their role redundant and if they would just get out of the way then everything would go so much smoother? In fact you could probably hire an extra couple of developers for the salary that they holding on to...

So as a straw man, and in no particular order, here are some of the key roles that I believe a Development Manager has to play. This list will vary depending on the size and type of the company (some may be taken by CIO / Product Owner / HR in larger organizations, smaller organisations you might be doing all of this and writing the code too!) . In my opinion a small to medium sized company a good Development Manager should at least be across all of the following.
  • Planning
    Plans, spreadsheets, diagrams, proposals, presentations. You need to be the organisor in chief and be able to both pull together the big picture and be able to make other people understand it.
  • Third Parties
    You need to deal with various third parties, contractors, vendors, salesmen, agents. This will usually feel like a distraction, until the point where you really need the extra help and need to dip in to your extended support network. Then its vital.
  • Own the Big Calls
    You need to make (or facilitate) the making of the "Big Calls". If its time to throw away your QA infrastructure and invest significant money and time moving to a new platform you need to own that call. You need to listen to all of the experts you have in this area, and at times you may devolve responsibility of the decision to others in your team but as far as the rest of the senior management in the business is concerned this is your call and you need to own it.  
  • Technically Up to Date
    It is very difficult (but not impossible) to lead a development team and not have a good understand of the underlying technologies. A solid understanding of the pressures and strains of what its like to be really in the trenches delivering results make leading the teams that much easier. Parachuting a "professional manager" with little technical expertise into this role I have rarely found to be successful. 
  • Evangelist and Defender of the process (whatever it is)
    Just as one of the key roles of the Scrum Master is to defend the Scrum Process, the modern development manager will need to be defending the process within IT across the business on a daily business. Whether its Scrum or Kanban or something else entirely, you need to be out there promoting its merits and also defending why. This will be working with Sales to remind them not to commit to dates and cost without reference to the backlog and the estimation process, explaining the risks of by passing the continuous delivery platform to release an emergency patch, but also giving senior management the understanding of the flexibility in the agile process and the opportunities it gives.
  • Glue 
    One of the biggest roles you will have is your ability to coherently "glue" the IT team into the rest of the business and manage the expectations on both sides. This is done at many levels and its a two way process. Externally it might be coffees with other general managers, presentations and status reports to the board, making sure your team is located in a visible part of the company. Internally it might be embedding your staff into other parts of the business, making sure your team attend company events (the number of times I've seen the IT team not turn up to the Xmas party is crazy....!), transparently explain what is going to be possible in the year ahead etc.
  • Translator
    Your team might be completely fluent in Stories, Epics, Velocity and Backlog Grooming - try and present that to most Sales Execs or a Finance Manager and their eyes will glaze over. To just dismiss their failure to understand is missing the point - its your role to translate that into something they will understand. They are likely to have huge business experience that may well will dwarf your own. You need to learn to speak their language and not just shout louder about Burn Down Charts and Retrospectives.  
  • Managing Budgets
    I know that there are movements for removing the traditional yearly budget - much of that I can see has merit (and is a whole separate blog post). The reality for the vast majority of companies is that you will have a budget constraint for the year and you need to learn to manage that well. Maximising the money you have, making tough decisions on training / consultants / hardware etc is not easy. The Product Owner might be able to talk about Story Points and Epic progressions, the Finance Director will look you in the eye and ask you  how much its going to cost - and you need to have an answer.
  • Salaries / Bonuses
    This is related to Managing Budgets. You will have senior staff, junior staff, staff will expensive skills and some with skills that are cheaper to replace. You will either need to be setting the salaries of your team, or have heavy influence on what that will be. Agile/Scrum does not in my experience negate the individual traditional salary increases and the challenging conversations you will have with your staff (and the Finance Director!) to both keep them here and engaged while not bursting the budget... 
  • HR Issues
    It is likely that you will need to be in the front line for the day to day HR issues within the team which is likely to include sick leave, holidays, time-keeping, dress policies, disputes in the team etc At times you may find yourself having to enforce a company policy that you do not agree while at the same times battling behind the scenes to get it changed. This might not seem that important in the scale of the bigger picture but get this wrong and you may turn round to talk to your team at some point and there is no one left following you..
  • Culture
    You are responsible for the overall culture of the department. At times your hands will be constrained by overall company culture as you will in HR, but the fundamental culture of what it is like to be a member of your team is down to yourself. Are you inclusive, approachable, friendly, stern, no nonsense, transparent, secretive - the persona that you exude has a large influence on the team. Do you celebrate birthdays or take people to the pub to celebrate project successes? These seemingly small matters can have a large impact on success. 
  • Coach / Personal Development
    The people you lead I believe you have a duty of care towards their own personal development. This is part of the culture. Take time to find out what makes your team members "tick". Everyone is different. For some its conferences or the ability to present to the business. Others its investing in their technical skills. Make time to look after your team.
  • Hire the right people
    Agile is not pixie dust that you sprinkle on developers and suddenly they become amazing human beings likely to create the next Google. In my experience, there are a great number of IT staff who really struggle in an agile environment. Some people struggle to work in an intensive team environment, to expand their skill sets to become more cross functional, to commit to deadlines with their peers, share their code etc. Some others are just the wrong fit for the culture of your team / company. I know a number of people who work great in large corporate environments but are overwhelmed in a smaller organisation - and vice versa. The development manager needs to be fully in the HR process and make the final call for who is in the team.
  • Fire the wrong people
    This is the hard one for anyone who doesnt view the people their team simply as "resources". If you are leading your teams well you will get to know them, find out about their lives, their partners and all the responsibilities they have outside of work. And at times, for the sake of team/project/budget you will have to let them go. I'd suggest that if you havent had to have that face to face conversation you havent really experienced what management is about. I believe this isnt the teams responsibility, its not the Scrum Masters responsibility, its yours - and its one of the toughest roles you have. Additionally one of the biggest mistakes you can make is not facing up to these hard decisions and facing up to them early.  
  • Leadership
    Fundamentally though this is all about leadership and not "management". You need to be organised and have the "management" part working well, but more importantly you need to lead your team(s) and use all the soft skills you have to bring them on the journey. You need to define that journey, encourage people .  The best analogy I can come up with is that you are the football coach. You need to assemble your team, form the culture, decide on the tactics (while taking the best advice from all the experts you can) and when it comes to game time believe that you have made the right calls and let them go. Sometimes you will win sometimes you will lose and you need to learn from your mistakes
Lastly, the role of the Development Manager is not for the faint hearted. Being the visible senior interface between the "IT World" and the rest of the business means its likely you will at times take a beating from both sides. You will at times make mistakes and this will affect many people and maybe even the core business itself - you have to learn to live with this and have the courage of your convictions. You will probably end up making compromises that fully please no one and on one side be seen as managements spy in IT, and on the other as the strange IT person who swallows the companies budget and talks this funny language. But if you want to make a difference and drive success for the business, your team and ultimately for yourself it can be a very fulfilling role.