Codegarden Crowd (1)

Contribution stories: Emma Garland

Name: Emma Garland

Job title: Senior Software Engineer 

Has been working with Umbraco: For over a decade (since 2009) 

Emma Mvpcg18 1

What type of contributions to the Umbraco project are you involved in?

I try to contribute to Umbraco in different ways as much as possible. Something what feels like a precious memory during our lockdown times is travelling around in the last few years talking at Umbraco events. I was thrilled to have had the chance to attend the Umbraco HQ Retreat, contributing towards the Umbraco product and Our website with other HQ and community members in gorgeous Denmark surroundings. I’ve also had the luxury of attending some beautiful CODECABIN unconferences, immersing myself with other developers over a long weekend. I’ve been on the umbraCoffee show with Marcin and Callum a few times to share things I’m working on, and I try to listen in regularly to catch up on all the Umbraco news. When possible, I attend social community meetups like umBristol to see local familiar faces and Umbfamous people such as top package developer Lee Kelleher! During those events, whilst learning and absorbing lots from others, I try to give back by sharing ideas and collaborating. 

More recently, I’ve been added to Unicore, the Umbraco .NET Core migration project community team. I’ve also been voting as part of the jury for the 2020 Umbraco Awards Show.

Internally at Rock Solid Knowledge, myself and fellow Umbracian Karl Tynan keep on top of Umbraco news and updates, optimising our deployment processes, using Umbraco Cloud as well as rolling our own. We write articles about the projects we’re building, and hopefully these case studies inspire others as to the possibilities with the Umbraco CMS. There is one in the pipeline about the Microsoft LUIS Machine Learning solution we built (my talk at Umbraco Spark 2020). I also wrote an article a while ago on SOLID Principles in CMS Development for the fab monthly Umbraco community Skrift magazine. Writing the article pushed my thinking around applying SOLID principles not just around code, but to content management systems too. Like others, I find that when contributing via talks and articles I end up more familiar with the subject matter by trying to find ways to share my thoughts.

What motivates you to contribute?

For Umbraco specifically, I just love the product, having been introduced to it in my early .NET days. I found it usable and flexible, even a decade ago in version 4. I appreciate the fact that Umbraco has core values that it holds dear - foundations like friendliness that Chief Unicorn Niels Hartvig and the team share openly, and seem to return to when making decisions. This can only help feed the community element, which has opened so many doors for me and others to get involved. With all this considered, and the support for getting involved via the Our forums, Slack and Twitter, it was an unconscious decision to contribute to Umbraco in the end; it just happily evolved that way. 

Developers use open-source software (OSS) products every day. Packages and products often reference a multitude of other packages in turn, many of them open-source. There may be a matrix of dependencies going on, and we might never know how much OSS is used to keep the engine running of the thing being built (and maybe charged for). These packages need to be kept updated to a high, modern standard, as technology moves on exponentially, and browser and security updates come in at least daily. Someone must maintain the package to allow it a chance to keep up, whether it be the original creator or others who have decided to help. The last thing we want is that hopeful OSS package to wither away, becoming obsolete or encumbered by technical debt; the exception being when it is evidently time to move on, perhaps being replaced by a refreshed option, hopefully with the blessing and input of the original author(s). Either way, it only seems right to help give back to OSS, whether through code contributions, technical articles or knowledge shared with peers about that product. Even asking the original author about a feature or raising an issue might help resolve things for others, although I try to contribute to the fix if it is within my capacity. I am keenly aware of how pressurising it must be for OSS developers to receive issues at any time within 24 hours, and it can help take the load off to step in and help.

There is the self-learning element of open source contributions, too. I am in my happy place when learning something new, and luckily the tech world is a career choice that has aligned well with that. So, contributions such as joining the Unicore team mean I am exposed to .NET Core by proxy, as well as being immersed in the Umbraco codebase and actively learning about both during my day job.

Sometimes, for me, contributing is purely just for play! I actually bought a new Echo to contribute to Carole Rennie Logan’s Alexa hackathon in 2017. I didn’t end up publishing an Alexa skill, but I learned a lot, had fun socialising with others online, and did something outside my comfort zone. I had never coded against an IOT application before! I believe play is an important part of life and work and would recommend Charlie Hoehn’s “Play it Away”, having finished the audiobook for the second time. If you can incorporate a sense of play in what you are doing, hopefully time will fly, and it will energise you for times when you might feel under more stress and anxiety.

Being supported to contribute internally by Rock Solid Knowledge helps a lot, and I run contributions past them that may take up work time. Recently, we were honoured to be awarded the Umbraco Contributing Gold Partner badge to recognise the time that we invest in our employees to help with various aspects of Umbraco. I always write up a business case for attending or speaking at conferences - and having a training budget to draw from helps immeasurably.

How much time do you dedicate to contributing? 

I like to have some sort of structure around what I do, but don’t like to give myself unrealistic deadlines either, or I’d risk feeling resentful of the thing I’m eager to contribute towards. So, I fit it into a slot of time like AM or PM in a day and have an idea at the start of each week what I want to achieve. I like this weekly way of planning out my time; the length of long running projects can otherwise feel overwhelming at times.

Internally, I would say we spend around 10% of company time on non-client projects. Externally, in my free time, I probably spend at least a couple hours a week on average. It totally depends on what is going on in the rest of my life, and I also factor in time to volunteer at Cats Protection. Time is limited and there are a lot of causes I’d like to say yes to but can’t, so I need to limit myself to a realistic amount of time. Pets take up time, as does gaming and gardening… despite being at home, my free time hasn’t expanded as I thought it might; other hobbies expanded to fill the gaps.

If I’m honest, I have a sense that I could do more, but every time I take on something new in my spare time, it takes me much longer than I expect to roll out into a viable “thing”, and I often end up deviating from the original path! I think that is why time-planning is so important...

How do you manage your contribution time?

…forgive the obvious segue. We use time-sheets internally, so if the contribution time has been during work hours, it will go on there. Otherwise, I tend to find early evening (before dinner) is my optimal time for contributions. Weekends don’t work well for me, because I need that time to mentally recharge, spend time with family in the house and garden, play and have a break from the screen. I find I end up feeling more drained in the following week if I spend too long over a weekend in front of a laptop. The exception is when something or time-critical needs to be done. For example, I spent a chunk of time recently testing the new Unicore User migration work by my colleague, Identity expert Scott Brady. I tested on a Saturday morning so that the rest of the weekend would be free time to play around on things without a set deadline. Tends to reduce that Sunday homework dread feeling!

Are there productivity tools that you use and that you can recommend to (new) contributors to the project? 

The Pomodoro technique - setting a timer to e.g. 25 minutes of focused time, followed by a short break. I would be fibbing if I said I always do this formally, and my egg timer has long broken, but it tends to be the pattern of work I follow. As I get older - or maybe as technology becomes more focus grabbing - my attention span becomes shorter. The exception seems to be when I’m immersed in something, in the flow state, such as gardening or biking, or working on a really immersive bit of code without interruptions. I’ve also seen Timeular mentioned on Twitter by Owain Williams - it looks like a cool, tangible die for logging time with.

Work with the Unicore Team

How were you able to get started with the team? 

I discussed internally with Rock Solid Knowledge as to whether Unicore would be something I could handle if I got through. Bolstered by knowing I would have internal support from my team if needed, I wrote up my application and sent it to Bjarke with a couple of questions. I was excited to be invited to participate, and honestly a little nervous about what I would be able to contribute. We were booked in to visit the Umbraco HQ in Odense, Denmark in January 2020, and my nerves were allayed. This feels like a long time ago, and in these changed times, something I look back on fondly realising how lucky I was to be able to travel, to be immersed in Umbraco HQ with the Unicore team, and to experience the local food and culture.

How are the tasks organized between the team members? 

We have a call every sprint to discuss the sprint goal, progress, and burndown of the last Unicore sprint, and chat around areas we’d like to look into. For certain areas, such as Users and Membership, Rock Solid Knowledge are directly involved in consulting and/or contributing to the approach, so we have specific chats around this. We share on Github or Slack if we’re working on something so that we don’t overlap. It seems to be working out so far; even though we can’t currently meet in person, we’re still burning down points and progressing through tasks. Hopefully, once the chunkier items of work have been completed and we have the back-office running on .NET Core, there will be a raft of even more tasks for community members to help with.

How much time do you allocate to the team?

I currently average about 20 hours a month depending on the tasks being worked on. My feeling is that this will increase in Autumn and Winter due to my own tendency to fire up the computer more in reduced daylight hours. This time includes weekly internal chats about the project with Rock Solid Knowledge, and our Unicore team calls every sprint. Then there are the actual code contributions - choosing what to work on, pulling and building the latest Umbraco code from upstream into my own forked repository, creating a pull request (PR) on GitHub, commenting and acting on comments on said PR. We also discuss best practice and approaches.

As mentioned, I spent a chunk of time testing my colleague Scott’s code for the User migration. Hopefully, the Umbraco project migrating to .NET Core should enable things to be more testable, along with a suite of integration tests. The team have developed a new Builder pattern approach for unit tests, described by Unicore team member Andy Butland. The idea is that this template will help make contributing with unit tests easier in future for the community, as people can set up the objects needed for the test in a consistent way. More unit tests and code coverage should mean a higher quality Umbraco build, and more confidence for everyone making changes to core code.

What advice do you have to someone interested in joining a Community Team? 

Try it, you might like it! But without pressuring yourself too much. I have had to say no to things I really wanted to do at times, because I knew I was pushing myself too far and couldn’t fit it in mentally or physically.

Drawing up a list of how you’ll fit in the time to contribute would be a useful exercise first. Maybe run it past your company to see if they’d also be able to offer any support and time for you to do so. If you’re not part of a company, is there a mentor you could turn to? We have a helpful community chat on the CODECABIN Slack channels, for example. Sometimes, just knowing you’d be able to speak to someone about progress or issues is a big help. The Candid Contributions podcasts are also great for discussing all things open source - especially the third “Yes” episode. 

Ask questions. I asked Bjarke about how things might be structured in Unicore, and the expected time commitment. It can be hard to predict, but if you share how much time you could offer, you’ll know if it is the sort of thing they were expecting.

Have a think about who you could turn to and get confidence from. There might be someone you haven’t thought of. And remember: if it gets too much for whatever reason, you can always put it on pause and step back for a bit. Life changes fast at times, and people understand that. Be friendly to yourself, as well as others.