SlideShare a Scribd company logo
1 of 40
Download to read offline
Continuous Recruitment
How Engineers can hire Engineers in hyper-growth
environments
Who is speaking
Paul Hofmann ─ Director of Engineering
• Started 2008 at Rocket Internet
• Spent four years at Groupon
• Joined AUTO1 in early 2015
• Bootstrapped java ecosystem
• Today responsible for engineering hiring,
personal growth and development, java platform
architecture, three feature and two platform
teams
The Situation
Continuous Recruitment

The Situation
! Massive Recruitment Funnel
Continuous Recruitment

The Situation
! Massive Recruitment Funnel
! Very, very individual and open solutions to our puzzle
Continuous Recruitment

The Situation
! Massive Recruitment Funnel
! Very, very individual and open solutions to our puzzle
! Individual reviews to those solutions
Continuous Recruitment

The Situation
! Massive Recruitment Funnel
! Very, very individual and open solutions to our puzzle
! Individual reviews to those solutions
Across the board: Consistency and Scale are a requirement
Continuous Recruitment

The Idea
Continuous Recruitment

The Idea
! Of course during one of our Hackathons
Continuous Recruitment

The Idea
! Of course during one of our Hackathons
! Automate Review
Continuous Recruitment

The Idea
! Of course during one of our Hackathons
! Automate Review
! Automate Feedback
Continuous Recruitment

The Idea
! Of course during one of our Hackathons
! Automate Review
! Automate Feedback
! Apply CD/CI Practices to our work
Continuous Recruitment

The Implementation
Continuous Recruitment

The Implementation
! Quantify Code
Continuous Recruitment

The Implementation
! Quantify Code
! Parameterize Feedback
Continuous Recruitment

The Implementation
! Quantify Code
! Parameterize Feedback
! Let Jenkins do the work
Continuous Recruitment

Quantify Code
Baseline: PMD and custom rules
! Cyclomatic Complexity
! Escaping the static context
! Abstraction of input and output
! Dead Code vs. Test Coverage
Continuous Recruitment > The Implementation
Cyclomatic Complexity (McGabe)
Each method starts with a score of 1.

Then we score++ for each
! return that isn't the last statement of a method
! if, else, case, default
! for, while, do-while, break, and continue
! &&, ||, ?
! catch, finally, throw, or throws clause.
<2😍 <5😎 <10😑 ≥10😡
Continuous Recruitment > The Implementation > Quantify Code
Escaping the static context
static methods and members are not OOP
Entry point into your app is almost always
public static void main(String [] args) {}
Continuous Recruitment > The Implementation > Quantify Code
Escaping the static context
static methods and members are not OOP
We simply count the number of occurrences of the static keywords in the code.

==1😍 <5😎 <10😑 ≥10😡
Continuous Recruitment > The Implementation > Quantify Code
Abstraction of input and output
Having output in one place is a great indicator
So we simply count the amounts of System.out and System.in statements or
equivalents.



==1😍 <1😑



Continuous Recruitment > The Implementation > Quantify Code
Dead Code vs. Test Coverage
Note: The puzzle doesn’t require tests!
If a candidate decides to provide tests, we measure line coverage.
Line coverage drops when there is dead code.
We like to feedback this, because removal of dead code is just base hygiene. 



Continuous Recruitment > The Implementation > Quantify Code
Parameterize Feedback
! Identify relevant information from raw data
! Create a sophisticated template
Continuous Recruitment > The Implementation

Identify relevant information from raw data
Incomplete list of examples:
! Have all stories been implemented?
Continuous Recruitment > The Implementation > Parametrize Feedback
Identify relevant information from raw data
Incomplete list of examples:
! Have all stories been implemented?
! Are there instructions on how to run the code?
Continuous Recruitment > The Implementation > Parametrize Feedback
Identify relevant information from raw data
Incomplete list of examples:
! Have all stories been implemented?
! Are there instructions on how to run the code?
! Size parameters, i.e.: Line count, line coverage
Continuous Recruitment > The Implementation > Parametrize Feedback
Identify relevant information from raw data
Incomplete list of examples:
! Have all stories been implemented?
! Are there instructions on how to run the code?
! Size parameters, i.e.: Line count, line coverage
! Cyclomatic Complexity, static context, I/O abstraction
Continuous Recruitment > The Implementation > Parametrize Feedback
Identify relevant information from raw data
Incomplete list of examples:
! Have all stories been implemented?
! Are there instructions on how to run the code?
! Size parameters, i.e.: Line count, line coverage
! Cyclomatic Complexity, static context, I/O abstraction
! Was playing the game fun?
Continuous Recruitment > The Implementation > Parametrize Feedback
Identify relevant information from raw data
Incomplete list of examples:
! Have all stories been implemented?
! Are there instructions on how to run the code?
! Size parameters, i.e.: Line count, line coverage
! Cyclomatic Complexity, static context, I/O abstraction
! Was playing the game fun?
! Have there been plagiarised files?
Continuous Recruitment > The Implementation > Parametrize Feedback
Identify relevant information from raw data
Incomplete list of examples:
! Have all stories been implemented?
! Are there instructions on how to run the code?
! Size parameters, i.e.: Line count, line coverage
! Cyclomatic Complexity, static context, I/O abstraction
! Was playing the game fun?
! Have there been plagiarised files?
And many more...
Continuous Recruitment > The Implementation > Parametrize Feedback
Create a sophisticated template
! Jinja2 python templates
Continuous Recruitment > The Implementation > Parametrize Feedback
project for use of 3rd
libraries and frameworks and were {% i
data.THIRD_PARTY_LIBRARIES_USED == false %}
very happy to find that you haven’t used any,
for anything other than tests, so thank you
for sticking to the rules.{% else %}not so
happy to find that you have used some
libraries, although it’s a violation of our
requirements, it’s not a showstopper for us.
{% endif %} {{ data.GAME_JOY_CUSTOM_TEXT }}
{% if data.GAME_JOY_FACTOR == "low" %}We
found the game play to be satisfactory.{%
elif data.GAME_JOY_FACTOR == "medium" %}We
enjoyed playing the game for quite some time.
Thank you for that.{% elif
data.GAME_JOY_FACTOR == "high" %}Every minute
of the game we have played brought us more
joy, we truly appreciate the extra mile you
went here. Good job!{% endif %}{% if
data.STORIES_IMPLEMENTED == "all" %} We're
happy to confirm that all of your stories
were successfully implemented.{% elif
data.STORIES_IMPLEMENTED == "most" %} We can
state that some of the stories you were
tasked with were implemented.{% else %} We're
sad to state the none of the stories were
implemented.{% endif %}



We then started looking at the code. With
approximately {{ data.CODE_LOC }} lines of
code, we classify your solution as {% if
data.CODE_LOC_VERBAL == "lean" %}lean{% elif
data.CODE_LOC_VERBAL == "average" %}average{%
else %}bigger than average{% endif %} in
terms of size. {% if data.CODE_COVERAGE > 1
and data.CODE_COVERAGE <= 30 %
Create a sophisticated template
project for use of 3rd
libraries and frameworks and were {% i
data.THIRD_PARTY_LIBRARIES_USED == false %}
very happy to find that you haven’t used any,
for anything other than tests, so thank you
for sticking to the rules.{% else %}not so
happy to find that you have used some
libraries, although it’s a violation of our
requirements, it’s not a showstopper for us.
{% endif %} {{ data.GAME_JOY_CUSTOM_TEXT }}
{% if data.GAME_JOY_FACTOR == "low" %}We
found the game play to be satisfactory.{%
elif data.GAME_JOY_FACTOR == "medium" %}We
enjoyed playing the game for quite some time.
Thank you for that.{% elif
data.GAME_JOY_FACTOR == "high" %}Every minute
of the game we have played brought us more
joy, we truly appreciate the extra mile you
went here. Good job!{% endif %}{% if
data.STORIES_IMPLEMENTED == "all" %} We're
happy to confirm that all of your stories
were successfully implemented.{% elif
data.STORIES_IMPLEMENTED == "most" %} We can
state that some of the stories you were
tasked with were implemented.{% else %} We're
sad to state the none of the stories were
implemented.{% endif %}



We then started looking at the code. With
approximately {{ data.CODE_LOC }} lines of
code, we classify your solution as {% if
data.CODE_LOC_VERBAL == "lean" %}lean{% elif
data.CODE_LOC_VERBAL == "average" %}average{%
else %}bigger than average{% endif %} in
terms of size. {% if data.CODE_COVERAGE > 1
and data.CODE_COVERAGE <= 30 %
! Jinja2 python templates
! Results are pushed to GitHub as comments
Continuous Recruitment > The Implementation > Parametrize Feedback
The Implementation
! Quantify Code
! Parameterize Feedback
! Let Jenkins do the work
Continuous Recruitment

Results
Continuous Recruitment

Results
! Time reduction
Continuous Recruitment

Results
! Time reduction
! Elimination of the Review-Review
Continuous Recruitment

Results
! Time reduction
! Elimination of the Review-Review
! Leaner Process
Continuous Recruitment

Outlook
! Get better with metrics
! Automate other parts of the funnel
! Integrate other job profiles, i.e. data-science, go, php etc
Demo Time
Continuous Recruitment

Q&A
Meet me at our booth here @codemotion
email: paul.hofmann@auto1.com
LinkedIn: http://linkedin.com/in/paul-hofmann-auto1

More Info: http://auto1-group.com/team/tech
Continuous Recruitment


More Related Content

Similar to Paul Hofmann - Recruiting with Jenkins - How engineers can recruit engineers in hyper-growth environments - Codemotion Milan 2018

The Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's PerspectiveThe Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's Perspective
kfrdbs
 
ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...
ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...
ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...
Ioannis Stais
 
Practical unit testing 2014
Practical unit testing 2014Practical unit testing 2014
Practical unit testing 2014
Andrew Fray
 
Mp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook gameMp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook game
Montreal Python
 

Similar to Paul Hofmann - Recruiting with Jenkins - How engineers can recruit engineers in hyper-growth environments - Codemotion Milan 2018 (20)

Code Quality Practice and Tools
Code Quality Practice and ToolsCode Quality Practice and Tools
Code Quality Practice and Tools
 
Week2 ch4 part1edited 2020
Week2 ch4 part1edited 2020Week2 ch4 part1edited 2020
Week2 ch4 part1edited 2020
 
Week2 ch4 part1edited 2020
Week2 ch4 part1edited 2020Week2 ch4 part1edited 2020
Week2 ch4 part1edited 2020
 
Begin with c++ Fekra Course #1
Begin with c++ Fekra Course #1Begin with c++ Fekra Course #1
Begin with c++ Fekra Course #1
 
Snake game implementation in c
Snake game implementation in cSnake game implementation in c
Snake game implementation in c
 
Perfect Code
Perfect CodePerfect Code
Perfect Code
 
DSA 103 Object Oriented Programming :: Week 3
DSA 103 Object Oriented Programming :: Week 3DSA 103 Object Oriented Programming :: Week 3
DSA 103 Object Oriented Programming :: Week 3
 
Ch5(loops)
Ch5(loops)Ch5(loops)
Ch5(loops)
 
Devry cis-170-c-i lab-5-of-7-arrays-and-strings
Devry cis-170-c-i lab-5-of-7-arrays-and-stringsDevry cis-170-c-i lab-5-of-7-arrays-and-strings
Devry cis-170-c-i lab-5-of-7-arrays-and-strings
 
Devry cis-170-c-i lab-5-of-7-arrays-and-strings
Devry cis-170-c-i lab-5-of-7-arrays-and-stringsDevry cis-170-c-i lab-5-of-7-arrays-and-strings
Devry cis-170-c-i lab-5-of-7-arrays-and-strings
 
The Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's PerspectiveThe Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's Perspective
 
How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio  How Optimizely Scaled its REST API with asyncio
How Optimizely Scaled its REST API with asyncio
 
Drilling Cyber Security Data With Apache Drill
Drilling Cyber Security Data With Apache DrillDrilling Cyber Security Data With Apache Drill
Drilling Cyber Security Data With Apache Drill
 
ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...
ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...
ANOTHER BRICK OFF THE WALL: DECONSTRUCTING WEB APPLICATION FIREWALLS USING AU...
 
The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...
The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...
The Enterprise Architecture you always wanted: A Billion Transactions Per Mon...
 
2013 - Andrei Zmievski: Machine learning para datos
2013 - Andrei Zmievski: Machine learning para datos2013 - Andrei Zmievski: Machine learning para datos
2013 - Andrei Zmievski: Machine learning para datos
 
Devry cis 170 c i lab 5 of 7 arrays and strings
Devry cis 170 c i lab 5 of 7 arrays and stringsDevry cis 170 c i lab 5 of 7 arrays and strings
Devry cis 170 c i lab 5 of 7 arrays and strings
 
Devry cis 170 c i lab 5 of 7 arrays and strings
Devry cis 170 c i lab 5 of 7 arrays and stringsDevry cis 170 c i lab 5 of 7 arrays and strings
Devry cis 170 c i lab 5 of 7 arrays and strings
 
Practical unit testing 2014
Practical unit testing 2014Practical unit testing 2014
Practical unit testing 2014
 
Mp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook gameMp24: The Bachelor, a facebook game
Mp24: The Bachelor, a facebook game
 

More from Codemotion

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Recently uploaded

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 

Recently uploaded (20)

ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxBT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
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...
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform Engineering
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 

Paul Hofmann - Recruiting with Jenkins - How engineers can recruit engineers in hyper-growth environments - Codemotion Milan 2018

  • 1. Continuous Recruitment How Engineers can hire Engineers in hyper-growth environments
  • 2. Who is speaking Paul Hofmann ─ Director of Engineering • Started 2008 at Rocket Internet • Spent four years at Groupon • Joined AUTO1 in early 2015 • Bootstrapped java ecosystem • Today responsible for engineering hiring, personal growth and development, java platform architecture, three feature and two platform teams
  • 4. The Situation ! Massive Recruitment Funnel Continuous Recruitment

  • 5. The Situation ! Massive Recruitment Funnel ! Very, very individual and open solutions to our puzzle Continuous Recruitment

  • 6. The Situation ! Massive Recruitment Funnel ! Very, very individual and open solutions to our puzzle ! Individual reviews to those solutions Continuous Recruitment

  • 7. The Situation ! Massive Recruitment Funnel ! Very, very individual and open solutions to our puzzle ! Individual reviews to those solutions Across the board: Consistency and Scale are a requirement Continuous Recruitment

  • 9. The Idea ! Of course during one of our Hackathons Continuous Recruitment

  • 10. The Idea ! Of course during one of our Hackathons ! Automate Review Continuous Recruitment

  • 11. The Idea ! Of course during one of our Hackathons ! Automate Review ! Automate Feedback Continuous Recruitment

  • 12. The Idea ! Of course during one of our Hackathons ! Automate Review ! Automate Feedback ! Apply CD/CI Practices to our work Continuous Recruitment

  • 14. The Implementation ! Quantify Code Continuous Recruitment

  • 15. The Implementation ! Quantify Code ! Parameterize Feedback Continuous Recruitment

  • 16. The Implementation ! Quantify Code ! Parameterize Feedback ! Let Jenkins do the work Continuous Recruitment

  • 17. Quantify Code Baseline: PMD and custom rules ! Cyclomatic Complexity ! Escaping the static context ! Abstraction of input and output ! Dead Code vs. Test Coverage Continuous Recruitment > The Implementation
  • 18. Cyclomatic Complexity (McGabe) Each method starts with a score of 1.
 Then we score++ for each ! return that isn't the last statement of a method ! if, else, case, default ! for, while, do-while, break, and continue ! &&, ||, ? ! catch, finally, throw, or throws clause. <2😍 <5😎 <10😑 ≥10😡 Continuous Recruitment > The Implementation > Quantify Code
  • 19. Escaping the static context static methods and members are not OOP Entry point into your app is almost always public static void main(String [] args) {} Continuous Recruitment > The Implementation > Quantify Code
  • 20. Escaping the static context static methods and members are not OOP We simply count the number of occurrences of the static keywords in the code.
 ==1😍 <5😎 <10😑 ≥10😡 Continuous Recruitment > The Implementation > Quantify Code
  • 21. Abstraction of input and output Having output in one place is a great indicator So we simply count the amounts of System.out and System.in statements or equivalents.
 
 ==1😍 <1😑
 
 Continuous Recruitment > The Implementation > Quantify Code
  • 22. Dead Code vs. Test Coverage Note: The puzzle doesn’t require tests! If a candidate decides to provide tests, we measure line coverage. Line coverage drops when there is dead code. We like to feedback this, because removal of dead code is just base hygiene. 
 
 Continuous Recruitment > The Implementation > Quantify Code
  • 23. Parameterize Feedback ! Identify relevant information from raw data ! Create a sophisticated template Continuous Recruitment > The Implementation

  • 24. Identify relevant information from raw data Incomplete list of examples: ! Have all stories been implemented? Continuous Recruitment > The Implementation > Parametrize Feedback
  • 25. Identify relevant information from raw data Incomplete list of examples: ! Have all stories been implemented? ! Are there instructions on how to run the code? Continuous Recruitment > The Implementation > Parametrize Feedback
  • 26. Identify relevant information from raw data Incomplete list of examples: ! Have all stories been implemented? ! Are there instructions on how to run the code? ! Size parameters, i.e.: Line count, line coverage Continuous Recruitment > The Implementation > Parametrize Feedback
  • 27. Identify relevant information from raw data Incomplete list of examples: ! Have all stories been implemented? ! Are there instructions on how to run the code? ! Size parameters, i.e.: Line count, line coverage ! Cyclomatic Complexity, static context, I/O abstraction Continuous Recruitment > The Implementation > Parametrize Feedback
  • 28. Identify relevant information from raw data Incomplete list of examples: ! Have all stories been implemented? ! Are there instructions on how to run the code? ! Size parameters, i.e.: Line count, line coverage ! Cyclomatic Complexity, static context, I/O abstraction ! Was playing the game fun? Continuous Recruitment > The Implementation > Parametrize Feedback
  • 29. Identify relevant information from raw data Incomplete list of examples: ! Have all stories been implemented? ! Are there instructions on how to run the code? ! Size parameters, i.e.: Line count, line coverage ! Cyclomatic Complexity, static context, I/O abstraction ! Was playing the game fun? ! Have there been plagiarised files? Continuous Recruitment > The Implementation > Parametrize Feedback
  • 30. Identify relevant information from raw data Incomplete list of examples: ! Have all stories been implemented? ! Are there instructions on how to run the code? ! Size parameters, i.e.: Line count, line coverage ! Cyclomatic Complexity, static context, I/O abstraction ! Was playing the game fun? ! Have there been plagiarised files? And many more... Continuous Recruitment > The Implementation > Parametrize Feedback
  • 31. Create a sophisticated template ! Jinja2 python templates Continuous Recruitment > The Implementation > Parametrize Feedback project for use of 3rd libraries and frameworks and were {% i data.THIRD_PARTY_LIBRARIES_USED == false %} very happy to find that you haven’t used any, for anything other than tests, so thank you for sticking to the rules.{% else %}not so happy to find that you have used some libraries, although it’s a violation of our requirements, it’s not a showstopper for us. {% endif %} {{ data.GAME_JOY_CUSTOM_TEXT }} {% if data.GAME_JOY_FACTOR == "low" %}We found the game play to be satisfactory.{% elif data.GAME_JOY_FACTOR == "medium" %}We enjoyed playing the game for quite some time. Thank you for that.{% elif data.GAME_JOY_FACTOR == "high" %}Every minute of the game we have played brought us more joy, we truly appreciate the extra mile you went here. Good job!{% endif %}{% if data.STORIES_IMPLEMENTED == "all" %} We're happy to confirm that all of your stories were successfully implemented.{% elif data.STORIES_IMPLEMENTED == "most" %} We can state that some of the stories you were tasked with were implemented.{% else %} We're sad to state the none of the stories were implemented.{% endif %}
 
 We then started looking at the code. With approximately {{ data.CODE_LOC }} lines of code, we classify your solution as {% if data.CODE_LOC_VERBAL == "lean" %}lean{% elif data.CODE_LOC_VERBAL == "average" %}average{% else %}bigger than average{% endif %} in terms of size. {% if data.CODE_COVERAGE > 1 and data.CODE_COVERAGE <= 30 %
  • 32. Create a sophisticated template project for use of 3rd libraries and frameworks and were {% i data.THIRD_PARTY_LIBRARIES_USED == false %} very happy to find that you haven’t used any, for anything other than tests, so thank you for sticking to the rules.{% else %}not so happy to find that you have used some libraries, although it’s a violation of our requirements, it’s not a showstopper for us. {% endif %} {{ data.GAME_JOY_CUSTOM_TEXT }} {% if data.GAME_JOY_FACTOR == "low" %}We found the game play to be satisfactory.{% elif data.GAME_JOY_FACTOR == "medium" %}We enjoyed playing the game for quite some time. Thank you for that.{% elif data.GAME_JOY_FACTOR == "high" %}Every minute of the game we have played brought us more joy, we truly appreciate the extra mile you went here. Good job!{% endif %}{% if data.STORIES_IMPLEMENTED == "all" %} We're happy to confirm that all of your stories were successfully implemented.{% elif data.STORIES_IMPLEMENTED == "most" %} We can state that some of the stories you were tasked with were implemented.{% else %} We're sad to state the none of the stories were implemented.{% endif %}
 
 We then started looking at the code. With approximately {{ data.CODE_LOC }} lines of code, we classify your solution as {% if data.CODE_LOC_VERBAL == "lean" %}lean{% elif data.CODE_LOC_VERBAL == "average" %}average{% else %}bigger than average{% endif %} in terms of size. {% if data.CODE_COVERAGE > 1 and data.CODE_COVERAGE <= 30 % ! Jinja2 python templates ! Results are pushed to GitHub as comments Continuous Recruitment > The Implementation > Parametrize Feedback
  • 33. The Implementation ! Quantify Code ! Parameterize Feedback ! Let Jenkins do the work Continuous Recruitment

  • 36. Results ! Time reduction ! Elimination of the Review-Review Continuous Recruitment

  • 37. Results ! Time reduction ! Elimination of the Review-Review ! Leaner Process Continuous Recruitment

  • 38. Outlook ! Get better with metrics ! Automate other parts of the funnel ! Integrate other job profiles, i.e. data-science, go, php etc
  • 40. Q&A Meet me at our booth here @codemotion email: paul.hofmann@auto1.com LinkedIn: http://linkedin.com/in/paul-hofmann-auto1
 More Info: http://auto1-group.com/team/tech Continuous Recruitment