This is a article from my "Dev Chats" series where I speak to an awesome developer or techie every week or so. You can read more here. Let me know in the comments if you find these useful to you!
I’m Mike Jeffcott. I work at Zendesk in Melbourne, Australia as a Senior Software Engineer in Test. I work with the team behind the Web Widget, which is an iframe that our customers can put on their website so their customers can do Zendesk stuff without leaving their website.
My time is basically broken up between working on our automated browser tests, looking after testing infrastructure (such as staging environments, the Jenkins instance we use to run our tests, and things like Sauce Labs), pulling things apart in browser dev tools, and coaching dev teams on test strategy and automated testing practices.
Like a lot of folks in tech, I was interested in computers from a young age. I didn’t have a lot of programming-related opportunities prior to university, so I basically went into a Computer Science degree cold as far as programming is concerned. I ended up doing a 4-year BSc, with a double major in Computer Science and Psychology.
I actually came out of university not that hot on the idea of programming full-time, so went into testing as a way to make the most of the skills and knowledge I’d built up throughout my degree. Eventually, I moved more and more into automated testing as a way to make the whole process better. Nowadays, I’ve come full circle and I’d call myself a full-time programmer anyway.
I really enjoy the kinds of problems I have to solve for what I do. While working on Selenium scripts, I’m usually deep in the Chrome dev tools, trying to find the best CSS selectors to target elements with, and the most fast and efficient way to interact with the UI. Occasionally, I have to do some really funky stuff to test web apps, because it turns out that sometimes browsers do some really funky stuff themselves.
It’s also pretty fun watching the test run and trying to keep up with what’s happening in the browser.
QA/Test often gets a bit of a bad rap from developers – what do you think makes for a successful partnership between dev and test?
I think a big part of it is a lack of understanding around testing. I came out of a Computer Science degree without really ever being taught about testing. We were basically just taught a bunch of languages and concepts, but not enough about how things really are in the industry. Working with a dev team that understands the value testing of any sort brings to their products makes a huge difference.
At Zendesk, like many other software companies, we follow the model of embedding a tester in each dev team (sometimes more than one if it’s a big team). This is a pretty good way to foster those sorts of partnerships, and we’re getting to the point where some of the product engineers are starting to take on the responsibility of writing and maintaining their own automated tests
Go through a Selenium tutorial and automate something you’re familiar with, like doing a bunch of Google searches. Without being too reductive, it’ll give you a taste of what most of software testing is like. If you’re not testing web apps, it’ll be a similar sort of affair, just with different tools.
Just how little coverage testing gets in most Computer Science curriculums. I know I didn’t really get any exposure to test strategies and test design throughout my entire undergraduate degree, and from talking to and working with colleagues throughout my career so far, it seems that the best most people get is an introduction to unit testing.
Working with dev teams to come up with test strategies and put tools or frameworks in place for them to have various types of automated test coverage, in addition to helping them define their team’s approach to testing in general, is becoming an increasingly large and important part of what I do. Most of the time, I find that devs I’ve worked with aren’t reluctant to take on this work that usually gets left to QA in a lot of companies, it’s just that they’ve not been exposed to it or shown it in the right way.
Practice honesty and empathy as much as possible. That sounds a bit vague, but these “soft skills” can manifest in a number of important and subtle ways, that can help you and your teams build a better work environment and better products. Here’s a few examples:
If you don’t know or understand something, ask someone or look it up.
Own your mistakes, but don’t beat yourself up over them. We all make them, and will continue to do so until the end of time.
Try to think about the end-user’s experience of what you’re building in their context as much as possible.
Question everything, both to clarify information, and to challenge assumptions.
Try to write everything, from code to documentation, as if it’s for someone in a different team to understand.
A number of international software companies have set up engineering offices here, including Zendesk (obviously), Xero, Slack, and AWS, so the job opportunities are also growing. Melbourne’s also a pretty awesome place to live, so that definitely helps.
http://devdocs.io/ - Great tool for consolidating online documentation for many languages/frameworks/tools and allowing you to search across all of them.
How Google Tests Software - it came out in 2012, but a lot of it is still totally relevant today.
http://teamcapybara.github.io/capybara/ - For Selenium testing, Capybara is the nicest library I’ve ever worked with.
Like a lot of people in tech, I’ve got a number of half-started or forgotten projects. Rather than mention any of those, I’d say the best way to know what I’m up to is to follow me on Twitter at https://twitter.com/mwjeffcott. Fair warning: it’s mostly just me making dumb jokes and I use swears. For Melbourne-based folks, I’m also speaking at TConf this year: https://tconf.io/