In the last months, I was working in an internal project for a customer (@southworks) named Hogwarts Project. The product owner is @MartinSalias, and the only permanent member of the team is me. We had received help and feedback from internal reviewers, and we are working hard to deliver the beta version of the initial deliverable.
But, what is Hogwarts Project? Some of you read my tweets, announcing the days I was working in the project, but without much more details. Remember, it’s an internal project for a customer, so it’s not publicly available. Maybe, in the future, more info will be public. Despite this, I can write some of the base idea and goals of the project (I encourage my product owner to post some additional clarifications).
You know that software development is a huge task, and each non-trivial project needs the help of lot of techiniques, abilities, and knowledge of a bunch of software developers, usually working in a team. But if you are a software factory, or you have a software dev house, one problem you are constantly facing is the scarcity of experienced developers. One way to supply more seniority to your staff, is increasing their abilities and knowledges. That is the context where Hogwarts Project was created (Hogwarts refers to Harry Potter’s college of magic).
The concrete outcomes of the project are deliverables (notes, presentations, examples, exercises, evaluations, and more… maybe a book with guidance?) about some topics in software development. There are many goals in the project, a mission, and vision. But the basic idea is to train software developers to increase their abilitites, knowledges and give them more seniority.
We have chosen the following subjects to attack in the first courses:
- Test Driven Development
- Inversion of Controls
- Mocks Libraries
- SOLID principles
- Use of code repositories and some other essential tools
- Write part of an real-world application using the new skills.
But, how to teach a bunch of programmers, in such topics? We are still exploring the ways to employ. Following agile principles, we are delivering parts of the project, in order to get feedback from our coworkers and devs. The feedback will be used to polish the material, change directions, or take new ways of doing things. But, initially, we are delivering:
- Instructor material, so any experienced trainer could take any course and give it to an audience. The material is composed of presentations, notes explaining the main points, examples, exercises, and evaluations, maybe virtual machines to use during exercises practice.
- Bibliography and additional resources.
- Software libraries and applications to use.
Some key points:
- It’s not only practice. Note that we are not concentrated in a technology, or platform o language. Initial versions of the outcomes are oriented to .NET and C#, based on current needs. But all the base of the courses could be readapted to other technologies and languages. You need to know WHY we are applying TDD, or a SOLID principle. We want thinking people, not repeating monkeys.
- It’s not only theory. You can see this as learning guitar. You need to practice what your instructor is talking to you.
- You need examples. Not only fancy presentations.
- You need exercises, first one should be basic, but advanced ones too.
- You need to practice in a real-world application, to integrate what you know and practice.
- You need bad and “better” examples/solutions, to grasp the base of the decisions to use some of the above topics.
- The aprentice needs to be evaluated. And she/he needs to receive feedback about her/his strong points and debilities, in order to write a plan for improvement.
Once the initial versions were reviewed and improved, the next step is to expose all these outcomes to the community. One of our goals (an ambitious one) is to create a sustained movement to help other software developers to increase their abilities, here in Argentina, and, we hope, in other countries.
We are working on the first installment of TDD and IoC courses, to be reviewed internally and by selected external reviewers. I want to write short posts, applying the ideas, discovered resources and similar material to be included in Hogwarts deliverables.