PageSourceSearch

https://docs-pactflow-preview.netlify.app/assets/js/f992b93c.1aefc212.js

js docs-pactflow-preview.netlify.app collected 2026-10-03 10:39:51 UTC 13,984 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkpartners=self.webpackChunkpartners||[]).push([[2028],{15680:(e,t,a)=>{a.d(t,{xA:()=>c,yg:()=>d});var n=a(96540);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),m=o,d=u["".concat(s,".").concat(m)]||u[m]||g[m]||i;return a?n.createElement(d,r(r({ref:t},c),{},{components:a})):n.createElement(d,r({ref:t},c))}));function d(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p<i;p++)r[p]=a[p];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},27442:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>g,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=a(58168),o=(a(96540),a(15680));const i={title:"Organisational Scale"},r=void 0,l={unversionedId:"docs/workshops/org_scale",id:"docs/workshops/org_scale",title:"Organisational Scale",description:"For a video of this guide, please see YouTube for Reducing the cost of testing in application modernization: a banking case study by Sngular.",source:"@site/docs/docs/workshops/org_scale.md",sourceDirName:"docs/workshops",slug:"/docs/workshops/org_scale",permalink:"/docs/workshops/org_scale",draft:!1,editUrl:"https://github.com/pactflow/docs.pactflow.io/edit/master/website/docs/docs/workshops/org_scale.md",tags:[],version:"current",lastUpdatedBy:"Matt Fellows",lastUpdatedAt:1709850911,formattedLastUpdatedAt:"Mar 7, 2024",frontMatter:{title:"Organisational Scale"},sidebar:"university",previous:{title:"Overview",permalink:"/docs/workshops/advanced"},next:{title:"Language Tutorials",permalink:"/docs/workshops/tutorials"}},s={},p=[{value:"3 key steps to ensure and scale enterprise wide adoption",id:"3-key-steps-to-ensure-and-scale-enterprise-wide-adoption",level:2},{value:"Group of practice (GoP)",id:"group-of-practice-gop",level:2},{value:"How to onboard teams?",id:"how-to-onboard-teams",level:2},{value:"Quantitative metrics",id:"quantitative-metrics",level:2},{value:"Qualitative Metrics",id:"qualitative-metrics",level:2},{value:"Example results from a customer after 7 sprints",id:"example-results-from-a-customer-after-7-sprints",level:2},{value:"Learnings: Contract testing champions as a key role",id:"learnings-contract-testing-champions-as-a-key-role",level:2},{value:"Learnings: A Group of practice is a must to expand adoption",id:"learnings-a-group-of-practice-is-a-must-to-expand-adoption",level:2},{value:"Learnings: Monitoring metrics are key to track success",id:"learnings-monitoring-metrics-are-key-to-track-success",level:2}],c={toc:p},u="wrapper";
1function g(e){let{components:t,...a}=e;return(0,o.yg)(u,(0,n.A)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.yg)("admonition",{title:"\ud83d\udca1",type:"tip"},(0,o.yg)("p",{parentName:"admonition"},"For a video of this guide, please see ",(0,o.yg)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=LyVSmRtwFkc"},"YouTube")," for Reducing the cost of testing in application modernization: a banking case study by ",(0,o.yg)("a",{parentName:"p",href:"https://www.sngular.com/"},"Sngular"),"."),(0,o.yg)("p",{parentName:"admonition"},"For a summary of the PactFlow features that support migrating and scaling Pact to PactFlow, see ",(0,o.yg)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=cvoqEP_CnqE"},"this video"),".")),(0,o.yg)("h2",{id:"3-key-steps-to-ensure-and-scale-enterprise-wide-adoption"},"3 key steps to ensure and scale enterprise wide adoption"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Stakeholder buy-in:",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Using Pact requires collaboration and commitment from each consumer and provider team. Getting buy-in from key stakeholders and aligning on clear goals, objectives and how we will measure success."))),(0,o.yg)("li",{parentName:"ul"},"Run a PoC:",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"In our experience, it\u2019s best to start small with an initial MVP and a reduced working group on which to establish the appropriate working context, validate concepts and hypotheses. With these learnings it will be easier to scale and expand across the organisation."))),(0,o.yg)("li",{parentName:"ul"},"GoP:",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Once a PoC has demonstrated value in moving forward, the challenge becomes scaling contract testing throughout the organisation. There is value in creating an internal group of practice to accelerate adoption, training, eduction and scaling.")))),(0,o.yg)("h2",{id:"group-of-practice-gop"},"Group of practice (GoP)"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Metrics: Establish metrics and KPI\u2019s to track the speed of adoption across the organisation"),(0,o.yg)("li",{parentName:"ul"},"Processes: Develop a standard methodology for team adoption with step-by-step instructions including",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Workflow of all contract testing related tasks within every sprint"),(0,o.yg)("li",{parentName:"ul"},"Recommended development model that follows the release cycle using a branching model"),(0,o.yg)("li",{parentName:"ul"},"Adaptation of the SDLC to include contract testing"),(0,o.yg)("li",{parentName:"ul"},"Definition of the onboarding and monitoring processes for all relevant teams."))),(0,o.yg)("li",{parentName:"ul"},"Communication: Facilitate real-time collaboration by enabling the rapid collection of data and ideas",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Organise regular \u201copen sessions\u201d to address/resolve any questions or issues"),(0,o.yg)("li",{parentName:"ul"},"Regular meetings to track progress with stakeholders (including Dev, QA, SRE, PO)"),(0,o.yg)("li",{parentName:"ul"},"Create an open commenting/annotation system to loop in others and improve coverage"))),(0,o.yg)("li",{parentName:"ul"},"Tracking: Reporting of KPI progress to all key stakeholders",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Support and follow up for all teams"),(0,o.yg)("li",{parentName:"ul"},"Feedback to revise and refine all processes and practice")))),(0,o.yg)("h2",{id:"how-to-onboard-teams"},"How to onboard teams?"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Buy in: Establish the current problems and how the new model will help solve those challenges"),(0,o.yg)("li",{parentName:"ul"},"Training: Step by step training and workshop, based on company domain"),(0,o.yg)("li",{parentName:"ul"},"Alignment: Define the main objects and agree on metrics to measure adoption"),(0,o.yg)("li",{parentName:"ul"},"Commitment: Reserve time to commit to adoption of new practice"),(0,o.yg)("li",{parentName:"ul"},"Adoption: Set a group of Contract testing champions to help build spikes",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Champions pair programming"),(0,o.yg)("li",{parentName:"ul"},"Continuous support via champions and GoP"))),(0,o.yg)("li",{parentName:"ul"},"Progress tracking: Follow up and KPI\u2019s monitoring"),(0,o.yg)("li",{parentName:"ul"},"Refinement: Open talks and retros with teams to gather feedback")),(0,o.yg)("h2",{id:"quantitative-metrics"},"Quantitative metrics"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("p",{parentName:"li"},"Engagement"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"No of pipelines with can-i-deploy tool enabled"),(0,o.yg)("li",{parentName:"ul"},"No of teams/projects with contracts in PactFlow"),(0,o.yg)("li",{parentName:"ul"},"No of endpoints covered by contracts (contract testing coverage)"))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("p",{parentName:"li"},"Impact"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"Time spent on manual testing (we want to see a reduction)"),(0,o.yg)("li",{parentName:"ul"},"Deployment frequency - how often do you release?"),(0,o.yg)("li",{parentName:"ul"},"Lead time for change - how long does it take to get a release from commit to production"),(0,o.yg)("li",{parentName:"ul"},"Change failure rates - how frequently does a change result in a failure as a percentage"),(0,o.yg)("li",{parentName:"ul"},"Mean time to recovery (MTTR) - how long does it take to recover from a failure")))),(0,o.yg)("h2",{id:"qualitative-metrics"},"Qualitative Metrics"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"How is the team feeling with the new tools?"),(0,o.yg)("li",{parentName:"ul"},"What are the plans and gains?"),(0,o.yg)("li",{parentName:"ul"},"How active is the tool?"),(0,o.yg)("li",{parentName:"ul"},"How active and supportive is the community?")),(0,o.yg)("h2",{id:"example-results-from-a-customer-after-7-sprints"},"Example results from a customer after 7 sprints"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Governance",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"2 teams training in CT techniques, 4 CT champions"),(0,o.yg)("li",{parentName:"ul"},"8 KPI\u2019s defined"),(0,o.yg)("li",{parentName:"ul"},"GoP setup to engage teams and continue CT using Pact gaining adoption"),(0,o.yg)("li",{parentName:"ul"},"Implementation of RBAC in PactFlow"))),(0,o.yg)("li",{parentName:"ul"},"Technical Aspects",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"6 endpoints covered with CT"),(0,o.yg)("li",{parentName:"ul"}
1,"2 Jenkins pipelines integrated with PactFlow"),(0,o.yg)("li",{parentName:"ul"},"2 bugs detected which were present in production environments"))),(0,o.yg)("li",{parentName:"ul"},"Times",(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},"8 hours to develop first CT test"),(0,o.yg)("li",{parentName:"ul"},"3 weeks to integrate first pipeline"),(0,o.yg)("li",{parentName:"ul"},"4 weeks from the project start date to discover first bug")))),(0,o.yg)("h2",{id:"learnings-contract-testing-champions-as-a-key-role"},"Learnings: Contract testing champions as a key role"),(0,o.yg)("blockquote",null,(0,o.yg)("p",{parentName:"blockquote"},"Main role to accelerate the process")),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Evangelises the rest of the teams"),(0,o.yg)("li",{parentName:"ul"},"Supports the practice also over the organisation"),(0,o.yg)("li",{parentName:"ul"},"Ownership of the practice"),(0,o.yg)("li",{parentName:"ul"},"Autonomy and trust of the organisation to make decisions")),(0,o.yg)("h2",{id:"learnings-a-group-of-practice-is-a-must-to-expand-adoption"},"Learnings: A Group of practice is a must to expand adoption"),(0,o.yg)("blockquote",null,(0,o.yg)("p",{parentName:"blockquote"},"Group of practice should always be established to guide, support & continuously track the degree of adoption of the new practice within an organisation.")),(0,o.yg)("p",null,"Key responsibilities include:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Evangelise about the use and benefits of contract testing"),(0,o.yg)("li",{parentName:"ul"},"Train teams in the technique"),(0,o.yg)("li",{parentName:"ul"},"Establish metrics for monitoring and checking the degree of success"),(0,o.yg)("li",{parentName:"ul"},"Collect feedback from the teams"),(0,o.yg)("li",{parentName:"ul"},"Resolve dependencies and impediments"),(0,o.yg)("li",{parentName:"ul"},"Provider teams with adequate resources to implement contract testing - efficie
1ntly"),(0,o.yg)("li",{parentName:"ul"},"Prepare status reports"),(0,o.yg)("li",{parentName:"ul"},"Organise meetings, seminars, workshops, lectures on contract testing within the organisation")),(0,o.yg)("h2",{id:"learnings-monitoring-metrics-are-key-to-track-success"},"Learnings: Monitoring metrics are key to track success"),(0,o.yg)("blockquote",null,(0,o.yg)("p",{parentName:"blockquote"},"For any process of implementation of new practices in an organisation, it is important to establish monitoring metrics that allow us to know the degree of evolution of the same.")),(0,o.yg)("p",null,"This data will give us information on:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},"Degree of implementation in teams"),(0,o.yg)("li",{parentName:"ul"},"Effectiveness of contract testing within the organisation"),(0,o.yg)("li",{parentName:"ul"},"Alignment with business objectives"),(0,o.yg)("li",{parentName:"ul"},"Fulfilment of expectations"),(0,o.yg)("li",{parentName:"ul"},"Detection of deviations or inefficiencies")))}g.isMDXComponent=!0}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.