Thursday, 15 October 2015
Nuance and momentum
Is Eliminating Cross Team Handoffs Possible?
- No communication overhead. Everyone knows exactly what's going on, and everyone is working from the same assumptions.
- Focus. There's no way you're going to be able to juggle 5 projects at the same time like bigger teams are often expected to do.
- A sense that you really are a team, and that you own this deliverable end to end. This is the same reason that startups are such exciting and dynamic places to work, and often take the market by storm.
- You wake up and feel motivated to come to work! It's fun. And when people have fun doing their jobs, all sorts of virtuous cycles develop. Talented people want to come and work for you. People feel inspired to come up with genuinely new and exciting ideas.
- Everyone in that small group is forced to understand all the domains end to end, which were previously kept separate. And when people understand things end to end, your quality shoots up because there are no unexpected implications from decisions made in isolation; there are no lost opportunities ("if I'd known that was something we'd want to do, I'd have built it differently!")
- The team can be autonomous. No more waiting. No more chopping and changing at the whim of far-removed senior management or marketing teams. With clear goals, and empowerment, it's pretty amazing what three people can achieve.
The Vicious Cycle of Support
Death By a Thousand Incomplete Refactorings
Some conscientious members of the team ask when we'll move on to the next phase of refactoring. Tumble weeds drift across the office floor. Strangely, no one fancies descending back into that dark chapter of their lives.
The final solution, once all functionality had been refactored, meant the switching off of the old system:
However, what the Make It Shiny Again project actually achieved was this:
1 See Martin Fowler's TechnicalDebtQuadrant↩
Thursday, 8 May 2014
Bend Over Backwards. Now Stay There.
High staff turnover is a bad thing. Pretty much everyone would agree on that - especially for a development team where knowledge of the system is essential.
In fact surely keeping staff happy - retaining the best talent - is a priority for all managers.
But when the pressure's on, IT managers will end up cascading the misery to their team for the simple reason that all managers are primarily judged on and therefore incentivised by meeting project deadlines.
Meeting deadlines means meeting budgets and delivering ROI. In other words, it means making money - and this is the only priority of any company anywhere regardless of what their website says about CSR, diversity or people development. Money is all they care about - make no mistake.
So what does this mean for you as a developer? It means that the only person you can rely on to look out for you is yourself. If you regularly bend over backwards to meet deadlines then that becomes the norm. If you join the Working Late Gang, you give them strength in numbers - it becomes the culture. The unrealistic expectations, the flawed process, the poor planning - all of it is hidden or condoned by you picking up the strain and making it happen.
Stop.
Thursday, 27 February 2014
Lazy developers?
The problem, in a nutshell, is that people don't believe that the developers have thought "creatively" enough about how to meet the deadline; on some level they're trying to give themselves an easy ride.
- "I'd need to consult with Pete, it's not my remit to say whether or not we can add more people to that."
- "It'd be best if we didn't distract Pete right now to ask him for estimates on this. He's maxed out."
- "The team as a whole has had 5 distractions this sprint already, and that's our stipulated maximum, sorry."
- "No, Pete said 10 days. He might turn out to be wrong because it's just an estimate, but he's the most qualified person to provide that estimate and we have to go with that."
- "No we can't commit to that date. We don't know if it's achievable or not. But we can commit to delivering the stuff you said was highest value first, and involving you all the way."
- "We could try and achieve that, but the team's been flat out on this stuff for months, and are having a pretty tough time. We need to try and find a sustainable pace for everyone's sanity."
Wednesday, 21 November 2012
Designers onshore, coders offshore?
1. As work waxes and wanes, or if times get hard and the team needs to be downsized, the number of people offshore can be increased or reduced easily, and without recruiting or losing permanent members of staff.
2. It's cheap.
However, for me, this model poses two fundamental problems as well; one directly, and one indirectly.
1. Working with developers who aren't in the same office as you is hard. Working with people who aren't in the same time zone as you is even harder. And collaborating with people whose first language isn't English (often on a poor phone line) makes it harder still.
I believe that the impact on productivity [1] caused by these things risks outweighing the financial benefit.
2. Usually there's not much of a recruitment process involved; rarely even a coding test or technical interview. Managers ask the offshore company for another 5 "resources", and on Monday morning there they are on the end of the crackly phone line. However, the offshore team you accrue often have less than a year or two's development experience.
Now don't misunderstand me, I have no issue with junior developers (I was one after all), but I believe that junior developers need support and development - precisely the sort that is usually denied to offshore contractors: training, educational sessions, mentoring and so on. They are often denied access to the business and therefore an understanding of the problem domain and context they're working within.
Considering all of the above, it should come as no surprise that the quality of their output isn't always up to scratch.
However it does come as a surprise to managers when code quality decreases, and team efficiency and morale slowly decays. They never say: "perhaps it's the fact that a large number of the team [perhaps even the majority] are geographically disconnected and not very experienced".
Why not?
The answer lies in one of the great myths of software development: Your team should consist of Designers and Coders.
This is how the myth goes:
The Designers are the permanent, onshore, team. They have the knowledge of the business, and are usually more experienced and (hopefully) have time and money invested in their development. They're the "intellectual capital". They may even be flattered into thinking that they should move away from the daily grind of actually cutting code as that's beneath them. After all, they do Design with a capital D.
The Coders on the other hand are ten a penny, and can be less skilled - after all, all they do is write the code, and implement the design which the Designer came up with. Practically anyone could do that.
Right?
Well my opinion is: Wrong. Absolutely wrong. And here's why: Coding is design. [2]
Almost every line of code I write involves a design decision: Do I use an instance variable or a local variable? Do I make this component request-scoped or globally-scoped? Do I hold this data in a Map or a List?
All these decisions add up to create code which is more or less extensible, performant, resilient, secure, maintainable and so on - and almost all of these decisions are too detailed to be made by the Designer. (Having said that, every now and then you do meet a Designer - who may also call himself an Architect - who creates designs to this level of detail. In my experience these designs are almost as large as the code itself, unwieldy*, and probably full of oversights and mistakes which only become apparent when you actually cut the code).
(* As Martin Fowler [3] points out: For diagrams, comprehensiveness is the enemy of comprehensibility.)
So what does this mean?
It means you should get your experienced developers to write code. They should be both Designer and Coder - with no distinction drawn between the roles.
Let me give you a scenario I've experienced, and seen, many many times.
Working as the Designer, I produce a documented design and go through it with the Coders. The Coders are fairly junior, so this process takes a while.
A few days later I ask to see the code, or I get a code review request. When I look at it, I see that their interpretation of the design isn't exactly how I imagined it.
For some things I can clearly explain to them why the way they've done it is problematic, and I ask them to change it.
But some things are less easy to justify. I know it's not how I would have done it, but it's getting late in the project to refactor things. It seems to work okay - so I say "you know what, just leave it as it is - it's probably fine."
When a production issue occurs three weeks later I realise why it should have been done the way I instinctively thought it should be done.
Sometimes it's not a production issue, but we suddenly need to extend the functionality in a new way which the implementation makes more difficult - but funnily enough if it had been implemented the way I would have done it - had I been the Coder and not just the Designer - it would have been easy to extend in this new way.
A variation on the above is that the experienced developer (the Designer) is so thinly spread that she actually finds she doesn't have time to review all the code the junior developers (the Coders) have produced. This makes issues with the low level design even more likely - and when the production issue occurs, the Designer looks at the code and exclaims "WTF!?" (which means What Terrible Foolishness!)
So on the off-chance you're a manager with the authority to control how your development team is managed and resourced, try giving quality a fighting chance. Abandon the offshore model and give your permanent team everything they need to do their jobs well.
You'll be amazed at the difference it makes.
References:
[1] Zenun et al: The Effects of Teams' Co-location on Project Performance http://extras.springer.com/2007/978-1-84628-975-0/col/dpi.inpe.br/ce@80/2007/01.22.18.46/doc/paper.pdf
[2] The reader who can tell me who first said this wins a Cadbury's Fudge, because I can't find this reference anywhere. It was probably Kent Beck, Ken Auer or Roy Miller.
[3] Fowler, Martin: Is Design Dead?, http://martinfowler.com/articles/designDead.html




