02/09/2010 Leave a comment
I work for an organisation that thinks that juniors can’t design. Even worse, they still think that because of this alleged lack of skills, they need to be fed design. Consequently, projects needs “designers” that just do big upfront design.
I say no! I even say, don’t give them anything! Instead, coach them, give them opportunities to try and learn and propose.
I see several practices that help addressing the topic:
- Design sessions: During those short sessions, have more senior roles (seasoned developers and architects) work out a design with the juniors. This is highly beneficial because they are an active part of it. They better understand what to implement afterwards because they know the reasoning behind. The most important is that they learn how to tackle design.
- Pair Programming: Have a senior and a junior work together on a story. Alternate roles so that the junior can play both the driver and navigator roles.
- Test Driven Development: TDD is all about design. Designing for testability, YAGNI, baby steps, incremental design, refactoring. Do ping-pong pair programming. They once write a test, they once implement the code to pass a test written by the team mate and they once refactor. Then repeat.
The benefits of this approach is that the process is much leaner. If we try and map the benefits to the seven lean principles:
- Eliminate waste: No time wasted on lengthy designs that will never be accurate. No overproduction of design.
- Build quality in: No need fork any rework after implementation. Peer reviewing is immediate thanks to pair programming.
- Create knowledge: Both juniors and seniors learn and grow their skills.
- Defer commitment: Design just in time.
- Deliver fast: Design just in time and enough leads to a shorter lead time.
- Respect people: Juniors are respected and considered fully skilled team members
- Optimise the whole: Team improves, no constraint on expected design, rapid feedback on the design.