SlideShare a Scribd company logo
Need to make a horizontal change across 100+
microservices? No worries, Shepherd's got you
covered
Austin + NYC NodeJS Meetup
June 17th, 2020
whoami
speaker: Aori Nevo, PhD
handle: @aorinevo
- Work experience:
- SDM @ AWS (currently)
- Sr. Eng Mng @ Pager (~1.5
years)
- Eng Mng @ Bloomingdale’s (~3
years)
- OSS contributor/maintainer
(~10+ years)
- Shepherd, Yargs, Hapi,
Handlebars, New Relic,
Foundation, …
- Army (4 years)
- Education:
- BA, MA, MS, PhD in Mathematics
(12 years)
- Hobbies:
- Coding :P
Abstract
In this talk, you’ll be introduced to an innovative,
powerful, flexible, and easy-to-use tool developed by the
folks at NerdWallet that simplifies some of the complexities
associated with making horizontal changes in service
oriented systems via automation.
Problem Statement
In a highly distributed system comprised of multiple repos,
make a change to a non-empty subset programmatically.
Why?
(by examples)
Also, why?
Adding a New File - Current Workflow
1. Suppose you have n repos and want to make a change to a
non-empty subset s (i.e. change the engines property in
package.json, etc...)
2. For each repo in s
a. fork and clone the repo to your local
b. add the file
c. stage the changes
d. commit the changes
e. push the commit to your remote
f. open a PR to upstream
g. solicit reviews and approvals
h. land commits on upstream
i. release changes to lower-level environments, test, and promote
through to production
Making a Code Change - Current Workflow
1. Suppose you have n repos and want to make a change to a
non-empty subset s (i.e. at renovate.json, eslintrc,
etc…)
2. For each repo in s
a. fork and clone the repo to your local
b. find and update the relevant code
c. stage the changes
d. commit the changes
e. push the commit to your remote
f. open a PR to upstream
g. solicit reviews and approvals
h. land commits on upstream
i. release changes to lower-level environments, test, and promote
through to production
Obvservations
Note that in both examples, steps 2a - 2f are the
same given we choose the appropriate abstraction
layer.
The time needed to make these changes is directly
proportional to the size of s.
Also, provided there is a programmatic way of
identifying which repos should be in set s as well as
a programmatic way to apply the changes to the repos,
then we can effectively abstract out these steps into
a script. You can think of Shepherd as that
abstraction.
Shepherd
Shepherd is an open-source CLI tool developed at NerdWallet
that coordinates the application of code changes across
multiple repos, from checking them out, to making the
changes, to submitting pull requests.
Think of Shepherd in this way:
Shepherd is to code as what migrations are to databases.
Install Steps
just kidding
Install Steps
Pretty short:
- npm install -g @nerdwallet/shepherd
- That’s it!
Verify the install via cli by running the following command:
- shepherd --help
Notes: If installing off of clone, run npm run build
post-install
Demo(s)!
Demo 1 - Add manifest.yml file
# shepherd.yml
id: 2020.05.20-add-manifest-file
title: |
feat: add manifest file
adapter:
type: github
search_query: repo:aorinevo/shepherd-test-repo-1 repo:aorinevo/shepherd-test-repo-2 path:/
hooks:
should_migrate:
- test ! -f manifest.yml
apply: $SHEPHERD_MIGRATION_DIR/main.sh
pr_message: |
echo "Add manifest file"
Demo 1 cont’d
- Shepherd commands
- shepherd checkout .
- shepherd apply .
- shepherd commit .
- shepherd push .
- shepherd pr-preview .
- shepherd pr .
Note: All commands can be verified by inspecting Shepherd’s
working directory (defaults to ~/.shepherd).
Demo 2: Exercise 1: Add engines property to package.json
Q: What are the shell commands to apply this change?
Q: What would the shepherd.yml file look like?
Q: Can you do this only using shepherd.yml and no other
files?
ROI
No, it’s not wool!
ROI
- Reduce time to delivery
- Increase productivity
- Increase velocity
- Increase efficiency
- Self documenting
- Repeatable
- Identify opportunities to simplify (i.e. horizontal
changes like these are somewhat of an indicator we should
consider different approaches)
How to get involved
How to get involved
- Slack
- https://bit.ly/node-shepherd
- GitHub
- https://github.com/NerdWalletOSS/shepherd
- Contribute
- Good first issue
- https://github.com/NerdWalletOSS/shepherd/labels/good%20first%20i
ssue
- Example
- https://github.com/NerdWalletOSS/shepherd/issues/190
Future Work
Future Work
1. Upgrade to latest Octokit
○ https://github.com/NerdWalletOSS/shepherd/issues/109
2. Branding
○ https://github.com/NerdWalletOSS/shepherd/issues/145
3. Improved configuration system
○ https://github.com/NerdWalletOSS/shepherd/issues/91
4. Use GitHub's GraphQL api
○ https://github.com/NerdWalletOSS/shepherd/issues/15
5. Common migration script utilities
○ https://github.com/NerdWalletOSS/shepherd/issues/62
6. Workflow improvements
○ https://github.com/NerdWalletOSS/shepherd/issues/89
References
- https://www.nerdwallet.com/blog/engineering/shepherd-auto
mating-code-changes/
- https://www.npmjs.com/package/@nerdwallet/shepherd
- https://github.com/NerdWalletOSS/shepherd
Thank you!
Q&A

More Related Content

What's hot

Docker Voting App Orientation
Docker Voting App OrientationDocker Voting App Orientation
Docker Voting App OrientationTony Pujals
 
LAB2 Importing Data into HDFS Using Sqoop.docx
LAB2 Importing Data into HDFS Using Sqoop.docxLAB2 Importing Data into HDFS Using Sqoop.docx
LAB2 Importing Data into HDFS Using Sqoop.docxKarim Fathallah
 
You Did What? The (condensed) story of why using the wrong tool for the job i...
You Did What? The (condensed) story of why using the wrong tool for the job i...You Did What? The (condensed) story of why using the wrong tool for the job i...
You Did What? The (condensed) story of why using the wrong tool for the job i...Oliver Leaver-Smith
 
Automating AWS Infrastructure Provisioning Using Concourse and Terraform
Automating AWS Infrastructure Provisioning Using Concourse and TerraformAutomating AWS Infrastructure Provisioning Using Concourse and Terraform
Automating AWS Infrastructure Provisioning Using Concourse and TerraformCesar Rodriguez
 
Jenkins vs GitLab CI
Jenkins vs GitLab CIJenkins vs GitLab CI
Jenkins vs GitLab CICEE-SEC(R)
 
Machine learning with raspberrypi
Machine learning with raspberrypiMachine learning with raspberrypi
Machine learning with raspberrypielmokhtar Benfraj
 
Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"
Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"
Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"NodeUkraine
 
A Quick Start - Version Control with Git
A Quick Start - Version Control with GitA Quick Start - Version Control with Git
A Quick Start - Version Control with GitDmitry Sheiko
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners HubSpot
 
C# Async on iOS and Android - Miguel de Icaza, CTO of Xamarin
C# Async on iOS and Android - Miguel de Icaza, CTO of XamarinC# Async on iOS and Android - Miguel de Icaza, CTO of Xamarin
C# Async on iOS and Android - Miguel de Icaza, CTO of XamarinXamarin
 
Bucharest GTUG - Roo and GWT - 01 June 2010
Bucharest GTUG - Roo and GWT - 01 June 2010Bucharest GTUG - Roo and GWT - 01 June 2010
Bucharest GTUG - Roo and GWT - 01 June 2010Petrica Clement Chiriac
 
Akka testing
Akka testingAkka testing
Akka testingAvi Levi
 
Continuous Deployment at Spreaker
Continuous Deployment at SpreakerContinuous Deployment at Spreaker
Continuous Deployment at SpreakerMarco Pracucci
 
Breaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CIBreaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CIIvan Nemytchenko
 
2020.02.15 DelEx - CI/CD in AWS Cloud
2020.02.15 DelEx - CI/CD in AWS Cloud2020.02.15 DelEx - CI/CD in AWS Cloud
2020.02.15 DelEx - CI/CD in AWS CloudPeter Salnikov
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offsetDaeMyung Kang
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_finalDaeMyung Kang
 
Alchemy Catalyst Automation
Alchemy Catalyst AutomationAlchemy Catalyst Automation
Alchemy Catalyst AutomationShamusd
 

What's hot (20)

Docker Voting App Orientation
Docker Voting App OrientationDocker Voting App Orientation
Docker Voting App Orientation
 
LAB2 Importing Data into HDFS Using Sqoop.docx
LAB2 Importing Data into HDFS Using Sqoop.docxLAB2 Importing Data into HDFS Using Sqoop.docx
LAB2 Importing Data into HDFS Using Sqoop.docx
 
You Did What? The (condensed) story of why using the wrong tool for the job i...
You Did What? The (condensed) story of why using the wrong tool for the job i...You Did What? The (condensed) story of why using the wrong tool for the job i...
You Did What? The (condensed) story of why using the wrong tool for the job i...
 
Git 101
Git 101Git 101
Git 101
 
Automating AWS Infrastructure Provisioning Using Concourse and Terraform
Automating AWS Infrastructure Provisioning Using Concourse and TerraformAutomating AWS Infrastructure Provisioning Using Concourse and Terraform
Automating AWS Infrastructure Provisioning Using Concourse and Terraform
 
Jenkins vs GitLab CI
Jenkins vs GitLab CIJenkins vs GitLab CI
Jenkins vs GitLab CI
 
Machine learning with raspberrypi
Machine learning with raspberrypiMachine learning with raspberrypi
Machine learning with raspberrypi
 
Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"
Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"
Nikolai Boiko "NodeJS Refactoring: How to kill a Dragon and stay alive"
 
A Quick Start - Version Control with Git
A Quick Start - Version Control with GitA Quick Start - Version Control with Git
A Quick Start - Version Control with Git
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners
 
C# Async on iOS and Android - Miguel de Icaza, CTO of Xamarin
C# Async on iOS and Android - Miguel de Icaza, CTO of XamarinC# Async on iOS and Android - Miguel de Icaza, CTO of Xamarin
C# Async on iOS and Android - Miguel de Icaza, CTO of Xamarin
 
Bucharest GTUG - Roo and GWT - 01 June 2010
Bucharest GTUG - Roo and GWT - 01 June 2010Bucharest GTUG - Roo and GWT - 01 June 2010
Bucharest GTUG - Roo and GWT - 01 June 2010
 
Akka testing
Akka testingAkka testing
Akka testing
 
Continuous Deployment at Spreaker
Continuous Deployment at SpreakerContinuous Deployment at Spreaker
Continuous Deployment at Spreaker
 
Breaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CIBreaking Bad Habits with GitLab CI
Breaking Bad Habits with GitLab CI
 
2020.02.15 DelEx - CI/CD in AWS Cloud
2020.02.15 DelEx - CI/CD in AWS Cloud2020.02.15 DelEx - CI/CD in AWS Cloud
2020.02.15 DelEx - CI/CD in AWS Cloud
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
 
Alchemy Catalyst Automation
Alchemy Catalyst AutomationAlchemy Catalyst Automation
Alchemy Catalyst Automation
 
Calico docker+ipam
Calico docker+ipamCalico docker+ipam
Calico docker+ipam
 

Similar to Need to make a horizontal change across 100+ microservices? No worries, Shepherd's got you covered

Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Fabrice Bernhard
 
Migraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesMigraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesdrupalindia
 
A DevOps guide to Kubernetes
A DevOps guide to KubernetesA DevOps guide to Kubernetes
A DevOps guide to KubernetesPaul Czarkowski
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using SwiftDiego Freniche Brito
 
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkitThe DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkitMarco Ferrigno
 
The DevOps Paradigm
The DevOps ParadigmThe DevOps Paradigm
The DevOps ParadigmNaLUG
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy Systemadrian_nye
 
Capistrano, Puppet, and Chef
Capistrano, Puppet, and ChefCapistrano, Puppet, and Chef
Capistrano, Puppet, and ChefDavid Benjamin
 
When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?Niklas Heidloff
 
Openshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhceOpenshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhceDarnette A
 
N api - node interactive 2017
N api - node interactive 2017N api - node interactive 2017
N api - node interactive 2017Michael Dawson
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopleffen
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoveragemlilley
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
 
Introduction to node.js By Ahmed Assaf
Introduction to node.js  By Ahmed AssafIntroduction to node.js  By Ahmed Assaf
Introduction to node.js By Ahmed AssafAhmed Assaf
 
Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Microsoft
 

Similar to Need to make a horizontal change across 100+ microservices? No worries, Shepherd's got you covered (20)

Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
 
Migraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sitesMigraine Drupal - syncing your staging and live sites
Migraine Drupal - syncing your staging and live sites
 
A DevOps guide to Kubernetes
A DevOps guide to KubernetesA DevOps guide to Kubernetes
A DevOps guide to Kubernetes
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkitThe DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
 
The DevOps Paradigm
The DevOps ParadigmThe DevOps Paradigm
The DevOps Paradigm
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy System
 
Capistrano, Puppet, and Chef
Capistrano, Puppet, and ChefCapistrano, Puppet, and Chef
Capistrano, Puppet, and Chef
 
BPMS1
BPMS1BPMS1
BPMS1
 
BPMS1
BPMS1BPMS1
BPMS1
 
When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?When to use Serverless? When to use Kubernetes?
When to use Serverless? When to use Kubernetes?
 
Open Dayligth usando SDN-NFV
Open Dayligth usando SDN-NFVOpen Dayligth usando SDN-NFV
Open Dayligth usando SDN-NFV
 
Openshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhceOpenshift cheat rhce_r3v1 rhce
Openshift cheat rhce_r3v1 rhce
 
N api - node interactive 2017
N api - node interactive 2017N api - node interactive 2017
N api - node interactive 2017
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоны
 
Introduction to node.js By Ahmed Assaf
Introduction to node.js  By Ahmed AssafIntroduction to node.js  By Ahmed Assaf
Introduction to node.js By Ahmed Assaf
 
Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015
 
React native
React nativeReact native
React native
 

Recently uploaded

Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Product School
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIES VE
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Product School
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...Product School
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomCzechDreamin
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka DoktorováCzechDreamin
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlPeter Udo Diehl
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Thierry Lestable
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...CzechDreamin
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2DianaGray10
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsExpeed Software
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekCzechDreamin
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Product School
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupCatarinaPereira64715
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...Product School
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...Product School
 

Recently uploaded (20)

Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 

Need to make a horizontal change across 100+ microservices? No worries, Shepherd's got you covered

  • 1. Need to make a horizontal change across 100+ microservices? No worries, Shepherd's got you covered Austin + NYC NodeJS Meetup June 17th, 2020
  • 2. whoami speaker: Aori Nevo, PhD handle: @aorinevo - Work experience: - SDM @ AWS (currently) - Sr. Eng Mng @ Pager (~1.5 years) - Eng Mng @ Bloomingdale’s (~3 years) - OSS contributor/maintainer (~10+ years) - Shepherd, Yargs, Hapi, Handlebars, New Relic, Foundation, … - Army (4 years) - Education: - BA, MA, MS, PhD in Mathematics (12 years) - Hobbies: - Coding :P
  • 3. Abstract In this talk, you’ll be introduced to an innovative, powerful, flexible, and easy-to-use tool developed by the folks at NerdWallet that simplifies some of the complexities associated with making horizontal changes in service oriented systems via automation.
  • 4. Problem Statement In a highly distributed system comprised of multiple repos, make a change to a non-empty subset programmatically.
  • 6. Adding a New File - Current Workflow 1. Suppose you have n repos and want to make a change to a non-empty subset s (i.e. change the engines property in package.json, etc...) 2. For each repo in s a. fork and clone the repo to your local b. add the file c. stage the changes d. commit the changes e. push the commit to your remote f. open a PR to upstream g. solicit reviews and approvals h. land commits on upstream i. release changes to lower-level environments, test, and promote through to production
  • 7. Making a Code Change - Current Workflow 1. Suppose you have n repos and want to make a change to a non-empty subset s (i.e. at renovate.json, eslintrc, etc…) 2. For each repo in s a. fork and clone the repo to your local b. find and update the relevant code c. stage the changes d. commit the changes e. push the commit to your remote f. open a PR to upstream g. solicit reviews and approvals h. land commits on upstream i. release changes to lower-level environments, test, and promote through to production
  • 8. Obvservations Note that in both examples, steps 2a - 2f are the same given we choose the appropriate abstraction layer. The time needed to make these changes is directly proportional to the size of s. Also, provided there is a programmatic way of identifying which repos should be in set s as well as a programmatic way to apply the changes to the repos, then we can effectively abstract out these steps into a script. You can think of Shepherd as that abstraction.
  • 9. Shepherd Shepherd is an open-source CLI tool developed at NerdWallet that coordinates the application of code changes across multiple repos, from checking them out, to making the changes, to submitting pull requests. Think of Shepherd in this way: Shepherd is to code as what migrations are to databases.
  • 11. Install Steps Pretty short: - npm install -g @nerdwallet/shepherd - That’s it! Verify the install via cli by running the following command: - shepherd --help Notes: If installing off of clone, run npm run build post-install
  • 13. Demo 1 - Add manifest.yml file # shepherd.yml id: 2020.05.20-add-manifest-file title: | feat: add manifest file adapter: type: github search_query: repo:aorinevo/shepherd-test-repo-1 repo:aorinevo/shepherd-test-repo-2 path:/ hooks: should_migrate: - test ! -f manifest.yml apply: $SHEPHERD_MIGRATION_DIR/main.sh pr_message: | echo "Add manifest file"
  • 14. Demo 1 cont’d - Shepherd commands - shepherd checkout . - shepherd apply . - shepherd commit . - shepherd push . - shepherd pr-preview . - shepherd pr . Note: All commands can be verified by inspecting Shepherd’s working directory (defaults to ~/.shepherd).
  • 15. Demo 2: Exercise 1: Add engines property to package.json Q: What are the shell commands to apply this change? Q: What would the shepherd.yml file look like? Q: Can you do this only using shepherd.yml and no other files?
  • 17. ROI - Reduce time to delivery - Increase productivity - Increase velocity - Increase efficiency - Self documenting - Repeatable - Identify opportunities to simplify (i.e. horizontal changes like these are somewhat of an indicator we should consider different approaches)
  • 18. How to get involved
  • 19. How to get involved - Slack - https://bit.ly/node-shepherd - GitHub - https://github.com/NerdWalletOSS/shepherd - Contribute - Good first issue - https://github.com/NerdWalletOSS/shepherd/labels/good%20first%20i ssue - Example - https://github.com/NerdWalletOSS/shepherd/issues/190
  • 21. Future Work 1. Upgrade to latest Octokit ○ https://github.com/NerdWalletOSS/shepherd/issues/109 2. Branding ○ https://github.com/NerdWalletOSS/shepherd/issues/145 3. Improved configuration system ○ https://github.com/NerdWalletOSS/shepherd/issues/91 4. Use GitHub's GraphQL api ○ https://github.com/NerdWalletOSS/shepherd/issues/15 5. Common migration script utilities ○ https://github.com/NerdWalletOSS/shepherd/issues/62 6. Workflow improvements ○ https://github.com/NerdWalletOSS/shepherd/issues/89
  • 24. Q&A