Practice: Quality Assurance

Budget permitting, we test our work rigorously and deliver nearly bug-free code to our clients.

Manual testing

  • Layout testing (browsers, pixel-perfect)
    • We normally focus on the latest desktop browsers (Firefox, Chrome, Safari) on Windows and OSX and Internet Explorer 11 + Edge on Windows.  We have virtual machines set up to test all the way down to IE7, if requested, but in most cases our legacy browser support includes only IE9 and 10 due to extremely small (and diminishing) numbers for older versions of IE.
    • For tablet & smartphone breakpoints, we suggest to use the latest two versions of iOS & Android, and test a few different screen resolutions of iPhones, iPads, Android smartphones and tablets.
  • Functional 
    • For projects that we test manually, we create test cases and check lists to make sure we get all stakeholders on the same page and don’t reinvent the wheel when we have to retest. This approach helps us to trace what was tested and keep track of testing results. We use Impasse plugin for Redmine and Google Spreadsheets as test case management tools for our projects.
    • For API testing, we use Postman browser plugin.  As an example, this allowed us to test synchronization between Indigo order processing platform and WooCommerce.


  • We used Cucumber paired with Watir to improve testing efficiency. As the amount of functionality grows, the time required for manual testing increases significantly. Test automation reduces regression testing costs.  While Cucumber allows us to automate tests, Jenkins runs the automated tests each time a developer commits a change. This approach simplifies testing and allows early bug discovery.
  • From QA perspective, Jenkins-based continuous integration delivers code coverage statistics and visualizes aggregate test failures.

Load testing