As a company we have done well to embrace the principles of Agile and the Lean Start-Up; we have applied them to the way in which we validate learnings related to our products - we iterate, we improve, we measure and, where necessary, we change course. In the context of engineering as a craft, we don't always explicitly apply the same mindset. We should strive to learn, improve and ultimately deliver better quality products in shorter durations.
The principles below give us the framework to call out what we believe are the foundational elements that ground us, allow us to improve and allow us to iterate and grow. Autonomy without alignment and accountability is chaos; the principles strengthen the aspects related to alignment and accountability.
There is an emphasis on improving our ability and speed to deliver customer value in production responsibly - while we must focus on improving metrics and the availability of metrics, we must always do so with an awareness of how and where our work is delivering increased value. https://medium.com/@SkyscannerEng/why-engineering-principles-matter-993298f7d792
Every task, however granular, needs to be performed with a clear outcome in mind - company, goal, epic, story, task, feature etc. As we commit, we are specific and unambiguous and we should be able to articulate both why we are doing something and when we will be done. The definition includes "done" - see below.
We deliver tangible outcomes regularly and sustainably. We embrace lean principles and fast iterations. We bias towards getting value into the hands of our customers quickly. We have the ability to ship multiple times a day, ensuring we can move fast.
Collectively as a squad, tribe or organisation we have a pool of expertise that we should capitalise on. Design reviews are a platform to share, learn, feed back and ultimately deliver better products. They result in an improved technical design and operability using learning and best practice from others.
As our engineering team grows, we need to have the right level of consistency and standardisation. We express our opinions in what we choose to use, ensuring we can then build robust tooling to help support us at scale. This supports multiple facets; internal open source, developer onboarding, service ownership, freedom of movement, rotations and day-to-day operations to name a few. We focus on our customers’ problems over repeatedly making technological decisions, which in turn improves our time to production.
Peer review supports delivery of high-quality changes. It can prevent outages and malfunctions caused by bugs, improves aspects of the code such as reducing tech debt and promotes design consistency, learning and knowledge sharing. Peer review results in a wider level of knowledge within the team in question. Internal services that impact our ability to support our external customers are considered production.
Having extensive test coverage finds defects early and allows us to safely and effectively deliver changes in our code base at scale, something that would not be possible without automation. We also have a code base that, by virtue of the tests, is self documented. We need to balance the dangers of speed with automation coverage to deliver responsibly. As we ship code we should preserve or improve this coverage.
Customer impact is only realised when our target delivery environment is customer facing (usually production). We optimise our tools, processes and planning for this delivery model. We want to remain accountable for delivering an uninterrupted experience to our customers.
To achieve World Class Engineering at Scale, we have moved towards an operating model of you build it, you run it. This fosters a sense of ownership among teams who ultimately either run, or responsibly transfer ownership. It should also ensure there is a high degree of accountability for every service/product and that we do right by the traveller/customer.
In order to make correctly informed decisions, we need to treat our data with the same level of diligence as our services. As producers of data, we have a responsibility to ensure the quality of our data and that it is stored and protected appropriately.
Our company values inclusiveness in the workplace and we should reflect this stance in our engineering output.