Software Testing Lesson 1: Introduction

The Only Thing that Matters

The only thing that matters in development is that users love the software.

A high quality testing process is the cornerstone of good agile development.

This course is a step-by-step guide to building a product that users will love. These lessons are hard won over a long career, and borrow heavily from many other software development teams who have contributed to the emergence of lean startup culture that has transformed Silicon Valley, and transformed the way large enterprise organizations produce great products, too.

I have worked at organizations that failed to test products well. The common result is that products took weeks, months, or years to ship software and updates. I consulted for one firm that shipped a new release about once every two years, and even with all that time to prepare, integrating code from several teams into one product without breaking the build was a nightmare.

Every time we would try to get the build ready somebody would submit a bug fix or a new feature that conflicted with code that somebody else had changed. We had dedicated release engineers on the case to help resolve conflicts and get the build passing QA again. Broken processes made us miss target date after target date. I wanted to do something about it, but the root of the problem ran deep, from inward thinking product management to deeply ingrained developer habits. Every process change we managed to implement was a hard battle against the dysfunctional corporate culture.

A few years later, I worked at another company — a five year old startup at the time that had taken a whole industry by storm and become a global leader. We were growing the business at a very fast clip, hiring as fast as we could get qualified candidates in the door — but we had missed several release date targets already, and we struggled to implement new processes while we were trying to onboard new recruits.

By way of contrast, I have also worked with large enterprise organizations who have taken lessons from the lean startup movement and somehow managed to escape the old corporate culture and embrace working in small, agile teams with tools automating the process of testing and product integration.

We shipped code to production on a daily basis, and even at a big company with tens of thousands of employees, we were nimble enough to respond quickly to customer needs, ship bug fixes quickly, and integrate important new features dreamed up by the product teams.

Good agile teams are effective because they know how to fail fast on a strict budget, and learn lessons quickly. From the customer’s perspective they appear responsive to the customer’s needs. A high quality testing process is the cornerstone of good agile development.

If you work for a small startup, you’re in luck. It’s fairly easy while teams are forming to implement effective processes quickly.

If you’re at a larger organization, you might find inspiration from Bill Scott, who has managed to help PayPal change from a corporate culture that took six weeks to update some text on the site into a company that is now moving quickly, modernizing designs & innovating rapidly again.

The key to the transformation at PayPal is testing. At a risk-averse company like PayPal, you can’t change things unless you can prove that those changes won’t break critical systems like payment processing. They’re testing better and integrating new ideas into the products in a way that hasn’t been done since the early days of the company.

What PayPal has learned recently is the ability to adapt quickly. Technology is evolving faster than anything has ever evolved before in the history of civilization.

In nature, animals that can adapt to change survive extinction. In business, organizations that can adapt to change survive. Technology is disrupting every industry. Nobody can escape the implications of tech disruption.

As you’re reading this text:
* Uber is putting serious strain on the global taxi industry because they’re providing a better service.
* Amazon is delivering groceries directly to people’s homes.
* Quad-copter drones are delivering medicine to remote regions in South America and Africa.
* Mobile payments are transforming commerce in developing nations.
* Google and Tesla are making self-driving electric cars.
* Augmented reality via products such as Google Glass and Microsoft Hololens are set to turn the software industry on its head by immersing people in software experiences 24/7.

Every company today needs to be a tech company, and tech is evolving at an exponential rate.

The primal rule in this world is adapt or die, and you can’t adapt unless you learn how to test.

This Course is Not About Testing

Don’t worry. You’re going to learn how to build test suites. You’ll get plenty of practice, and plenty of exposure to automated testing in the cloud using the incredible platform brought to us by Sauce Labs.

But far more important; this course is about building the right application with the right priorities in mind for the right audience. If you don’t get the customer feedback and continuous delivery loop right, your product is dead.

Much more valuable than learning how to test is learning how to think about your users and your target market:

  • Are you targeting the right market?
  • Are you building the right product?
  • Are you focused on the right priorities?

You can’t answer those questions with any level of confidence if you approach your software from a developer’s perspective. Remember, the only thing that matters in software development is that your users love your software.

Exercise: Find Your Mission

Before you make your next career move, or decide what to build next, find your mission. Ask yourself these questions:

  • What motivates you?
    • Why do you do what you do?
  • What do you love?
    • What would you be doing if you didn’t need money?
  • What are you passionate about?
    • What causes capture your attention?
    • What do you spend the most time thinking about?
  • What are your personal pains?
    • What do you wish you could change about the world?

Once you have your mission, you can use it to decide:

  • What markets to target.
  • What problems to solve, which apps to build, & which jobs to take.
  • How to solve the problems effectively.

You’ll have a better understanding of how to build a great product, how to bring it to market, and how to use testing to validate that you’re making progress toward your mission every day.

While I was commuting to work every day in San Francisco, my mission became clear because it was impossible for me to ignore the serious problem of homelessness I was confronted with every day. My mission to end homelessness is like a compass that keeps me always pointed in the right direction.

As long as you’re pointed in the right direction and taking the next step, you’re making progress towards a goal that means something to you, and that will give you the motivation you need to succeed.

Commit to Your Mission

Ready to commit to your mission? Take a moment to share your answers on GitHub.

This Course is All About Testing

By the end of this course, you’re going to be testing everything:

  • The initial idea — does it resonate with a market you can reach?
  • Your assumptions about the market — do your ideas solve the problems faced by your actual users?
  • The UX — does the user interface you’re building resonate with your users? Are you making them more productive?
  • The software components — From an API user’s perspective — the domain of the programmer, do the components all work correctly in isolation from the rest of the program?
  • The app’s functionality — Does the app work correctly from the perspective of the user?

All of these tests are important for different reasons.

This course will teach you to test everything, because testing is the only way to prove that you’re building the right app to solve the right problem for the right market — even if that problem is just entertaining your users with a great game.

At every successful company I’ve seen up close, testing always delivered big rewards. This course will teach you how to treat testing as a first-class citizen in your development process — and that will make all the difference.