Here at Mayfly Media we are always working hard on project work. However we also make sure we have time to do something a bit different, to have a chance at building something open source to give back to the open source community that us developers use so often. We know the importance of having time for just playing, a technical day where we work on non-project work only.
Mayfly Media founder Janusz Stabik came up with the idea of "Yoxo". This would be a project where we would spend several days developing an open source package for Umbraco, to solve a problem we had to achieve something that wasn't yet in the core or a package.
We all put our package ideas into a Trello board, and voted (2 votes each) on our favourite ideas. This got the ideas down to a short-list of 4, taking into account feasibility expected popularity of the package and whether we could build it in the alocated time. Emma then created a PollDaddy poll showing the winner was the Multi-Root Node Multi-Node Tree Picker:
The PollDaddy poll
PollDaddy voting results
So the catchily-named Multi Root Node Multi Node Tree Picker (MRN-MNTP) had it. This is a way for Umbraco editors to be able to select multiple nodes (as they can now), but now from multiple root nodes too! We decided to initially create the package for Umbraco 7, and add Umbraco 6 support in future if there is demand for it.
Emma created an initial empty repository for it in source control, and the devs working on Yoxo installed a local Umbraco 7 site for testing the package on. We read up in advance some guidelines for creating packages in Umbraco, and considered including a sample Razor file for the picker too so that people can use it straight away. On the day, we had groomed the product already, as we had come up with the idea by the shortlist process on a Trello board down to 4 options, and then a final PollDaddy vote on the preferred option to run with for everyone on the first Yoxo day. We planned the day's events and the schedule as follows:
- 8:00-9:00: Discussions and preparations as people come into office
- 9:00-10:00: Mini Sprint Planning designating tasks (e.g. back-end, front-end, testing) and creating simple stories to work from most efficiently.
- 10:00: SPRINT ONE KICK-OFF!! Mini Scrum - Who is working on what, any blockers, go!
- 10:00-12:00: Sprint One - Initial package development
- 12:00: Mini Scrum - first phase of dev done, what we did this morning, what we're doing this afternoon, and any blockers!
- 12:00-12:30: Wash-up after sprint, reconvening and catching up on emails
- 12:30-1:30: LUNCH
- 1:30: SPRINT TWO KICK-OFF!! Mini Scrum - Who is working on what recap
- 1:30 - 3:30: Sprint Two - Continuation and completion of development
- 3:30: Mini Scrum - what we did this afternoon, what we need to finalise or fix, and any urgent blockers
- 3:30 - 4:00: MINI UAT Finishing up, testing, bug fixing!!
- 4:00: FINISH! Demo of package to the team in the office/Skype, Mini Retro
- CELEBRATE a successful first Yoxo and the start of our new package!
The demo part would prove to be a bit ambituous for the first day and instead more of a wash-up was considered. We started the day with Sprint Planning. We split into pairs for pair programming, an agile software development technique in which two programmers work as a pair together (on one computer). One, the "driver", writes code, while the other, the "navigator", reviews each line of code as it is typed in. You then swap roles. And the navigator can't grab the keyboard (no back-seat driver!)
We tried to run it in Pomodoros (Italian for "Tomato"), a technique where you time your work into (usually) 25 minute slots, and then swap the roles over (with a break occasionally). Incidentally, you can get your own Pomodoro timer here. We split into the following pairs, with James taking the role of Scrum Master:
- Callum + Simon, focusing on the prevalue editor
- Mike + Joshua, focusing on the datatype control
- Dean + Tom, focusing on on testing and comms
- Emma + James, focusing on organising the day, trouble-shooting, Tech Lead
- Declan took photos throughout the day
We split the work up in more detail in Sprint Planning into a Trello board that we ChromeCast to the office TV.
The Trello board on the office TV containing the stories for the Yoxo package
We also knew there would be bug fixes to consider as part of the 4 hours development time. As development progressed throughout the day, we found we needed to reverse engineer the existing multi-node tree picker, no mean feat, and before lunch we fully realised exactly how big a task we had in front of us. We knew it would be a challenge and a lot of this day was about learning about our approach. However we were really aware of the size of the task we had in front of us now.
Pair programming and banter. From left (anti-clockwise): Josh, Mike, Dean, James, Callum and Simon
Not to be put off, we defragged over lunch and came back fresh and ready to crack on. Every Friday we all go for pizza or pie at 51s (or Pieminister).
Think it is time for a defrag... James, Simon, Mike and Josh
After lunch, we continued to pair up and research our approach more to try and get to a point of knowing how we would be developing this - a lot of Yoxo today was to be about spiking out the package and understanding how we will be building it.
Callum creating a new data-type in Umbraco
We wanted to set up a build script to automate the release and creation of the Umbraco package. James Patterson came up with a way so that during development, and to do a 'release', we could now do a build of a package by a tool to build the source and generate an installation package you can install via the Developer area within Umbraco. We came up with an initial name and a logo for our package - "Willow". However this name didn't stick as much as "Mr N Picker" (Multi-Root Node Picker). By the end of the day we had made headway on the understanding of the existing Multi-Node Tree Picker and the package we wanted to build, and we quietly worked away until the late hours.
From left: Callum, James watch on as Mike and Josh pair program with Josh "driving"
We learnt a lot from the day and by the end of it, we had a clear idea of the package we're building and what we need to achieve to complete it. Several more project days ensued, with different teams working on the package on a Friday. The final day was the day where we needed to pull everything together. Yoxo officially finished on Friday 15th May, and against all odds we were able to get the code finished and through QA. The Trello board is now (almost) empty! The only thing that was left to do was to release the package. As of right now, Mr N Picker is now published!
- GitHub: https://github.com/mayflymedia/Mr-N-Picker
- Our Umbraco: https://our.umbraco.org/projects/backoffice-extensions/mr-n-picker
- NuGet: https://www.nuget.org/packages/MrNPicker/
Mike tested the NuGet package against some local builds and could report that the package is working. One of the greatest achievement moments we felt was seeing Yoxo in Nuget! We're now looking forward to planning our next Yoxo.
Mr N Picker in Nuget