Microsoft certification for a web developer deems it necessary to master the membership API available in ASP.NET 2. While the new membership model is a useful set of controls it is not necessarily on my list of have-to-knows for a web developer – if a lone developer is churning out lots of little websites then it probably is critical knowledge. However, in the context of a large project consuming thousands of man hours it is not a big deal – the login page and related bits can quite easily be handled by one developer in a few days while the rest of the team develops functionality that is on the business requirements checklist. It does make one wonder about Microsoft’s intended market for certification or ASP for that matter – but that is an entirely different discussion.
It begs asking the question then – What is on your list of have-to-knows? It is a question that doesn’t really have a simple answer since I would like developers on my team to know things that are a) useful and b) aren’t known by others on the team. Although it depends on the type of development – building software for Mars rovers requires a different set of skills than for a shopping site – I’m biasing this towards the more mainstream practice of developing applications that serve a business need and generally have a database of sorts where data resides that has to be viewed, captured and processed.
In such an environment, the primary set of skills that we need in the team is the ability to work with a fairly narrow set of components, tools and technologies and in the Microsoft web space that would be SQL, ADO, Web Pages, Grids, data binding and so on. The ‘senior’ developers tend to be allocated larger chunks of (more difficult) functionality and are left on their own and juniors will pick up the scraps. In most corporate development teams there is little space for developers with too much flair or hotshot developers with little experience in corporate projects as they tend to clash with the architect, project manager, testers and others that have to keep their eye on deadlines.
So if we have turned our developers, junior and senior, into cogs of a well oiled delivery machine (which should not be seen as a bad thing), then who do we get to work on all the other stuff? What ‘other stuff’? There is more ‘other stuff’ than most of us can possibly cope with – as the technologies become more complex and our solutions demand use of those technologies – we find that we are working with fairly difficult stuff, whether or not it is abstracted by tools or components.
By way of example, I am currently working on a solution that has some interesting security quirks and requirements and if you spend any amount of time trying to figure it all out you soon realise that the complexity of the domain has increased since you last looked at it (even if that was yesterday). Gone are the days of closing some ports of the firewall, you now have to implement all sorts of services, certificates, authentication mechanisms and so on – all to ‘enable the mobile worker in a Service Oriented Architecture’ (or some similar far-reaching, buzzword laden architectural statement).
It seems that while the developers are focussed on delivering the business functionality, there is a vacuum of people who can even understand the acronyms, never mind having working knowledge, of the particular domain. So a lot of this work is left up to the multi-portfolioed architect who investigates, fights with documentation, codes up samples, Googles and whatever else is necessary to establish the fit of the technology into the architecture. The architect is apparently the best person to do this because they have a better understanding of the general principles, experience of something similar (or a predecessor) and is technically strong.
The downside to this is that the architect is already overloaded and once he has the technology mastered is seems logical that he codes up the entire solution anyway; ‘You’re nearly there, so just finish it up!’ (as undoubtedly minuted in the project management meeting) . Often, if it is more once-off, it does not seem practical to handover to another developer, never mind transferring the knowledge to the whole team. While the short-term benefits of dumping this work on the architect are appealing, over time the sustainability of the team suffers and the project can start to decay.
Another mistake that software development teams tend to make is that when it is questionable as to whether the technology is the responsibility of the development team or facilities – the developers palm it off onto facilities. It is scary how few developers can even deploy their applications into a production environment or how much DBA’s have to analyse SQL statements to find the best indexes to put on tables. This creates a problem where the developers are only vaguely aware of how their applications execute – not a good place to start if you want to create quality software.
While good technical leaders are able to hand out ‘research’ tasks to developers, it would be great if the architect had access to a more clearly identified individual who could figure out a few things on the architect’s behalf – this is the missing link that I am looking for. A developer who is technically strong but may not have the other attributes, such as leadership qualities, to become an architect – but is able to get their head around complex technologies in well-scoped, bite-sized chunks. I’ll call this role a ‘Platform Developer’ as most of the technologies that need to be understood are at a fairly low level (closer to the platform). I am specifically not wanting a technical specialist, or even worse a ‘technology evangelist’ who is so wrapped up in their specialization that they suffer from architectural tunnel vision.
I think a key attribute of a Platform Developer is that he/she should be a ‘roving’ developer – moving between projects. This is a great way to spread the knowledge about the technologies across the teams and also prevents them from gaining too much business knowledge in a project and becoming ‘indispensable’ according to the project manager.
I will leave it to comments and future posts to define this role further, but first let me suggest some ways of creating these Platform Developers, or at least finding ways of identifying and using those that exist already. Everyone has a role to play…
Find a way of communicating this need and rewarding individuals. Something as simple as allowing them to use an MVP-type acknowledgement in their email signature specific to your organization, would work well.
Plan up front for use of consulting or cross-team resources in a consulting engagement style. Remind the architect that there is budget available for this kind of help. Most important – if they are borrowed from another team, give them back! Project managers hijacking resources is a bad disease.
Communicate, mostly informally, the things that are on your mind to investigate and allow developers to show stuff off, even if it appears to have no architectural fit. Don’t always try and be the single, central repository of technical knowledge.
Speak to the architects about their need-to-investigate lists and choose a technology that you are interested in and comfortable. After a five minute discussion with most architects you will probably land up with about five years of investigations that you can do – so choose carefully. Try and choose something that is a bit different from your current skills – you don’t want to become too much of a specialist and paint yourself into a career corner. Along the way, present (either formally or informally) your findings to one or more architects but remember – don’t force it into the ‘current’ architecture; allow the architect to determine the fit into their brainchild.
In summary; if for example, I want to know how to ‘Authenticate a windows application against active directory and pass the token to the web service…’. I don’t want blank stares from the senior developers or ‘about 1,600,000’ Google matches. I would like someone on hand who can help me out.
Simon Munro