OPOWER recently updated the job titles for our QA engineers to more properly reflect the work that we do. We still love owning the responsibility for pointing out when our product hasn’t turned out the best it can, and we have all held and loved “QA” titles at many points in our careers. So why the change? Just what exactly is a Software Engineer in Test at OPOWER?
It’s pretty clear to just about anyone what the goals of a software engineer are when taken in a development context. Build software that does useful work correctly and efficiently. It’s a little more fuzzy when you assess that title from a testing perspective.
- Is it a tool-smith? Building test frameworks and automation tools for other testers to use? Not exclusively, but tools and frameworks that more junior test engineers can use and learn from are great side effects of the work.
- Is it someone who uses GUI testing frameworks to follow along behind the developers and make sure they got the user experience right? Again, a part of the job sometimes, but not the primary mission.
- Now put on your tinfoil hat. Is it just a conceit meant to soothe the sting of being a second class creator of software artifacts? Someone who can code but not well enough to be a developer? Probably not anyone’s explicit intent, but some folks do feel that SEiT is a farm league for the Big Show: being a developer. We are not among those people.
A Software Engineer in Test is someone that builds software that does useful work correctly and efficiently. Wait. That’s exactly the same definition as was given for a developer. What gives?
The useful work a developer creates is to render a web page, or process messages, or update a database, all with an end goal of satisfying the end consumer of the application being worked on. When developing test systems, all those same elements are required, but the end goal is providing actionable insight about the quality of the customer facing system. This actionable insight is consumed by the developer and the engineering and product managers. They use this insight to answer questions. Those questions include: is it done, does it work, will it scale, and many others.
The SEiT needs to know how to build robust software, and on top of that, they need to be able to understand the business purpose of the customer facing system. The SEiT needs to judge what to test, how to test it and when to test it. They also need to have great judgment about what not to test.
A fantastic test framework with sub-par tests is of little use. In the same way, an excellent set of tests that cannot be run reliably does not provide the needed insight either. The SEiT needs to be able to go toe-to-toe with any of their developers and question choices on data structures, algorithms and design. They also have to have great judgement about when it best serves the business to take a shortcut in exchange for an acceptable risk.
A great example of dev and test collaborating to make both teams more productive coalesced around how we deal with the concept of “today”. When we exercise our software, the result you get depends on what day it is. Different months and days have differing levels of energy usage for both the customer and their neighbors. Without something built into the application, the only way to change “today” is to change the system time, which is not too practical in a shared environment. The ad-hoc and pre-collaboration solution was to add some kind of ‘asOf’ property to particular logic when we happened to think of it. We tightened up the collaboration level by having test explicitly involved in the estimation, planning and design meetings. Through these discussions earlier in the iteration, we discovered that it is far better to have any code that changes behavior based on the current date to always have the date as a parameter, and any user facing behavior should allow for a seekrit URL parameter (or other test system accessible method) to set the “asOf” date for any particular test. Dev is more productive because they now have a default way of designing the code to make it more testable. Their unit and integration tests are more effective and easier to write. Test is more productive because the app is more testable at the integrated and system level, and their tests are also more effective and easier to write.
It’s hard enough to get a software system right. It’s even harder to get a system right whose job is making sure another system is correct. OPOWER certainly doesn’t want to hire anyone but the best for that job. For us, the best tester is someone who’s a good developer, too.
2 Comments
This blog is worthy of a response. The key phrase is “…It’s hard enough to get a software system right. It’s even harder to get a system right whose job is making sure another system is correct.” That is particularly true when it comes to the nature of automation. I’m not talking about record/playback Kindergarten stuff for test automation scripts. I’m talking about the fact that there is no end to automation, even test automation, because you’re basically getting computers to do what humans do such as in testing software. For instance, a test automation framework can be so powerful and sophisticated that the abstract logic layers in its architecture can require code that is much harder to write than the code in the AUT (application under test)! But the rewards are immense such as a data-centric single-script architecture, navigation automation, self-constructing test data, even rudimentary NLP (natural language processing). Heh, who says deep thinking is becoming a lost art…
Then add in the concept of ‘self test’ of the Automation test suite to ensure that it functions correctly on the platform/OS. This is needed because the platform/OS change/upgrade/patch. Getting this to work well forced me to rewrite the test-suite’s code to be really clean.
TTFN
4 Trackbacks
[...] OPOWER Location: Arlington, VA http://opower.com/ About the JobJoin a team that is building software that makes a difference. You will help create and extend automated testing frameworks, and create tools that allow the whole team to move faster. You will held lead automation efforts, including automating existing manual tests, developing frameworks to allow greater breadth and depth of testing, all with a goal of ensuring a high quality consumer product.We need first class software engineers that are interested in building software to validate and verify our products. We need someone as passionate about helping our customers as they are passionate about technology and good engineering practices. We're an agile shop, but we're not fanatics following a religion: we take the pieces that work for us and improve our processes from there. Most importantly, we are still a work in progress, so when we bring you in, you have a lot of room to influence what we do and how we do it.About You:You have 4+ years of professional test software development experience.You have strong scripting skills, especially working with Ruby, Perl or the latest and greatest language of the day.You are comfortable with Java and can help with unit and integration testing enhancements as needed.You function well in a fast-paced, informal environment where constant change is the norm and the bar for quality is set high.You are extremely comfortable working with SQL and databases for test set-up and trouble-shooting purposes.You are sufficiently expert with Linux to be able to set-up and maintain your own QA environment.You know that insuring a good customer experience trumps testing to the spec, because sometimes even the specs have bugs.You love to figure out how software has been built and pride yourself on your ability to break it.You are self-managing and have the ability to adjust to competing priorities and allocate your time as necessary to get the job done.You have a BS in Computer Science or another analytical field.Interested in what a software engineer in test is? Check out http://www.heyitsopower.com/culture/just-what-is-a-software-engineer-in-test/ [...]
[...] another analytical field. Interested in what a software engineer in test is? Check out http://www.heyitsopower.com/culture/just-what-is-a-software-engineer-in-test/ [...]
[...] You have a BS in Computer Science or another analytical field. Interested in more details? Check out http://www.heyitsopower.com/culture/just-what-is-a-software-engineer-in-test/ [...]
[...] OPOWER Location: San Francisco, CA http://opower.com/ About the JobJoin a team that is building software that makes a difference. You will help create and extend automated testing frameworks, and design and build automated tests that allow the whole team to move faster. You will deeply understand what is important to our business, and make good decisions about what to test, how deeply to test it, and the risks incurred by what we're not testing. A large part of our testing happens automatically after every build of the software, leaving us time to focus on the important changes that don't lend themselves to automated tests. We need first class software engineers that are interested in building software to validate and verify our products. We need someone as passionate about helping our customers as they are passionate about technology and good engineering practices. We're an agile shop, but we're not fanatics following a religion: we take the pieces that work for us and improve our processes from there. Most importantly, we're still a work in progress, so when we bring you in, you have a lot of room to influence what we do and how we do it.About YouYou have 2+ years of professional test software development experience, as well as a strong web testing background.You have strong scripting skills, especially working with Ruby, Perl or the latest and greatest language of the day.You function well in a fast-paced, informal environment where constant change is the norm and the bar for quality is set high.You are extremely comfortable working with SQL and databases for test set-up and trouble-shooting purposes.You are comfortable enough with Linux to set-up and maintain your own QA environment.You know that insuring a good customer experience trumps testing to the spec, because sometimes even the specs have bugs.You love to figure out how software has been built and pride yourself on your ability to break it.You enjoy debugging applications to get to the source of the potential issue.You are self-managing and have the ability to adjust to competing priorities and allocate your time as necessary to get the job done.You have a BS in Computer Science or another analytical field. Interested in more details? Check out http://www.heyitsopower.com/culture/just-what-is-a-software-engineer-in-test/ [...]