Create an Enigma machine
It's the early 20th century. You and your team are in a unique situation. An English spy has convinced the German Army that they have plans for an unbreakable code machine. Only problem is: the English don't have those plans. Your team has been asked to do the almost impossible: design an encryption machine that is almost unbreakable but will convince the Germans they have a fool proof system. You will have opportunity to design the world's most famous encryption apparatus - ENIGMA - with all the modern tools that are available today. Can you and your fellow teams do in 2 hours what the Germans did in 20 years?
For this assignment, you will be split up in multiple teams that have to work together to come up with a solution. Each team will use mob programming to come up with a solution for their parts. Extra challenges come from the need for coordination.
Mob Programming, also known as Team or Ensemble Programming, is an innovative practice where a group of software engineers works collaboratively on the same task, at the same time, in the same space, and on a single computer. This approach fosters teamwork, facilitates knowledge sharing, and produces high-quality code while promoting a deeper understanding of the project.
(https://www.techtarget.com/searchsoftwarequality/definition/mob-programming)
- Enables continuous learning - Everyone has total access to the shared knowledge of team members. Teams can quickly solve problems that come up, and team members continuously learn more about the development process.
- Ensures coding standards are met - By having the navigator and mob review the code as the driver writes it, the team can make sure coding standards are met. Having another separate code review is not required. Best practices can also be reviewed in real time.
- Overcomes individual weaknesses - As development continues, the strengths and weaknesses of individual team members become more obvious. With shared access to knowledge, those team members can learn how to address those weaknesses.
- Provides fast feedback - Constant feedback can be given and discussed by mob members.
- Enables continuous work - If one team member is out of office, work can continue as planned.
- Cultivates both hard and soft skills - Not only do team members enhance their technical skills, but they also develop soft skills, like communication and time management abilities.
There are 3 roles in mob programming:
- The mob: a group of developers responsible for discussing the program and coming up with good ideas to improve it
- The navigator: listens to the mobs discussions, and communicates instructions to the driver. The navigator is the decision maker on where to go with the code.
- The driver: the driver converts the navigator's instructions into code. The driver shows NO initiative! He may only convert the instructions into code
For this session, we'll switch roles every 4 minutes (normally it's longer). The navigator becomes the driver. The driver becomes the mob.
- On switching, immediately drop what you are doing, even in the middle of writing something. Do not finish, the next driver will take over
- 4 minutes start as soon as everyone has assumed their positions
- It may be an idea to assign 1 of your mob members to have a quick check with the other teams now and then, especially if you have mutual dependencies!
- We will use TDD: write a failing test and then fix it by implementing new functionality or correcting old functionality. Always start with a test!
- As a navigator, it can be tempting to undo the work that the previous navigator did, if it is not how you would do it. Try not to do this - explore what the other navigator was trying to before discarding it!
- Create a folder and
cdinto it - Create a virtual environment with
python -m venv .venv - Activate the environment with
source .venv/bin/activate(Linux) or.\.venv\Scripts\activate(Windows) - Install copier:
pip install copier - Copy this template with
copier copy git+https://www.github.com/MrGigSolutions/workshop_enigma .On Windows, if you run in a bash shell, you may need to callwinpty copier copy git+https://www.github.com/MrGigSolutions/workshop_enigma .- Follow the template instructions. - Your team will have its own folder in which to play. Try to only work in your own folder, as the other teams will be working in theirs.