Where are the software architects of tomorrow?
With many technical mentors disappearing, where do developers gain this experience?
Agile and software craftsmanship are two great examples of how we're striving to improve and push the software industry forward. We spend a lot of time talking about writing code, testing, tools, technologies and the all of the associated processes. And that makes a lot of sense. Let's not forget that the end-goal here is delivering benefit to people through software, and working software is key.
But we shouldn't forget that there are some other aspects of the software development process that few people genuinely have experience with. Think about how you would answer the following questions.
| Question | Answer |
|---|---|
| 1. When did you last code? | Earlier today, I'm a software developer so it's part of the job. |
| 2. When did you last refactor? | I'm always looking to make my code the best I can, and that includes refactoring if necessary. Extract method, rename, pull up, push down ... I know all that stuff. |
| 3. When did you last test your code? | We test continuously by writing automated tests either before or after we write any production code. We use a mix of unit, integration and acceptance testing. |
| 4. When did you last design something? | I do it all the time, it's a part of my job as a software developer. I need to think about how something will work before coding it, whether that's by sketching out a diagram or using TDD. |
| 5. When did you last design a software system from scratch? I mean, take a set of vague requirements and genuinely create something from nothing? | Well, there's not much opportunity on my current project, but I have an open source project that I work on in my spare time. It's only for my own use though. |
| 6. When did you last design a software system from scratch that would be implemented by a team of people. | Um, that's not something I get to do. |
Let's face it, most people don't get to take a blank sheet of paper and design software from scratch all that frequently, regardless of whether that design is up front or evolutionary and whether it's a solo or collaborative exercise.
We're losing our technical mentors
The sad thing about our industry is that many developers are being forced into non-technical management positions in order to progress their careers up the corporate ladder. Ironically, it's often the best and most senior technical people that are being forced away, robbing software teams of their most valued technical leads, architects and mentors. Filling this gap tomorrow are the developers of today.
Software teams need downtime
Many teams have already lost their most senior technical people, adding more work to the remainder of the team that are already struggling to balance all of the usual project constraints along with the pressures introduced by whatever is currently fashionable in the IT industry ... agile, craftsmanship, cloud, rich Internet UIs, functional programming, etc. Many teams appreciate that they should be striving for improvement, but lack the time or the incentive to do it.
To improve, software teams need some time away from the daily grind to reflect, but they also need to retain a focus on all aspects of the software development process. It's really easy to get caught up in the hype of the industry, but it's worth asking whether this is more important than ensuring you have a good pragmatic grounding. Experience of coding is easy to pick up and there are plenty of ways to practice this skill. Experience of designing something from scratch that will be implemented by a team, less so. With many technical mentors disappearing, where do developers gain this experience? Where are the software architects of tomorrow?

