Our Engineering Principles
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
We have a clear definition of success for every piece of work
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 ship multiple times a day and deliver customer value week in, week out.
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.
We use design reviews to validate every significant change
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.
We deliver our products using our defined technology standards
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.
We peer review every change
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.
We cover all changes with automated tests, responsibly
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.
Our definitions of done include being live in production... responsibly
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.
You build it, you run it
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.
We own and are responsible for the data we produce
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.
We write with inclusivity, diversity, and accessibility in mind
Our company values inclusiveness in the workplace and we should reflect this stance in our engineering output.