Transcript
Page 1: High Performance Software Engineering Teams

High Performance Engineering TeamsThe Technical PracticesLars ThorupZeaLake Software Consulting

October 18, 2011

Page 2: High Performance Software Engineering Teams

Who is Lars Thorup?● Managing software

development● 10 years of agile practices● 15 years of automated testing

● Introducing agile and automated testing with clients

● Assessing software projects and companies

● Founder of 2 agile consulting companies● 12+ senior consultants● 10+ years

Page 3: High Performance Software Engineering Teams

What is a High Performing Team?● Short time from getting idea

to going live● weeks instead of months or

more

● Faster development

● Higher quality

● Lots of experience from industry how to accomplish this

Page 4: High Performance Software Engineering Teams

How to become faster?● Stop doing non-productive things!

● Manual regression testing● Bug hunting and debugging● Implementing more than required● Out-of-date documentation● Piling up bug reports● Rediscovering of knowledge● Working on stuff not in the value stream

Page 5: High Performance Software Engineering Teams

How to increase quality?● Test more thoroughly

● Test more often

● Test cheaper

Page 6: High Performance Software Engineering Teams

Automate!● Software companies tell

their clients to automate to increase productivity and quality

● This advice also applies to the software development itself!

Page 7: High Performance Software Engineering Teams

Shorten the feedback cycle● Automate testing

● from weeks to minutes

● Close collaboration between Engineering and QA● from weeks to hours

Page 8: High Performance Software Engineering Teams

Don't track bugs - fix them!● Real bugs are always top priority

● Fix before working on anything on the backlog

● Decide if an issue is a real bug or an (unwanted) feature

● Prioritize (unwanted) features into the backlog

● Purge your backlog

Page 9: High Performance Software Engineering Teams

Automate the build● Compile code and installers

● Run tests● on every commit

● Deploy to internal servers and production● at the push of a button

● Have a visible dashboard to show status

● Notify about broken builds● Top-top priority● "Stop the line"● How can we prevent this type

of break in the future?

Page 10: High Performance Software Engineering Teams

Automate the testing● Unit tests

● Is the code doing things right?● Test one piece of code in isolation

● Acceptance tests● Is the code doing the right things?● Test the integration of all layers of

code

Page 11: High Performance Software Engineering Teams

Automated unit testing● Use a unit testing

framework for each programming platform you use● Java: JUnit● C++: UnitTest++, Google Test● JavaScript: Jasmine, QUnit● SQL: Probably JUnit

● Track coverage for new code● Aim for 75%● ... and more for important code● Include on the dashboard

Page 12: High Performance Software Engineering Teams

Automated acceptance testing● Test through the UI if you must

● ...as little as reasonably possible

● Test just below the UI if you can● Use your existing unit testing framework

● Consider an acceptance testing framework● like Cucumber

Page 13: High Performance Software Engineering Teams

Test Driven Development● Write tests before writing the code to make them pass

● Not a testing technique!● but a design technique

● Makes it easy to write tests● keeping coverage high

● Makes the design flexible

● Improves communication between Engineering and QA

● Speeds up development

Page 14: High Performance Software Engineering Teams

Continuous integration - Continuous delivery● Each commit to the version control system

● triggers an automated build ● triggers an automated deployment

● Expect developers to commit several times a day

Page 15: High Performance Software Engineering Teams

Collaboration between Engineering and QA● QA can test the code as soon as possible

● Before it is written● TDD collaboration● Write automated acceptance tests

● Just after it is written (same day)● Continuous Delivery makes it available● Exploratory testing● Scenarios the developer didn't think about● Make this step part of "done" for stories

● Don't keep a large backlog of untested stories● Engineering can help QA on testing if required

Page 16: High Performance Software Engineering Teams

But: what about legacy code?● Add pinning tests

● special kinds of unit tests for legacy code

● verifies existing behaviour● acts as a safety net

● Can be driven by change requests

● Refactor the code to be able to write unit tests

● Add unit test for the change request

● Track coverage trend for existing code● and make sure it grows

Page 17: High Performance Software Engineering Teams

But: "we can't change the company this much"● Yes you can!

● Others have done it before you

● It requires● Enthusiasm● Support● Willingness to invest● Transparency

Page 18: High Performance Software Engineering Teams

But: <your question here>

Page 19: High Performance Software Engineering Teams

References● "Continuous Delivery: Reliable Software Releases through

Build, Test, and Deployment Automation" by Jez Humble and David Farley

● Local software companies following these practices with success● Wealthfront, Palo Alto● IMVU, Mountain View● Salesforce, San Francisco● Pivotal Labs, San Francisco● ...


Recommended