SlideShare a Scribd company logo
What Your Tech Lead Thinks You Know
(But didn’t teach you)
Chris Riccomini & Dmitriy Ryaboy
2021/11/18
Chris Riccomini
● Engineer, investor, advisor, writer
● PayPal, LinkedIn, and WePay
● Open Source (Airflow, Samza)
● Co-authored The Missing README
Speakers
Dmitriy Ryaboy
● Engineer and manager
● LBNL, Ask.com, Cloudera, Twitter, now VP
Software & DS at Zymergen
● Open Source (Apache Parquet & others)
● Co-authored The Missing README
Agenda
● Asking questions
● Going on-call
● Understanding dependencies
● Talking about promotions
● Q&A
Asking Questions
● Do your research
● Timebox
● Show your work
● Avoid interrupting
● Multicast & Asynchronous
Asking Questions // Do Your REsearch
● Documentation
● Wikis
● READMEs
● Source code
● Issue trackers
● Mailing lists
● Chat history
● Experiment!
Asking Questions // Timebox
● Set a time limit
● Then ask for help
● Or set a new limit (if you’re making progress)
● Then ask for help (no matter what)
Asking Questions // Show your Work
● Give context
● Describe the problem
● Say what you’ve tried
● Note the impact and urgency
● Ask a specific question
Bad
Hey Alice,
Any idea why testKeyValues is failing in TestKVStore?
It really slows down our builds to rerun this.
Thanks!
Pankaj
Asking Questions // Show your Work
Asking Questions // Show your Work
Good
Hey Alice,
I’m having trouble figuring out why testKeyValues is failing in TestKVStore (in the DistKV repo). Shaun pointed me
your way. I’m hoping you can help.
The test fails for me about every third execution; it seems random. I tried running it in isolation, and it’s still failing, so I
don’t think it’s an interaction between tests. Shaun ran the test in a loop on his machine but was unable to reproduce
it. I don’t see anything obvious in the source code to explain the failure. It seems like some kind of race condition. Any
thoughts?
There is no terrible urgency around this as I’m told this is unlikely to be affecting production. Still, the flapping test
costs us 20–30 minutes every time this happens, so I’d love to figure out how to fix it. I’ve attached logs that show
failures and all of my current environment settings, just in case.
Thanks!
Pankaj
Asking Questions // Multicast & Asynchronous
● Ask questions to groups (channels and mailing lists)
● Ask questions asynchronously (chat - not DMs! - and email)
● Batch synchronous questions
Going on-call
● What is on-call
● Be available
● Pay attention
● Track your work
● Handling an incident
Going on-call // What is On-call
● Handle support requests and operational issues
○ “First line of defense” - try to solve the problem yourself!
● Usually weekly or bi-weekly rotation
● Sometimes…
○ Primary/secondary on-call
○ 24/7
○ Tiered (support -> operations -> developers)
● “Shadow” on-call rotations
Going on-call // Be Available
● “Your best ability is availability.”
● Responsiveness is a virtue
○ “Let me look into this” is a valid response.
● Over-communicate
○ Don’t wait until you have a solution.
○ “Update: still looking into this” is a good practice.
○ “We’ve narrowed down the problem to 3 possibilities, expect another update in 1 hour”
● Know what’s expected
○ 24/7? “Follow the sun”? Near computer?
● Email alert groups
● Operations chat channels
● Operations meetings
● Phone calls
● Text messages
● Metrics dashboards
● Monitoring tools
Going on-call // Pay Attention
● Log what you do
● Everything should be in an issue tracker (or on-call log)
● Update issues as you work
● Always include timestamps
Going on-call // Track your work
1. Triage
2. Coordinate
3. Mitigate (most important)
4. Resolve
5. Follow-up
Going on-call // Handling An Incident
Understanding Dependencies
● Dependencies
● Semantic Versioning
● Transitive dependencies
● Dependency hell
● Managing dependencies
Understanding Dependencies // Dependencies
dependencies {
compile 'org.apache.httpcomponents:httpclient:4.3.6'
compile 'org.slf4j:slf4j-api:1.7.2'
}
● Defined in setup.py, requirements.txt, package.json, Gemfile, go.mod, ...
Understanding Dependencies // Semantic versioning
● Most common versioning scheme
● 2.13.7 (major.minor.patch)
○ patch: backward-compatible bug fixes
○ minor: backward-compatible features
○ major: backward-incompatible changes
● 1.4.0-alpha.2 (prerelease)
● 4.3.3+1945 (build number)
● Allows for wildcarding (2.13.*) and ranges [1.1, 2.0)
Understanding Dependencies // Semantic versioning
● Most common versioning scheme
● 2.13.7 (major.minor.patch)
○ patch: backward-compatible bug fixes
○ minor: backward-compatible features
○ major: backward-incompatible changes
● 1.4.0-alpha.2 (prerelease)
● 4.3.3+1945 (build number)
{
>>> def auth(user, password=None):
... pass
...
>>> auth('criccomini')
>>> def auth(user, password):
... pass
...
>>> auth('criccomini')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: auth() takes exactly 2
arguments (1 given)
Understanding Dependencies // Transitive Dependencies
dependencies {
compile 'org.apache.httpcomponents:httpclient:4.3.6'
compile 'org.slf4j:slf4j-api:1.7.2'
}
compile - Compile classpath for source set 'main'.
+--- org.apache.httpcomponents:httpclient:4.3.6
| +--- org.apache.httpcomponents:httpcore:4.3.3
| +--- commons-logging:commons-logging:1.1.3
| --- commons-codec:commons-codec:1.6
--- org.slf4j:slf4j-api:1.7.2
● Dependencies of dependencies (... of dependencies)
Understanding Dependencies // Dependency Hell
compile - Compile classpath for source set 'main'.
+--- com.google.code.findbugs:annotations:3.0.1
| +--- net.jcip:jcip-annotations:1.0
| --- com.google.code.findbugs:jsr305:3.0.1
+--- org.apache.zookeeper:zookeeper:3.4.10
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| +--- org.slf4j:slf4j-log4j12:1.6.1
| +--- log4j:log4j:1.2.16
| +--- jline:jline:0.9.94
| --- io.netty:netty:3.10.5.Final
--- com.mycompany.util:util:1.4.2
--- org.slf4j:slf4j-api:1.7.21
● Conflicting library versions or incompatible changes
Understanding Dependencies // Managing Dependencies
● Isolate dependencies
● Be deliberate
● Pin versions (or at least ranges)
● Strive for builds to be reproducible
Talking about Promotions
● Know the promotion process
● Assessing where you’re at
● Tips
Talking about Promotions // Know the Promotion Process
● Career ladders
○ Google “Square engineering ladder”
● Ask manager
● When are promotions done? Annually? Semi-annually? At-will?
● Who evaluates?
● Do you need a mentor, sponsor, or promotion packet?
Talking about Promotions // Assessing Where you’re at
● Do a self assessment
● Solicit feedback
● Review with your manager
● Work out plan to fill gaps
Talking about Promotions // Tips
● Work on what’s valuable and visible
● Speak up (early)
● Promotions are not time-related
● You are responsible for keeping track of your accomplishments
● Finish projects
● Demonstrate your skill for 3-6 months
Q&A

More Related Content

What's hot

Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...
Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...
Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...
Flink Forward
 

What's hot (20)

Uber Real Time Data Analytics
Uber Real Time Data AnalyticsUber Real Time Data Analytics
Uber Real Time Data Analytics
 
Introduction to Flink Streaming
Introduction to Flink StreamingIntroduction to Flink Streaming
Introduction to Flink Streaming
 
University program - writing an apache apex application
University program  - writing an apache apex applicationUniversity program  - writing an apache apex application
University program - writing an apache apex application
 
From Batch to Streaming with Apache Apex Dataworks Summit 2017
From Batch to Streaming with Apache Apex Dataworks Summit 2017From Batch to Streaming with Apache Apex Dataworks Summit 2017
From Batch to Streaming with Apache Apex Dataworks Summit 2017
 
Marton Balassi – Stateful Stream Processing
Marton Balassi – Stateful Stream ProcessingMarton Balassi – Stateful Stream Processing
Marton Balassi – Stateful Stream Processing
 
SamzaSQL QCon'16 presentation
SamzaSQL QCon'16 presentationSamzaSQL QCon'16 presentation
SamzaSQL QCon'16 presentation
 
Large-Scale Stream Processing in the Hadoop Ecosystem - Hadoop Summit 2016
Large-Scale Stream Processing in the Hadoop Ecosystem - Hadoop Summit 2016Large-Scale Stream Processing in the Hadoop Ecosystem - Hadoop Summit 2016
Large-Scale Stream Processing in the Hadoop Ecosystem - Hadoop Summit 2016
 
Stateful Distributed Stream Processing
Stateful Distributed Stream ProcessingStateful Distributed Stream Processing
Stateful Distributed Stream Processing
 
Streaming Data from Cassandra into Kafka
Streaming Data from Cassandra into KafkaStreaming Data from Cassandra into Kafka
Streaming Data from Cassandra into Kafka
 
Introduction to Stateful Stream Processing with Apache Flink.
Introduction to Stateful Stream Processing with Apache Flink.Introduction to Stateful Stream Processing with Apache Flink.
Introduction to Stateful Stream Processing with Apache Flink.
 
Intro to Apache Apex - Next Gen Native Hadoop Platform - Hackac
Intro to Apache Apex - Next Gen Native Hadoop Platform - HackacIntro to Apache Apex - Next Gen Native Hadoop Platform - Hackac
Intro to Apache Apex - Next Gen Native Hadoop Platform - Hackac
 
Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...
Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...
Javier Lopez_Mihail Vieru - Flink in Zalando's World of Microservices - Flink...
 
Will it Scale? The Secrets behind Scaling Stream Processing Applications
Will it Scale? The Secrets behind Scaling Stream Processing ApplicationsWill it Scale? The Secrets behind Scaling Stream Processing Applications
Will it Scale? The Secrets behind Scaling Stream Processing Applications
 
Windowing in apex
Windowing in apexWindowing in apex
Windowing in apex
 
Building real time Data Pipeline using Spark Streaming
Building real time Data Pipeline using Spark StreamingBuilding real time Data Pipeline using Spark Streaming
Building real time Data Pipeline using Spark Streaming
 
Lambda-less stream processing - linked in
Lambda-less stream processing - linked inLambda-less stream processing - linked in
Lambda-less stream processing - linked in
 
Structured streaming in Spark
Structured streaming in SparkStructured streaming in Spark
Structured streaming in Spark
 
Hadoop Summit SJ 2016: Next Gen Big Data Analytics with Apache Apex
Hadoop Summit SJ 2016: Next Gen Big Data Analytics with Apache ApexHadoop Summit SJ 2016: Next Gen Big Data Analytics with Apache Apex
Hadoop Summit SJ 2016: Next Gen Big Data Analytics with Apache Apex
 
Architectual Comparison of Apache Apex and Spark Streaming
Architectual Comparison of Apache Apex and Spark StreamingArchitectual Comparison of Apache Apex and Spark Streaming
Architectual Comparison of Apache Apex and Spark Streaming
 
Ingestion file copy using apex
Ingestion   file copy using apexIngestion   file copy using apex
Ingestion file copy using apex
 

Similar to What Your Tech Lead Thinks You Know (But Didn't Teach You)

Chelberg ptcuser 2010
Chelberg ptcuser 2010Chelberg ptcuser 2010
Chelberg ptcuser 2010
Clay Helberg
 
Debugging Spark: Scala and Python - Super Happy Fun Times @ Data Day Texas 2018
Debugging Spark:  Scala and Python - Super Happy Fun Times @ Data Day Texas 2018Debugging Spark:  Scala and Python - Super Happy Fun Times @ Data Day Texas 2018
Debugging Spark: Scala and Python - Super Happy Fun Times @ Data Day Texas 2018
Holden Karau
 
Debugging Apache Spark
Debugging Apache SparkDebugging Apache Spark
Debugging Apache Spark
Joey Echeverria
 
Debugging PySpark - PyCon US 2018
Debugging PySpark -  PyCon US 2018Debugging PySpark -  PyCon US 2018
Debugging PySpark - PyCon US 2018
Holden Karau
 

Similar to What Your Tech Lead Thinks You Know (But Didn't Teach You) (20)

Pen Testing Development
Pen Testing DevelopmentPen Testing Development
Pen Testing Development
 
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Property-based testing an open-source compiler, pflua (FOSDEM 2015)Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
 
How to get started with Site Reliability Engineering
How to get started with Site Reliability EngineeringHow to get started with Site Reliability Engineering
How to get started with Site Reliability Engineering
 
44CON London 2015 - 15-Minute Linux Incident Response Live Analysis
44CON London 2015 - 15-Minute Linux Incident Response Live Analysis44CON London 2015 - 15-Minute Linux Incident Response Live Analysis
44CON London 2015 - 15-Minute Linux Incident Response Live Analysis
 
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
Dynamic tracing of MariaDB on Linux - problems and solutions (MariaDB Server ...
 
Async Web Frameworks in Python
Async Web Frameworks in PythonAsync Web Frameworks in Python
Async Web Frameworks in Python
 
Chelberg ptcuser 2010
Chelberg ptcuser 2010Chelberg ptcuser 2010
Chelberg ptcuser 2010
 
Pentester++
Pentester++Pentester++
Pentester++
 
An EyeWitness View into your Network
An EyeWitness View into your NetworkAn EyeWitness View into your Network
An EyeWitness View into your Network
 
Case of the Unexplained Support Issue – Troubleshooting steps for diagnosing ...
Case of the Unexplained Support Issue – Troubleshooting steps for diagnosing ...Case of the Unexplained Support Issue – Troubleshooting steps for diagnosing ...
Case of the Unexplained Support Issue – Troubleshooting steps for diagnosing ...
 
Debugging Spark: Scala and Python - Super Happy Fun Times @ Data Day Texas 2018
Debugging Spark:  Scala and Python - Super Happy Fun Times @ Data Day Texas 2018Debugging Spark:  Scala and Python - Super Happy Fun Times @ Data Day Texas 2018
Debugging Spark: Scala and Python - Super Happy Fun Times @ Data Day Texas 2018
 
Debugging Apache Spark
Debugging Apache SparkDebugging Apache Spark
Debugging Apache Spark
 
Debugging PySpark - PyCon US 2018
Debugging PySpark -  PyCon US 2018Debugging PySpark -  PyCon US 2018
Debugging PySpark - PyCon US 2018
 
LCE12: Intro Training: Upstreaming 101
LCE12: Intro Training: Upstreaming 101LCE12: Intro Training: Upstreaming 101
LCE12: Intro Training: Upstreaming 101
 
LCA13: Upstreaming 101
LCA13: Upstreaming 101LCA13: Upstreaming 101
LCA13: Upstreaming 101
 
Upstreaming 1013
Upstreaming 1013Upstreaming 1013
Upstreaming 1013
 
Interop 2015: Hardly Enough Theory, Barley Enough Code
Interop 2015: Hardly Enough Theory, Barley Enough CodeInterop 2015: Hardly Enough Theory, Barley Enough Code
Interop 2015: Hardly Enough Theory, Barley Enough Code
 
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
Hacker vs company, Cloud Cyber Security Automated with Kubernetes - Demi Ben-...
 
The Final Frontier, Automating Dynamic Security Testing
The Final Frontier, Automating Dynamic Security TestingThe Final Frontier, Automating Dynamic Security Testing
The Final Frontier, Automating Dynamic Security Testing
 
Linux /proc filesystem for MySQL DBAs - FOSDEM 2021
Linux  /proc filesystem for MySQL DBAs - FOSDEM 2021Linux  /proc filesystem for MySQL DBAs - FOSDEM 2021
Linux /proc filesystem for MySQL DBAs - FOSDEM 2021
 

More from Chris Riccomini

More from Chris Riccomini (6)

Data Warehousing Trends
Data Warehousing TrendsData Warehousing Trends
Data Warehousing Trends
 
The Future of Data Engineering - 2019 InfoQ QConSF
The Future of Data Engineering - 2019 InfoQ QConSFThe Future of Data Engineering - 2019 InfoQ QConSF
The Future of Data Engineering - 2019 InfoQ QConSF
 
Airflow at WePay
Airflow at WePayAirflow at WePay
Airflow at WePay
 
Apache Incubator Samza: Stream Processing at LinkedIn
Apache Incubator Samza: Stream Processing at LinkedInApache Incubator Samza: Stream Processing at LinkedIn
Apache Incubator Samza: Stream Processing at LinkedIn
 
Apache Incubator Samza: Stream Processing at LinkedIn
Apache Incubator Samza: Stream Processing at LinkedInApache Incubator Samza: Stream Processing at LinkedIn
Apache Incubator Samza: Stream Processing at LinkedIn
 
Building Applications on YARN
Building Applications on YARNBuilding Applications on YARN
Building Applications on YARN
 

Recently uploaded

Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
mbmh111980
 

Recently uploaded (20)

CompTIA Security+ (Study Notes) for cs.pdf
CompTIA Security+ (Study Notes) for cs.pdfCompTIA Security+ (Study Notes) for cs.pdf
CompTIA Security+ (Study Notes) for cs.pdf
 
10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf10 Essential Software Testing Tools You Need to Know About.pdf
10 Essential Software Testing Tools You Need to Know About.pdf
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 
Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024Secure Software Ecosystem Teqnation 2024
Secure Software Ecosystem Teqnation 2024
 
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
KLARNA -  Language Models and Knowledge Graphs: A Systems ApproachKLARNA -  Language Models and Knowledge Graphs: A Systems Approach
KLARNA - Language Models and Knowledge Graphs: A Systems Approach
 
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
 
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
 
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdfImplementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM Integration
 
AI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in MichelangeloAI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in Michelangelo
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
 
Breaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdfBreaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdf
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024
 
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with StrimziStrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
StrimziCon 2024 - Transition to Apache Kafka on Kubernetes with Strimzi
 
Benefits of Employee Monitoring Software
Benefits of  Employee Monitoring SoftwareBenefits of  Employee Monitoring Software
Benefits of Employee Monitoring Software
 

What Your Tech Lead Thinks You Know (But Didn't Teach You)

  • 1. What Your Tech Lead Thinks You Know (But didn’t teach you) Chris Riccomini & Dmitriy Ryaboy 2021/11/18
  • 2. Chris Riccomini ● Engineer, investor, advisor, writer ● PayPal, LinkedIn, and WePay ● Open Source (Airflow, Samza) ● Co-authored The Missing README Speakers Dmitriy Ryaboy ● Engineer and manager ● LBNL, Ask.com, Cloudera, Twitter, now VP Software & DS at Zymergen ● Open Source (Apache Parquet & others) ● Co-authored The Missing README
  • 3. Agenda ● Asking questions ● Going on-call ● Understanding dependencies ● Talking about promotions ● Q&A
  • 4. Asking Questions ● Do your research ● Timebox ● Show your work ● Avoid interrupting ● Multicast & Asynchronous
  • 5. Asking Questions // Do Your REsearch ● Documentation ● Wikis ● READMEs ● Source code ● Issue trackers ● Mailing lists ● Chat history ● Experiment!
  • 6. Asking Questions // Timebox ● Set a time limit ● Then ask for help ● Or set a new limit (if you’re making progress) ● Then ask for help (no matter what)
  • 7. Asking Questions // Show your Work ● Give context ● Describe the problem ● Say what you’ve tried ● Note the impact and urgency ● Ask a specific question
  • 8. Bad Hey Alice, Any idea why testKeyValues is failing in TestKVStore? It really slows down our builds to rerun this. Thanks! Pankaj Asking Questions // Show your Work
  • 9. Asking Questions // Show your Work Good Hey Alice, I’m having trouble figuring out why testKeyValues is failing in TestKVStore (in the DistKV repo). Shaun pointed me your way. I’m hoping you can help. The test fails for me about every third execution; it seems random. I tried running it in isolation, and it’s still failing, so I don’t think it’s an interaction between tests. Shaun ran the test in a loop on his machine but was unable to reproduce it. I don’t see anything obvious in the source code to explain the failure. It seems like some kind of race condition. Any thoughts? There is no terrible urgency around this as I’m told this is unlikely to be affecting production. Still, the flapping test costs us 20–30 minutes every time this happens, so I’d love to figure out how to fix it. I’ve attached logs that show failures and all of my current environment settings, just in case. Thanks! Pankaj
  • 10. Asking Questions // Multicast & Asynchronous ● Ask questions to groups (channels and mailing lists) ● Ask questions asynchronously (chat - not DMs! - and email) ● Batch synchronous questions
  • 11. Going on-call ● What is on-call ● Be available ● Pay attention ● Track your work ● Handling an incident
  • 12. Going on-call // What is On-call ● Handle support requests and operational issues ○ “First line of defense” - try to solve the problem yourself! ● Usually weekly or bi-weekly rotation ● Sometimes… ○ Primary/secondary on-call ○ 24/7 ○ Tiered (support -> operations -> developers) ● “Shadow” on-call rotations
  • 13. Going on-call // Be Available ● “Your best ability is availability.” ● Responsiveness is a virtue ○ “Let me look into this” is a valid response. ● Over-communicate ○ Don’t wait until you have a solution. ○ “Update: still looking into this” is a good practice. ○ “We’ve narrowed down the problem to 3 possibilities, expect another update in 1 hour” ● Know what’s expected ○ 24/7? “Follow the sun”? Near computer?
  • 14. ● Email alert groups ● Operations chat channels ● Operations meetings ● Phone calls ● Text messages ● Metrics dashboards ● Monitoring tools Going on-call // Pay Attention
  • 15. ● Log what you do ● Everything should be in an issue tracker (or on-call log) ● Update issues as you work ● Always include timestamps Going on-call // Track your work
  • 16. 1. Triage 2. Coordinate 3. Mitigate (most important) 4. Resolve 5. Follow-up Going on-call // Handling An Incident
  • 17. Understanding Dependencies ● Dependencies ● Semantic Versioning ● Transitive dependencies ● Dependency hell ● Managing dependencies
  • 18. Understanding Dependencies // Dependencies dependencies { compile 'org.apache.httpcomponents:httpclient:4.3.6' compile 'org.slf4j:slf4j-api:1.7.2' } ● Defined in setup.py, requirements.txt, package.json, Gemfile, go.mod, ...
  • 19. Understanding Dependencies // Semantic versioning ● Most common versioning scheme ● 2.13.7 (major.minor.patch) ○ patch: backward-compatible bug fixes ○ minor: backward-compatible features ○ major: backward-incompatible changes ● 1.4.0-alpha.2 (prerelease) ● 4.3.3+1945 (build number) ● Allows for wildcarding (2.13.*) and ranges [1.1, 2.0)
  • 20. Understanding Dependencies // Semantic versioning ● Most common versioning scheme ● 2.13.7 (major.minor.patch) ○ patch: backward-compatible bug fixes ○ minor: backward-compatible features ○ major: backward-incompatible changes ● 1.4.0-alpha.2 (prerelease) ● 4.3.3+1945 (build number) { >>> def auth(user, password=None): ... pass ... >>> auth('criccomini') >>> def auth(user, password): ... pass ... >>> auth('criccomini') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: auth() takes exactly 2 arguments (1 given)
  • 21. Understanding Dependencies // Transitive Dependencies dependencies { compile 'org.apache.httpcomponents:httpclient:4.3.6' compile 'org.slf4j:slf4j-api:1.7.2' } compile - Compile classpath for source set 'main'. +--- org.apache.httpcomponents:httpclient:4.3.6 | +--- org.apache.httpcomponents:httpcore:4.3.3 | +--- commons-logging:commons-logging:1.1.3 | --- commons-codec:commons-codec:1.6 --- org.slf4j:slf4j-api:1.7.2 ● Dependencies of dependencies (... of dependencies)
  • 22. Understanding Dependencies // Dependency Hell compile - Compile classpath for source set 'main'. +--- com.google.code.findbugs:annotations:3.0.1 | +--- net.jcip:jcip-annotations:1.0 | --- com.google.code.findbugs:jsr305:3.0.1 +--- org.apache.zookeeper:zookeeper:3.4.10 | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 | +--- org.slf4j:slf4j-log4j12:1.6.1 | +--- log4j:log4j:1.2.16 | +--- jline:jline:0.9.94 | --- io.netty:netty:3.10.5.Final --- com.mycompany.util:util:1.4.2 --- org.slf4j:slf4j-api:1.7.21 ● Conflicting library versions or incompatible changes
  • 23. Understanding Dependencies // Managing Dependencies ● Isolate dependencies ● Be deliberate ● Pin versions (or at least ranges) ● Strive for builds to be reproducible
  • 24. Talking about Promotions ● Know the promotion process ● Assessing where you’re at ● Tips
  • 25. Talking about Promotions // Know the Promotion Process ● Career ladders ○ Google “Square engineering ladder” ● Ask manager ● When are promotions done? Annually? Semi-annually? At-will? ● Who evaluates? ● Do you need a mentor, sponsor, or promotion packet?
  • 26. Talking about Promotions // Assessing Where you’re at ● Do a self assessment ● Solicit feedback ● Review with your manager ● Work out plan to fill gaps
  • 27. Talking about Promotions // Tips ● Work on what’s valuable and visible ● Speak up (early) ● Promotions are not time-related ● You are responsible for keeping track of your accomplishments ● Finish projects ● Demonstrate your skill for 3-6 months
  • 28. Q&A