A few weeks ago, I got an unexpected (but very flattering!) request from a friend and colleague's son, Felix. He wanted to interview me about my work (at 11, he thinks he might want to become a software developer, too, when he's older) as material he could present at an up-coming PechaKucha session at his school... Wow, we didn't do PechaKucha when I was a kid :)
I agreed to respond, and, due to logistical challenges, that response took the form of an email answer his questions. After sending it to him, it occurred to me that it might be of interest to some folks in the OERu community and beyond, so I asked if he'd be ok with me publishing the results under a CC-By license. He was agreed, and so here it is (note, I've made a few minor edits and additions to my original response).
- 1. What do you do in an average day at work?
My days are generally very diverse, but I can give you an idea of a typical "business as usual" day... (as opposed to, say, when I'm overseas at one of our very enjoyable international OERu partner meetings).
Of late, my usual routine Usually, I make myself a coffee and go up to the garage loft in my house. I sit down at my computer and log in, immediately checking my email and various chat channels to see if there're any urgent problems to look into (my work is global, so there's always someone using the systems I manage).
If there something urgent, like a system not running the way it's meant to, I get right onto making it right - our systems are meant to serve hundreds (and eventually tens of thousands or more!) learners daily, so they need to be reliable and responsive.
On Mondays, I "go around the traps", applying updates to servers that I'm responsible for in Germany, the US, NZ, Australia, and Singapore - they support a bunch of websites and services that are part of our "Digital Learning Environment". I also maintain some web systems for the NZ Open Source Society (which I sometimes include in "the traps" - my job title with the OER Foundation who employ me, is "Open Source Technologist").
In amongst the updates, I sometimes do some research on new technologies I need to deploy as part of my "continual improvement" process (I can do this without needing to concentrate intensely, so I can do it in short bursts well suited to the start and stop nature of the server update process) - finding ways to make it easier for me, as one half of a 2-person team trying to build a global service, to manage all the many systems I'm responsible for. Today, for instance, I'm looking at setting up an open source service monitoring system which will alert me if any of the systems I'm interested in have problems, go do, or even if they're slow... I'm also interested in monitoring whether any of them are running short of hard disk space, as recovering from a full hard disk is often very painful and messy, and can result in both long downtimes and lost user data (something we work very hard to avoid).
Most days I also do quite a bit of software development. My role includes the responsibility for building strategic software capabilities. Today that will include working on a plugin for the WordPress blog platform (like Drupal, but somewhat simpler, but also open source) that we use to provide our course materials to learners. When a learner logs in, and asks to take part in a particular course, the plugin I've written, automatically registers their details with a separate system we use, Mautic, which is a "marketing automation" platform.
Many people use Mautic to "spam" people or send out newsletters to people who subscribe to them via a website, for instance. We use it differently: we use it to automate the process of sending out hundreds of carefully timed emails to people taking each of our courses, so that they know when to start working on things, what they need to do, when their projects and assignments are due, and how to go about getting assessed after they finish a course (they need to be assessed to get formal academic credit for our courses).
Using Mautic means that we can set up the rules and email templates for each course once, and then they're available any time we run a course with a cohort (a group of learners are going through the course together, who could be anywhere in the world - our last course had 310 learners from 58 countries!), or even for people who decide to take our courses via "independent study" in which case they can set their own schedule.
The other thing I do quite a lot is to work out better ways to host the various services we offer - because the open source technologies we build our services on are constantly improving, there's a steady stream of new approaches to doing things. I have to use my judgment and experience to decide which improvements are worth making (because they all take my time, which is limited to 8 hrs a day), and which probably aren't worthwhile. I recently changed the way we host our main WordPress "multisite", https://course.oeru.org, so that it's built as a collection of Docker containers, and I was able to improve the number of simultaneous learners we could support by 10 times without increasing our costs...
Then, just about every afternoon, I have a video chat with my colleague, Wayne Mackintosh, who's based in Mosgiel (a town south of Dunedin), and is the only other employee of the OER Foundation (he's also the founder of it, and the main brains behind the operation). He's a keen supporter of open stuff - particularly open source software and open educational resources (the learning materials we make available to our learners as courses), which are the educational analogue to open source software. Wayne's main focus is on academic things - like coordinating educators at our many partner institutions globally to help contribute towards our open educational resources, to get their academic boards to push through accreditation processes for our courses (so that their institutions formally recognise our courses as being of a suitable quality for them to accept as if they were their own). He's got the really hard job, because it's more to do with people than technology. And, despite claiming he's not at every turn, he's remarkably switched on with the technology, too.
We report on the things we've done that day, catch up on other news and developments, talk through problems we're working on, and make plans and prioritise things for the coming days and weeks.
From time to time, I also write up "how tos" and explanations of how we use open source technologies at the OERu (the OERu - https://oeru.org is the "network" made up of the OER Foundation and our higher education partners) - you can see it at https://tech.oeru.org - the introduction provides an overview of the mix of technologies we use if you're curious.
- 2. What is your favourite thing about being a software developer?
I love that I have a steady stream of interesting problems to solve, and that, when I solve them, I'm potentially making life better for hundreds or thousands of people who, in this case, might not have had the opportunity to reach their educational potential before.
Plus, I really appreciate the fact that my current role allows me to learn new things constantly, and to actively engage with the communities of people who write the software that we use to make our learning materials available. For example, I frequently end up making minor improvements to software, like Mautic, or WordPress, which I then make available to other people (at places like this: https://github.com/kiwilightweight or https://github.com/oeru) as a way of contributing back.
The fact that I can use my skills and experience do what I love, to benefit the world - people I've never even met - is very satisfying and fulfilling, and I consider myself very lucky.
- 3. What is the hardest part about being a software developer?
There're plenty of stressful things in managing systems that people use - for example, if there's a bug that means parts of the system (or all of it) don't work, I have to really scramble to make things right. I also have to to my very best to protect people's data! Very rarely (thankfully) something goes wrong, and people lose data (sometimes things they've invested a lot of time or energy in) and that's really tough.
There're also "good-hard" things about developing software - making complex things easier for others to understand... understanding them myself... solving problems by doing a lot of detective work on the Internet - lots of times it requires hours of focused concentration, and really thinking hard... but if you never drop the ball, eventually you solve the problem, and that feels great.
- 4. What sort of training and education do you need to do before becoming a software developer?
Well, ultimately, as a software developer, you're a people interpreter: you're someone who learns what others want to do, how they want to do it, and then you work out how to "codify" that in software. This takes a LOT of time to do it properly. If you don't, you're likely to end up writing software that solves a problem... but one that's often quite different from what people want solved. So learning about how people do things is very useful... not sure what formal education you can get here - good software developers are keen observers of human behaviour.
Once you know roughly where you're going, software development boils down to a lot of problem solving and "micro-decision-making". You have to be the sort of person who, once you commit to solving a problem, you don't stop. Not sure you can learn that - it's just part of some people's nature...
As far as formal education goes, I generally recommend this: get all the education you possibly can - in maths, science, and computing, but also in other fields. I think one of the best things I ever did was to do a "liberal arts" degree at university - I was privileged that my family and I were able to afford to do it (it was very expensive). I got to study many other fields besides, especially English. Being able to express myself in writing (be it code or English :) ) confidently is perhaps the best thing I learned. I'd also recommend learning other (human) languages!
- 5. What do you find least enjoyable about being a software developer?
There's always a bit of drudgery in every job. There're routine things that are a bit boring (the great thing about being a software developer is that you have the power to automate the boring stuff if it becomes a real drag - here's a recent example... ) - and there's also the frustration of having to work with (and keep happy) people who really don't understand technology at all, and see it as a threat.
I think people who have a deep understanding of both how people work, and how software works have the best prospects in the world today, and I think that'll continue to be the case into the future.