Giter Club home page Giter Club logo

productionisation's Introduction

The Made Tech Productionisation Checklist

The SRE team at Made Tech have created a checklist that they use to evaluate the new projects for their readiness to be productionised.

We evaluate the projects in the following areas:

  • Testability
  • Availability of different environments
  • Database durability
  • Continuous Delivery Pipeline
  • Logging
  • Infrastructure monitoring
  • Dependency upgrade and Vulnerability alerts

In addition to these requirements, we also expect projects to use source control management, provide a mechanism to seed the local database environment and adhere to our standards (RFCS) for areas such as Makefiles and code editor defaults.

The full checklist can be seen here: PRODUCTIONISATION.md.

Why does this list exists?

We believe that following this list will encourage teams to consistently follow best practices and improve their projects, which would lead to making a greater impact by delivering faster and learning more.

How to apply this to your project

  1. Copy the checklist for your project - new tab in the spreadsheet.
  2. Continuously update the checklist, at least once a month.
  3. Provide feedback, addition and removal of points to the Chalet.

Granularity

Each project that has a unique set of staff/team members, instances and stack, should have its own checklist.

Definition of Done

Once you’re comfortable that you have satisfied the criteria, tick the box. If you’re on the fence, don’t.

How to measure success

We measure success by considering the following points:

Improving the reliability of applications for users

Outcomes

  • All teams tracking positive progress on checklist
  • Low level of bugs being reported
  • Customers perceive our applications to be reliable
  • User perceive our applications to be reliable

When will we review

  • Monthly p15n check-in during Learn Tech before quarterly update

What do we want to see

  • See >5% improvement per month per application
  • Positive feedback regarding low level of bugs when interviewing delivery managers
  • Positive review from customer from delivery managers

Customers are aware of productionisation best practices and can see the quality we bake into applications

Outcomes

  • Delivery managers are reporting on p15n checklist in their fortnightly reports
  • Product owner actively promoting the reliability of our applications and the quality we bake in
  • Customers can easily understand items in the p15n checklist

When will we review

  • Monthly p15n check-in during Learn Tech before quarterly update

What do we want to see

  • Every fortnightly report includes p15n checklist
  • Delivery manager able to point to the prioritisation of improving p15n checklist
  • Positive interview with customer regarding their understanding of p15n

License

Attribution-ShareAlike 4.0 International: The licensor permits others to copy, distribute, display, and perform the work. In return, licensees must give the original author credit. See `LICENSE.txt'.

Copyright

Made Tech 2019 ©

productionisation's People

Contributors

booyaa avatar c-gyorfi avatar davidwinter avatar elena-vi avatar lukemorton avatar nyweb avatar yusufsheiqh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

productionisation's Issues

Requirements for team processes

Many of our points can be fulfilled by completing one-shot tasks.
An example of this is Sentry.

You can set up a Sentry service, and have it notifying to places, however it doesn't mean that Sentry will get used.
We should look into setting standards for usage, ie "Sentry errors are triaged within 24 hours, resolved within 1 week".

This is not limited to Sentry

Most recent stable language/framework version

This would be an ongoing score based on the current stable release of languages and frameworks, so that we can aim to keep on top of this to reduce technical debt of large upgrades later down the line.

Continuous Delivery pipeline defined in code

Often, CD pipelines are things that take a while to setup, and having these defined in code serves as good visibility on what happens when onboarding into a project, but also as a backup, rather than the pipeline configuration being full stored just in a service or system.

Favour a Jenkinsfile if using Jenkins.
If using Heroku, even though they have the pipeline feature, favour a CircleCI pipeline to deploy to Heroku as this provides far better visibility.

Ping/uptime monitoring of critical production endpoints

Something along the lines of what Pingdom offers.

Would also like something that can monitor cron/background related jobs too where we have an expected schedule, and if that fails to register that is has run for X number of times, throw an alert.

Update Makefile RFC to include seed task target definitions

Preferred targets would be:

make development-seed-batch
make development-seed-full

Is this even feasible? For example WATG and Diners club, very tricky to just pull down 5 accounts/products from those sites to use for local development.

introduce examples for different linters to use

feel free to edit this description directly. I'll add them into the description if a comment is added.

Please use this template for flagging them:

**<language>[/<framework>]**
- style: <linter>
- complexity: <linter>
- security: <linter>
- checker: <linter>

In the event of multiple, use sublists:

- checker:
  - <linter>
  - <linter>

ruby:

  • style: Rubocop (style, complexity)

python

  • style: black

shell

  • complexity: shellcheck
  • security: shellcheck
  • checker: shellcheck

Should we assess .NET project using the IDEs built in tool?

To give a tangible example, I'm currently using JetBrains Rider to evaluate a project. JetBrains Rider has built-in Linter (called Code Inspectors), Code Coverage (via plugin) and Profiling (Debugger).

My initial feeling is to say that that we should find tools to do separately for the sake of continuous delivery pipelines.

We've discussed this internally on our slack and there have been no definitive answers.

cc @StevenLeighton21 @robinlacey (please ping others who may be interested in this discussion)

Checklist Levels

Currently what we have is a flat checklist. This is great for giving a general overall score, however it can mean it's hard to see iterative improvements.

There are also certain targets that are difficult to hit if you've not been trying to reach them from the start.

I propose introducing Levels, where we can define a baseline of "you must hit these ASAP", while being able to define extended requirements that are less critical to implement.

This will no doubt resolve into a similar situation to Core skills, where people get stickers.

Codebase Properties

  • One click deploys
  • Low probability of error in deployments
  • Reproducible deployments
  • Reproducible development environments
  • Understand usage of software at a glance
  • Ability to defer technology decisions
  • Code is the documentation
  • Code Reveals Intent not Details
  • Shared understanding of the domain written as expressive code
  • Evolutionary Architectures
  • Ability to *scout without fear
  • Almost impossible to break existing behaviour (semantically stable test suites)
  • Fast-executing ability to check that existing behaviour is still working correctly
  • Non-brittle testing of the behaviour of code that received data from external services
  • Non-brittle testing of the behaviour of code that sends data to remote services
  • Reduced churn of files/functions/modules/classes
  • No Tech-Debt Epics
  • Single tech ecosystem includes multiple independently deployable components
  • Sustainable Pace

Introduce policies surrounding access controls + authentication

a recent discussion has taken place about how best to address enterprise customer concerns on policies relating to holding of customer data.

While this issue isn't going to target a full solution to this problem, there are some key points that I feel most projects should adhere to.
I fully expect this to turn into a sliding scale, where basic requirements are:

  • per user access to services
  • every developer has most rights for ease of use
  • bastion service for accessing service ports on infrastructure

to super hardened, where requirements are:

  • per user access to services, with enforced MFA (maybe all of "what you know", "what you have", "what you are")
  • follow principle of least privilege
  • auditable access to sensitive material

Introduce requirement for processes around reporting tech features, bugs, and debts

It's not always clear how to report tech related issues. Often times mental notes are taken, akin to "this code needs refactoring", or they're written in code review but without further action taken.
Going down these unstructured routes leads to these issues being forgotten.

I don't think we should define a process here, but give some suggestions for what can be done.
The easiest might be adding #TODO notes as and when these issues are found, and periodically takes some time to go scouting.
Another suggestion might be, for more dire situations, exposing a trello board with all the tech related issues, so it can be seemlessly mixed in with sprints.

Regardless of the approach, the aim is to make sure tech debt is always exposed

Introduce requirement + examples for Domain renewal notifications + process

We've just renewed some of our domains, however the process is currently rather adhoc.

Introduce a requirement to have a process defined (either manual or automated) for domain renewal.

Also introduce a requirement to have notifications for when a domain is about to expire expire (time periods TBD).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.