Understanding the Importance of Technical Excellence in Enterprise Agility
Technical excellence comprises numerous agile engineering practices to help teams work in a continuous state of high quality and flexibility. Here, you will find brief descriptions of these practices.
Continuous integration is an approach to software development that involves making small changes that are integrated daily and tested frequently. Typically, each team member integrates his work at least once a day, which can result in several integrations over the course of a day. The emphasis is on developing a product in small batches and short cycles, which increases visibility into the process, thus increasing the quality of the system.
Continuous delivery involves keeping the product in a potentially shippable state at all times. The purpose of continuous delivery is to reduce the time, cost, and risk of delivering changes by allowing for more frequent updates to products in production.
Acceptance testing checks a product to ensure that it meets the sprint goal and that the product is indeed potentially shippable. Acceptance testing includes a user-acceptance test and may also include functional or system testing.
Architecture and design
Architecture and design in LeSS involves less planning and more observation to see where the customer is going and then designing and building products accordingly. It’s an approach to design that relies more on pull than push.
Clean code is a term used in programming to describe a minimalist approach to programming. The goal is to use the least amount of code required for a feature or function, and that code should be easier for other programmers to read and extend. Writing clean code is especially important in LeSS, where you have so many teams of developers collaborating on a single product.
Unit testing involves running small, fast software programs to verify the functionality of a piece of code. Don’t confuse a unit test with a bug test. A unit test determines whether a piece of code behaves as suspected in a variety of test cases. Unit testing is key in LeSS, which encourages frequent testing and adaptation.
Test-driven development (TDD) is a software development process that involves the repetition of a short development cycle. The developer writes a test case, designed to fail, that defines a desired function or improvement and then writes the least amount of code necessary for the program to pass the test and then refactors the code to acceptable standards. The main purpose of TDD is to reduce defect rates.
Thinking about testing
The notion of thinking about testing calls on team members to challenge their assumptions about testing, such as the following:
- Testing must be done at the end.
- Testing must be done by dedicated testers.
- Development must be complete before testing can start.
- Testing must be done according to plan.
By encouraging team members to challenge their assumptions, the thinking about testing approach encourages more innovative ways to test a product at any point in the development process.
Iterative, incremental program development results in a continuously evolving product that must be tested at each iteration. In addition to testing the new code, the product must be tested to ensure that the old code still works after the new code has been integrated (regression testing). In an agile development environment, manual testing can’t keep pace. Testing must be automated as much as possible.
Specification by example
Specification by example (SBE) is a collaborative approach to defining requirements and developing test case scenarios for software products. The product owner and teams collaborate with end users and other stakeholders to develop realistic scenarios for how the product will be used.