SlideShare une entreprise Scribd logo
1  sur  89
Télécharger pour lire hors ligne
All change lists must be
reviewed. Period.
“Review your code like a Googler”
2013 Dariusz Łuksza
Dariusz Łuksza, CollabNet
dariusz@luksza.org
@dluksza
2013 Dariusz Łuksza
Are you Git?
pre-requirements
First rule of Code Review:
2013 Dariusz Łuksza
Your code is not your wife...
pre-requirements
First rule of Code Review
and OpenSource:
2013 Dariusz Łuksza
Your code is not your wife...
pre-requirements
2013 Dariusz Łuksza
Your code is not your wife...
you can share it!
pre-requirements
First rule of Code Review
and OpenSource:
2013 Dariusz Łuksza
I'm here for
You!
2013 Dariusz Łuksza
Next ~47min.
● Code Review & Types
● Post-commit vs pre-commit
● The Gerrit
● EGit + Mylyn Review Gerrit Connector
● Command line→
● Code Review Tips
● Gerrit++
● Q&A
Code reviews with Gerrit
by Mateusz Szczap
@ Marmolana 14:50
2013 Dariusz Łuksza
Code Review
post-commit review
(formal code review)
2013 Dariusz Łuksza
post-commit review
(formal code review)
2013 Dariusz Łuksza
2013 Dariusz Łuksza
Flickr: markcph
post-commit review
(formal code review)
2013 Dariusz Łuksza
Flickr: markcph
post-commit review
(formal code review)
Coffee, absolute
must have during
formal code
reviews
2013 Dariusz Łuksza
Flickr: sebastian_bergmann
post-commit review
(formal code review)
2013 Dariusz Łuksza
Flickr: bike
post-commit review
(formal code review)
2013 Dariusz Łuksza
review on request
(post- or pre-commit)
2013 Dariusz Łuksza
review on request
(post- or pre-commit)
90 min
later
OK, so where
I was before...
Hi Jeff, could you
review my changes
before I submit
I need a review...
OK, lets go!
Can I interrupt you
for a moment?You already
interrupted me...
Sure you can,
what is it?
this loop iterates
over… mhm... and then
it brakes...
if (req != null) {
for (i = 0; …
if (...) break;
...
I finished my task and need final
code review... would you like
to look on it?
emmmm … OK...
153 min
later
9 min
later
finally I can get
back to my task...
… and then...
2013 Dariusz Łuksza
asynchronous review
with Gerrit
(pre-commit)
2013 Dariusz Łuksza
Gerrit Code Review
this loop iterates
over… mhm... and then
it brakes...
if (req != null) {
for (i = 0; …
if (...) break;
...
found it!! HAHAHA
OK, so now,
commit and
push for review!
… step into...
step over...
… step over...
step over...
It's time to check others
review requests
I'm invincible!!
Great! There are requests
from Tom, Sara and Jim...
let me see...
post-commit
vs.
pre-commit
2013 Dariusz Łuksza
Flickr: bike
2013 Dariusz Łuksza
post-commit vs. pre-commit
Flickr: sriram
VS.
2013 Dariusz Łuksza
The Gerrit
The Gerrit
● Created for Android OpenSource project
● Designed to bring Google's code review feeling to
Android community
● Pure Java based
● Has vibrant community
● Used in many OpenSource project's and Enterprise
companies
● Can be used as regular Git server without code review
● Supports branch based permissions
● It is getting more and more extend-able
2013 Dariusz Łuksza
2013 Dariusz Łuksza
Who uses Gerrit?
2013 Dariusz Łuksza
let's play with
Gerrit
Demo Time!
Preconditions:
– You are joining new team with already existing
project
– Somebody already creates yours account in LDAP
– You already generated yours SSH key
– Already have Eclipse Kepler with EGit and Mylyn
Gerrit connector installed
2013 Dariusz Łuksza
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Meet Fred
First login into Gerrit
2013 Dariusz Łuksza
First login into Gerrit
2013 Dariusz Łuksza
fred
Insert yours
credentials here
First login into Gerrit
2013 Dariusz Łuksza
First login into Gerrit
2013 Dariusz Łuksza
fred
Yours SSH public
key goes here,
remember to
click 'Add'
First login into Gerrit
2013 Dariusz Łuksza
First login into Gerrit
2013 Dariusz Łuksza
fred
Finally, click
'Continue'
First login into Gerrit
2013 Dariusz Łuksza
First login into Gerrit
2013 Dariusz Łuksza
fred
You are logged in
Configure Mylyn Connector
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Add task
repository
Configure Mylyn Connector
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
If you don't have
Gerrit connector on
the list, use 'Install
More Connectors'
button
Select Gerrit and
click 'Next'
Configure Mylyn Connector
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Provide server
data
Validate before
save
Finally, click
'Finish' to save
new connection
Configure Mylyn Connector
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Of course I would like to create query for
this connector
Configure Mylyn Connector
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Name the query
For our simple use case
'All open changes' will
be enough
Configure Mylyn Connector
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
After successful configuration you will see
task repository and query in proper
Eclipse views
Cloning project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Because in git
repository there is no
Eclipse
configuration file (like
eg. .project) we need
to import it as
'general project'
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Now we can import nested Maven projects
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Clone project from Gerrit
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Create new feature branch
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Create new feature branch
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Create first change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Change something in
repository
Create first change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Remember to
check generation of
'Change-Id' tag
Leave this line as it is,
EGit will generate
'Change-Id' for you
Create first change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Now push yours
changes to Gerrit
Create first change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Provide name of
branch to which
change should
be merged after
successful
review
Create first change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Create first change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
After some time
you will see
yours change
on list of open
changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Meet Roman
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Double click on
file will open a
compare view
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
You can provide
comments directly
for each code line
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
As you see Jenkins
already have an
opinion about this
change
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
You can publish yours
comments using 'Publish
Comments...' button
Review change
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Now you can provide
yours vote and comment
for this change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Switch back to Fred
View incoming comments
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
You will be
informed about
new comments
on yours reviews
Abandon change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
If you push something by
accident you can always
abandon such change
Abandon change
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Pushing multiple changes
Push multiple commits
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Create two or more
commits in a row
and use standard EGit
'Push to Gerrit...' flow
Push multiple commits
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Gerrit will create separate
review requests for each
commit
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Switch to Roman
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Of course you will see
two open changes, let's
review last one!
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Jenkins already verified
this change, so let's
merge it!
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Last step is to push
'Submit' button
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Change was submitted,
but it is not merged
because it's parent change
is still under review. It will
be automatically merged
after parent will be
accepted
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Let's review
second
change
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Let's review
second
change
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Of course it was merged
successfully
Review connected changes
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Of course it was also merged
successfully
Wat is going
with previously
submitted
change?
2013 Dariusz Łuksza2013 Dariusz Łuksza
roman
Roman goes to Bahama
(continue other's work)
Continue other's work
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
All changes are stored
in Gerrit, you can
fetch each patch set
version when ever
you want to
Continue other's work
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Provide meaningful
branch name and
click 'Finish'
Continue other's work
2013 Dariusz Łuksza2013 Dariusz Łuksza
fred
Done, you have
Roman's changes
locally and can
continue his work
Code Review Tips
● Be constructive, don't hate, always propose or point to
solution
● Don't take comments personally, they are only about
code and how you can improve, code and your skills
● Code review is like refactoring of code that you have
written long time ago … you need to understand
author's intention
● It's like TDD, review code before it hit main repository.
This will guarantee the best application quality
● Do code review on daily basis … remember when you
are not reviewing other's code then application is not
progressing
2013 Dariusz Łuksza
2013 Dariusz Łuksza
Dariusz Łuksza, CollabNet
dariusz@luksza.org
@dluksza
“Review your code like a Googler”
Q&A
2013 Dariusz Łuksza
BTW. Don't forget about DevCrowd
conference in Szczecin in 2014. More
info you can found at:
http://devcrowd.pl

Contenu connexe

Plus de Dariusz Łuksza

Guiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landGuiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landDariusz Łuksza
 
Gerrit Code Review - The Introduction
Gerrit Code Review - The IntroductionGerrit Code Review - The Introduction
Gerrit Code Review - The IntroductionDariusz Łuksza
 
Gerrit JavaScript Plugins
Gerrit JavaScript PluginsGerrit JavaScript Plugins
Gerrit JavaScript PluginsDariusz Łuksza
 
Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)Dariusz Łuksza
 

Plus de Dariusz Łuksza (6)

Guiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise landGuiding Diffy to the Enterprise land
Guiding Diffy to the Enterprise land
 
Git in Eclipse
Git in EclipseGit in Eclipse
Git in Eclipse
 
Put more eyes on code
Put more eyes on codePut more eyes on code
Put more eyes on code
 
Gerrit Code Review - The Introduction
Gerrit Code Review - The IntroductionGerrit Code Review - The Introduction
Gerrit Code Review - The Introduction
 
Gerrit JavaScript Plugins
Gerrit JavaScript PluginsGerrit JavaScript Plugins
Gerrit JavaScript Plugins
 
Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)Eclipse of idleness and focus on current task (rev. 2)
Eclipse of idleness and focus on current task (rev. 2)
 

Dernier

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 

Review your code like a Googler