There are many competing agile/lean software development methods. Happily they share the central core concept of incremental delivery.
- Split a large body of work into manageable chunks
- Work out which is the most important (greatest business value)
- Discover, design, build, test and deliver a working system with new features
- Gather feedback and repeat with the next chunk…
We release an initial “walking skeleton” (an end-to-end slice of functionality) as early as possible. Then (dependent on feedback) we release useful increments as often as possible.
Reduce the cost of change
In each cycle the system is changed and re-released. The fundamental assumption of agile development is that the cost of change can be kept down. Kent Beck wrote in his white book, explaining extreme programming:
We focus on reducing the cost of change through re-use and design.
Assemble don’t write
There is no getting around the fact that writing and testing new software is a labour intensive activity. Our strategy is to avoid it! There’s been an explosion of readily available (mainly open source) software for building applications. Having the skill and experience to chose and integrate these slashes the cost of development. Our expertise with SPA’s means we’ve done the hard work of choosing and integrating the best tools and components – ready for you to take advantage of.
A couple of years ago we spotted the promise of the fantastic React library. Since then it’s gained huge traction with a vibrant developer community and a large ecosystem of supporting libraries and tooling. It was designed so that UI’s could be built from nested components. We’ve built a layer of these components that allow increased re-use, and cuts development effort still further.
Our goal is to provide an experience that enables the end-user to accomplish their goals as simply, easily and pleasurably as possible. The challenge is to discover exactly what those goals are and then simplify how the are achieved. As Fred Brooks says in his paper “No silver bullet”:
“The hardest single part of building a software system is deciding precisely what to build.”
By minimising the costs of build and change we can concentrate our efforts on this most important (and difficult) facet. Discovery is a collaborative effort. To find out how we can work together with you check out our working together section.
Design for change, design for test
Although we aim to reduce the amount of code we need to write to an absolute minimum there will be features that are unique to your business. This is where our software design skills come in.
One of the unfortunate side-effects we’ve noticed in the otherwise beneficial uptake of agile development processes is a tendency to de-prioritise software design and architecture. Initially this was a response to the problems caused by predictive planning and Big Design Up Front (BDUF). We however do not believe design is dead. In fact designing for change is critical to reduce the cost of change.
The other key factor in reducing the cost of change is automated testing. A good test suite enables developers to refactor code and be confident it still works without a time consuming manual test cycle. The skill is to thoroughly test the system works as expected without having fragile tests. If code is changed without changing its behaviour and a test breaks – then it’s fragile. Our systems are designed for testability.
Continuous delivery, feedback and operations
Within minutes of the developers completing their work, the system should be available for use. We build automated deployment pipelines that create and test deployable “bundles” ready for production. Using Packer, Ansible and Terraform the pipeline takes a bundle and provisions the necessary “immutable servers” that are deployed into the production environment.
Remember that what we really want to do is help the user achieve their goals quickly, simply and easily. How do you measure success? All our web-apps are designed around an event driven architecture. We automatically collect all events and store them in an ElasticSearch database ready for analysis.
Applying analytics allows you to better understand your customers and their user journeys. You can answer questions like – how much are different features being used? how much time do users spend on a particular activity? Even better, because we collect ALL events you can retrospectively answer questions you hadn’t originally thought of.
Smooth operations is more than just provisioning and logging. Our apps report all error conditions that occur in the browser. Our unique replay feature enables us to recreate exactly what was happening in the browser just before an error occurred. This allows detection and fixing of problems in the minimum time.