SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
MODERN-DAY
JVM
CONTROVERSIES
MAVEN OR GRADLE?
BACKGROUND
+ CAVEATS
FLAME WAR STEPS
▸ The Talking Parrot Phase
▸ “It’s got Electrolytes” , “It’s Web-Scale”
▸ The Google Lookup Phase
▸ “X is better then Y”
▸ The Emotional Breakdown Phase
▸ “X sucks! , Y is evil!” , name calling …
▸ .. if you’re lucky “Goodwin’s Law”
MicroServices
Kubernetenes
Docker
Kotlin
LEVEL SET
▸ Economics 101
▸ Needs are infinite, resources are finite
▸ Probability 101
▸ Rule-of-Thumb, “In general,” , sensible defaults
▸ Human Nature 101
▸ Self-Interest / Identity
▸ Biases / Shiny-Objects
▸ Rules based -> Big Picture (Dreyfus Model)
DREYFUS MODEL OF SKILL ACQUISITION
Novice Begineer Competent Proficient Expert
Rigid Adherence to Rules
Holistic Picture
DEVELOPER PRODUCTIVITY
▸ Higher-Level Trend
▸ Key velocity driver
▸ Getting closer to “business value” / “English”
▸ Majority of time and cost is in Maintenance + Day 2
▸ Cost directly proportional to number of moving pieces /
LOC
▸ Average developer job length - ~2 years
DEVELOPER WASTE
▸ Eliminate Waste
▸ Time spent on non-value add items, is NOT spent on actual
business value
▸ Everything is a Trade-Off
▸ Hardware Costs (↓) vs Human Costs (↑)
▸ Flexibility is a Cost ! Change is Certain
▸ Reduce Cycle Time , MVP, YAGNI
DEVELOPER DECISIONS
▸ Leverage Industry Lessons
▸ What are Startups doing ?
▸ What are the Giants doing?**
▸ Proven tech instead of DIY
▸ Market Trends / Hiring
▸ StackOverflow / Google Trends
▸ Transparency around the Cons / Costs
▸ Include Alternatives!
** Keep in mind you’re NOT operating NetFlix scale!!
CONSTRUCTOR DEPENDENCY INJECTION
▸ Alternatives:
▸ Setter or Field
▸ @Required annotation
▸ More Readable ? Better for Testing?
▸ Less Error-Prone ?
▸ Just Stay Consistent !
▸ Stop Bike Shedding !!
EASY HARD
TRIVIAL
CONSEQUENTIAL
BIKE-SHEDDING
? ?
SCALA
▸ More succinct then Java, focus on performance
▸ Steep Learning Curve / High Investment
▸ Non-Standard Stack (SBT, Akka, Actors, Play, etc)
▸ IDE Support / Backwards Compatibility Issues
▸ Questionable MarketTrend
▸ Questionable Performance
▸ Justify with real Metrics
KOTLIN
▸ More succinct then Java, focus on developer productivity
▸ True Null-Safety (not Optional!)
▸ Low Learning Curve / Low Investment
▸ Works well with Java EcoSystem
▸ Great IDE Support! Backwards Compatibility !
▸ Positive Developer Productivity Improvements
▸ Positive MarketTrend
▸ Question of Political Capital .. (Esperanto)
DYNAMIC TYPING
▸ Less Code
▸ Not being forced to define full contract (JSON, XML, REST, DB, etc)
▸ SOAP (WSDL) -> REST -> Spring Cloud Contracts
▸ Checked vs Runtime Exceptions
▸ More Error-Prone
▸ Testing was suppose to negate this
▸ Alternatives exist:
▸ XPath, Optional Typing, etc
▸ Upfront Velocity Improvement , Long Term Maintenance Costs
▸ Minimize for Corporate
.NET (C#)
▸ More succinct code (historically)
▸ Lacking ecosystem (historically)
▸ Windows, IIS, Visual Studio, NuGet, OSS Support, Costs!
▸ Still Lagging with Cloud-Native
▸ Would a startup use .NET?
▸ StackOverflow aside!
▸ CEO Friday: Why we don’t hire .NET programmers
▸ Dependant on current developers / code / and market
PAIR PROGRAMMING
▸ Costs:
▸ Developers don’t type twice as fast with someone sitting beside them
▸ Design by Consensus
▸ Mitigates:
▸ Ivory Towers
▸ Knowledge Silos / Information Hoarding
▸ The Elephant in the Room :
▸ Highly Focused Development / Minimized Distractions
▸ Healthy Competition
▸ Give it a try !!
▸ Mandate helps
AUTOMATED TESTS
▸ Granular mock heavy Unit Tests, and BDD style (Cucumber Tests)
▸ Costs (often ignored!)
▸ Refactoring Costs / Avoidance
▸ Testing Plumbing instead of Business Value
▸ Additional Layers (BBD Cucumber)
▸ Alternatives Exist:
▸ Smoke Tests / Integration Tests
▸ Monitoring / Alerting
▸ What about TDD?
▸ Focus on ROI + delete Questionable Tests
COMMON CODE BASES
▸ Internal Frameworks, ORM’s, Platforms, Testing Libs, Common-Libs, etc
▸ Costs:
▸ Learning Curves for Developers
▸ Dependency on Current developers
▸ Not writing actual business value!
▸ Maintenance Costs
▸ Multiple Repos / Artifactory / CI requirements complexities
▸ Alternatives:
▸ Embed in Application (first 3 times)
▸ Use 3rd Party (often OSS) solutions, which will almost always be better documented / supported
GRADLE
▸ Benefits:
▸ Easier to Read (no XML), Less LOC
▸ Easier to Extend (instead of Bash scripts!)
▸ Significant Build Time Improvements! (X factor)
▸ Comes down to Political Capital
MULTIPLE SOURCE CODE REPOSITORIES
▸ For Same Team and Same Deliverable
▸ Costs:
▸ Lack of Atomicity between commits
▸ CI/CD overhead
▸ Local Development costs
▸ Would would Jesus Google do ?
MICROSERVICES
▸ Tackles challenges of Monoliths (especially large size ones)
▸ Costs (almost always ignored!)
▸ Performance, DevOps, Transactions, Versioning, Resource Costs, etc
▸ “You must be this tall to use”
▸ Alternatives Exist:
▸ Cookie Cutter Scaling (Easier Scaling!!)
▸ “Decouple” at Project Level
▸ Address fundamental issues first !
▸ Monoliths are not EVIL! - Can scale and cleanly separate / decouple code !
▸ Default to Pizza-Team Sized Services - “Right-Sized Services”
KUBERNETES (CAAS)
▸ Comparing to IaaS or PaaS?
▸ Higher Level of Abstraction then IaaS
▸ Orchestration, OS Abstraction, Availability
▸ Lower Level of Abstraction then PaaS
▸ Networking, Buildpacks, Pods, Docker Files, etc
▸ Stick to the Highest Possible Level of Abstraction
REACTIVE PROGRAMMING (WEBFLUX)
▸ “Non-blocking” stack to minimize thread usage and scale better (i.e. Performance Optimization)
▸ Costs
▸ Steep Learning Curve / Legibility / Testing
▸ Concurrency Performance Gains
▸ High Count (1000+) (↑) , Low Count (↓ ?)
▸ Limited Support (Database / FrontEnd)
▸ Positive MarketTrend
▸ Threads are NOT bad !!
▸ Consider the Trade-offs / you can mix and match (with Spring-MVC)
CONCURRENT REST CALLS EXAMPLE
BUZZWORD POT-POURRI
▸ MicroServices
▸ Reactive + Non-Blocking
▸ NoSQL + CQRS + Event Sourcing
▸ Scala + Akka
▸ A “Manifesto” for good measure
LAGOM
▸ New Reactive Microservices Framework
▸ From Typesafe Lightbend
▸ Steep Learning Curve!
▸ Significant Risk + Cost !
▸ Unproven buzzword’y benefits
OTHER ITEMS OF CONTROVERSY
▸ Tabs vs Spaces
▸ EJBS’s
▸ IntelliJ vs Eclipse vs NetBeans
▸ Optionals
▸ Server Side vs Client Side (SPA)
▸ ReactJS vs Angular
▸ 10x Developers
▸ OOP vs Functional vs Procedural
▸ Branching
▸ CPU / Thread Optimization
▸ Immutable Types + “final” on everything
▸ Theory of Constraints
▸ …
KEY POINTS
▸ Think Big Picture + Context
▸ .. instead of Tech X Sucks / is Bad / etc
▸ Rules are great for beginners (pick the right ones!)
▸ Focus on ROI
▸ Trade-offs / Opportunity Costs
▸ Fundamentals
▸ Maintenance Costs (minimize Snowflakes)
▸ Metrics (instead of assumptions) to drive non-standard choices
▸ What’s your Developer “Identity”?
▸ Technologies come and go!
▸ Default to Simplicity instead of Rube-Goldberg Machines
BOOK RECOMMENDATIONS
DUNNING KRUGER EFFECT + IMPOSTER SYNDROME
Actual Ability
PerceivedAbility
Dunning Kruger Effect / Expert Beginner
Imposter Syndrome

Contenu connexe

Similaire à Modern day jvm controversies

Similaire à Modern day jvm controversies (20)

Refactoring: the good, the bad and the ugly.
Refactoring: the good, the bad and the ugly.Refactoring: the good, the bad and the ugly.
Refactoring: the good, the bad and the ugly.
 
The Best Feature of Go – A 5 Year Retrospective
The Best Feature of Go – A 5 Year RetrospectiveThe Best Feature of Go – A 5 Year Retrospective
The Best Feature of Go – A 5 Year Retrospective
 
Serverless Chicago - Datomic Cloud and AWS AppSync - April 26 2018
Serverless Chicago - Datomic Cloud and AWS AppSync - April 26 2018Serverless Chicago - Datomic Cloud and AWS AppSync - April 26 2018
Serverless Chicago - Datomic Cloud and AWS AppSync - April 26 2018
 
Page Performance
Page PerformancePage Performance
Page Performance
 
AWS user group Serverless in September - Chris Johnson Bidler "Go Serverless ...
AWS user group Serverless in September - Chris Johnson Bidler "Go Serverless ...AWS user group Serverless in September - Chris Johnson Bidler "Go Serverless ...
AWS user group Serverless in September - Chris Johnson Bidler "Go Serverless ...
 
War between Tools and Design 2016
War between Tools and Design 2016War between Tools and Design 2016
War between Tools and Design 2016
 
Devops (start walking in the same direction) by ops
Devops (start walking in the same direction) by opsDevops (start walking in the same direction) by ops
Devops (start walking in the same direction) by ops
 
Application modernization patterns with apache kafka, debezium, and kubernete...
Application modernization patterns with apache kafka, debezium, and kubernete...Application modernization patterns with apache kafka, debezium, and kubernete...
Application modernization patterns with apache kafka, debezium, and kubernete...
 
Stress Test & Chaos Engineering
Stress Test & Chaos EngineeringStress Test & Chaos Engineering
Stress Test & Chaos Engineering
 
A real-life account of moving 100% to a public cloud
A real-life account of moving 100% to a public cloudA real-life account of moving 100% to a public cloud
A real-life account of moving 100% to a public cloud
 
Making software maintainable
Making software maintainableMaking software maintainable
Making software maintainable
 
Human scaling on the front end
Human scaling on the front endHuman scaling on the front end
Human scaling on the front end
 
Migratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with NomadMigratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with Nomad
 
A Java Developers first Clojure project
A Java Developers first Clojure projectA Java Developers first Clojure project
A Java Developers first Clojure project
 
The road to continuous deployment: a case study (DPC16)
The road to continuous deployment: a case study (DPC16)The road to continuous deployment: a case study (DPC16)
The road to continuous deployment: a case study (DPC16)
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
 
Herding cats in the Cloud
Herding cats in the CloudHerding cats in the Cloud
Herding cats in the Cloud
 
Migratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with NomadMigratory Workloads Across Clouds with Nomad
Migratory Workloads Across Clouds with Nomad
 
To AWS with Ansible
To AWS with AnsibleTo AWS with Ansible
To AWS with Ansible
 
Micro-datacenter chaos monkeys!
Micro-datacenter chaos monkeys! Micro-datacenter chaos monkeys!
Micro-datacenter chaos monkeys!
 

Plus de VictorSzoltysek

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Plus de VictorSzoltysek (16)

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Simplified DevOps Bliss -with OpenAI API
Simplified DevOps Bliss -with OpenAI APISimplified DevOps Bliss -with OpenAI API
Simplified DevOps Bliss -with OpenAI API
 
From SpaceX Launch Pads to Rapid Deployments
From SpaceX Launch Pads to Rapid DeploymentsFrom SpaceX Launch Pads to Rapid Deployments
From SpaceX Launch Pads to Rapid Deployments
 
The Future of JVM Languages
The Future of JVM Languages The Future of JVM Languages
The Future of JVM Languages
 
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
Driving Process Improvements - A Guided Approach to Running Effective Retrosp...
 
Spaceships, Pull Requests and Feature Branching - A Principles-Based approac...
Spaceships, Pull Requests and Feature Branching  - A Principles-Based approac...Spaceships, Pull Requests and Feature Branching  - A Principles-Based approac...
Spaceships, Pull Requests and Feature Branching - A Principles-Based approac...
 
Real-World Application Observability - 11 Practical Developer Focused Tips
Real-World Application Observability - 11 Practical Developer Focused TipsReal-World Application Observability - 11 Practical Developer Focused Tips
Real-World Application Observability - 11 Practical Developer Focused Tips
 
Victor's Awesome Retro Deck
Victor's Awesome Retro DeckVictor's Awesome Retro Deck
Victor's Awesome Retro Deck
 
Software Development in Internet Memes
Software Development in Internet MemesSoftware Development in Internet Memes
Software Development in Internet Memes
 
Big Bangs, Monorails and Microservices - Feb 2020
Big Bangs, Monorails and Microservices - Feb 2020Big Bangs, Monorails and Microservices - Feb 2020
Big Bangs, Monorails and Microservices - Feb 2020
 
Making your RDBMS fast!
Making your RDBMS fast! Making your RDBMS fast!
Making your RDBMS fast!
 
SQL Tips + Tricks for Developers
SQL Tips + Tricks for DevelopersSQL Tips + Tricks for Developers
SQL Tips + Tricks for Developers
 
Less is more the 7 wastes of lean software development
Less is more   the 7 wastes of lean software developmentLess is more   the 7 wastes of lean software development
Less is more the 7 wastes of lean software development
 
The Future of Java - and a look at the evolution of programming languages
The Future of Java - and a look at the evolution of programming languagesThe Future of Java - and a look at the evolution of programming languages
The Future of Java - and a look at the evolution of programming languages
 
Client Technical Analysis of Legacy Software and Future Replacement
Client Technical Analysis of Legacy Software and Future ReplacementClient Technical Analysis of Legacy Software and Future Replacement
Client Technical Analysis of Legacy Software and Future Replacement
 

Dernier

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Dernier (20)

How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 

Modern day jvm controversies

  • 3. FLAME WAR STEPS ▸ The Talking Parrot Phase ▸ “It’s got Electrolytes” , “It’s Web-Scale” ▸ The Google Lookup Phase ▸ “X is better then Y” ▸ The Emotional Breakdown Phase ▸ “X sucks! , Y is evil!” , name calling … ▸ .. if you’re lucky “Goodwin’s Law”
  • 5. LEVEL SET ▸ Economics 101 ▸ Needs are infinite, resources are finite ▸ Probability 101 ▸ Rule-of-Thumb, “In general,” , sensible defaults ▸ Human Nature 101 ▸ Self-Interest / Identity ▸ Biases / Shiny-Objects ▸ Rules based -> Big Picture (Dreyfus Model)
  • 6. DREYFUS MODEL OF SKILL ACQUISITION Novice Begineer Competent Proficient Expert Rigid Adherence to Rules Holistic Picture
  • 7. DEVELOPER PRODUCTIVITY ▸ Higher-Level Trend ▸ Key velocity driver ▸ Getting closer to “business value” / “English” ▸ Majority of time and cost is in Maintenance + Day 2 ▸ Cost directly proportional to number of moving pieces / LOC ▸ Average developer job length - ~2 years
  • 8. DEVELOPER WASTE ▸ Eliminate Waste ▸ Time spent on non-value add items, is NOT spent on actual business value ▸ Everything is a Trade-Off ▸ Hardware Costs (↓) vs Human Costs (↑) ▸ Flexibility is a Cost ! Change is Certain ▸ Reduce Cycle Time , MVP, YAGNI
  • 9. DEVELOPER DECISIONS ▸ Leverage Industry Lessons ▸ What are Startups doing ? ▸ What are the Giants doing?** ▸ Proven tech instead of DIY ▸ Market Trends / Hiring ▸ StackOverflow / Google Trends ▸ Transparency around the Cons / Costs ▸ Include Alternatives! ** Keep in mind you’re NOT operating NetFlix scale!!
  • 10. CONSTRUCTOR DEPENDENCY INJECTION ▸ Alternatives: ▸ Setter or Field ▸ @Required annotation ▸ More Readable ? Better for Testing? ▸ Less Error-Prone ? ▸ Just Stay Consistent ! ▸ Stop Bike Shedding !!
  • 12.
  • 13. SCALA ▸ More succinct then Java, focus on performance ▸ Steep Learning Curve / High Investment ▸ Non-Standard Stack (SBT, Akka, Actors, Play, etc) ▸ IDE Support / Backwards Compatibility Issues ▸ Questionable MarketTrend ▸ Questionable Performance ▸ Justify with real Metrics
  • 14.
  • 15. KOTLIN ▸ More succinct then Java, focus on developer productivity ▸ True Null-Safety (not Optional!) ▸ Low Learning Curve / Low Investment ▸ Works well with Java EcoSystem ▸ Great IDE Support! Backwards Compatibility ! ▸ Positive Developer Productivity Improvements ▸ Positive MarketTrend ▸ Question of Political Capital .. (Esperanto)
  • 16. DYNAMIC TYPING ▸ Less Code ▸ Not being forced to define full contract (JSON, XML, REST, DB, etc) ▸ SOAP (WSDL) -> REST -> Spring Cloud Contracts ▸ Checked vs Runtime Exceptions ▸ More Error-Prone ▸ Testing was suppose to negate this ▸ Alternatives exist: ▸ XPath, Optional Typing, etc ▸ Upfront Velocity Improvement , Long Term Maintenance Costs ▸ Minimize for Corporate
  • 17. .NET (C#) ▸ More succinct code (historically) ▸ Lacking ecosystem (historically) ▸ Windows, IIS, Visual Studio, NuGet, OSS Support, Costs! ▸ Still Lagging with Cloud-Native ▸ Would a startup use .NET? ▸ StackOverflow aside! ▸ CEO Friday: Why we don’t hire .NET programmers ▸ Dependant on current developers / code / and market
  • 18. PAIR PROGRAMMING ▸ Costs: ▸ Developers don’t type twice as fast with someone sitting beside them ▸ Design by Consensus ▸ Mitigates: ▸ Ivory Towers ▸ Knowledge Silos / Information Hoarding ▸ The Elephant in the Room : ▸ Highly Focused Development / Minimized Distractions ▸ Healthy Competition ▸ Give it a try !! ▸ Mandate helps
  • 19. AUTOMATED TESTS ▸ Granular mock heavy Unit Tests, and BDD style (Cucumber Tests) ▸ Costs (often ignored!) ▸ Refactoring Costs / Avoidance ▸ Testing Plumbing instead of Business Value ▸ Additional Layers (BBD Cucumber) ▸ Alternatives Exist: ▸ Smoke Tests / Integration Tests ▸ Monitoring / Alerting ▸ What about TDD? ▸ Focus on ROI + delete Questionable Tests
  • 20.
  • 21.
  • 22. COMMON CODE BASES ▸ Internal Frameworks, ORM’s, Platforms, Testing Libs, Common-Libs, etc ▸ Costs: ▸ Learning Curves for Developers ▸ Dependency on Current developers ▸ Not writing actual business value! ▸ Maintenance Costs ▸ Multiple Repos / Artifactory / CI requirements complexities ▸ Alternatives: ▸ Embed in Application (first 3 times) ▸ Use 3rd Party (often OSS) solutions, which will almost always be better documented / supported
  • 23. GRADLE ▸ Benefits: ▸ Easier to Read (no XML), Less LOC ▸ Easier to Extend (instead of Bash scripts!) ▸ Significant Build Time Improvements! (X factor) ▸ Comes down to Political Capital
  • 24. MULTIPLE SOURCE CODE REPOSITORIES ▸ For Same Team and Same Deliverable ▸ Costs: ▸ Lack of Atomicity between commits ▸ CI/CD overhead ▸ Local Development costs ▸ Would would Jesus Google do ?
  • 25. MICROSERVICES ▸ Tackles challenges of Monoliths (especially large size ones) ▸ Costs (almost always ignored!) ▸ Performance, DevOps, Transactions, Versioning, Resource Costs, etc ▸ “You must be this tall to use” ▸ Alternatives Exist: ▸ Cookie Cutter Scaling (Easier Scaling!!) ▸ “Decouple” at Project Level ▸ Address fundamental issues first ! ▸ Monoliths are not EVIL! - Can scale and cleanly separate / decouple code ! ▸ Default to Pizza-Team Sized Services - “Right-Sized Services”
  • 26. KUBERNETES (CAAS) ▸ Comparing to IaaS or PaaS? ▸ Higher Level of Abstraction then IaaS ▸ Orchestration, OS Abstraction, Availability ▸ Lower Level of Abstraction then PaaS ▸ Networking, Buildpacks, Pods, Docker Files, etc ▸ Stick to the Highest Possible Level of Abstraction
  • 27. REACTIVE PROGRAMMING (WEBFLUX) ▸ “Non-blocking” stack to minimize thread usage and scale better (i.e. Performance Optimization) ▸ Costs ▸ Steep Learning Curve / Legibility / Testing ▸ Concurrency Performance Gains ▸ High Count (1000+) (↑) , Low Count (↓ ?) ▸ Limited Support (Database / FrontEnd) ▸ Positive MarketTrend ▸ Threads are NOT bad !! ▸ Consider the Trade-offs / you can mix and match (with Spring-MVC)
  • 29.
  • 30. BUZZWORD POT-POURRI ▸ MicroServices ▸ Reactive + Non-Blocking ▸ NoSQL + CQRS + Event Sourcing ▸ Scala + Akka ▸ A “Manifesto” for good measure
  • 31. LAGOM ▸ New Reactive Microservices Framework ▸ From Typesafe Lightbend ▸ Steep Learning Curve! ▸ Significant Risk + Cost ! ▸ Unproven buzzword’y benefits
  • 32. OTHER ITEMS OF CONTROVERSY ▸ Tabs vs Spaces ▸ EJBS’s ▸ IntelliJ vs Eclipse vs NetBeans ▸ Optionals ▸ Server Side vs Client Side (SPA) ▸ ReactJS vs Angular ▸ 10x Developers ▸ OOP vs Functional vs Procedural ▸ Branching ▸ CPU / Thread Optimization ▸ Immutable Types + “final” on everything ▸ Theory of Constraints ▸ …
  • 33. KEY POINTS ▸ Think Big Picture + Context ▸ .. instead of Tech X Sucks / is Bad / etc ▸ Rules are great for beginners (pick the right ones!) ▸ Focus on ROI ▸ Trade-offs / Opportunity Costs ▸ Fundamentals ▸ Maintenance Costs (minimize Snowflakes) ▸ Metrics (instead of assumptions) to drive non-standard choices ▸ What’s your Developer “Identity”? ▸ Technologies come and go! ▸ Default to Simplicity instead of Rube-Goldberg Machines
  • 35. DUNNING KRUGER EFFECT + IMPOSTER SYNDROME Actual Ability PerceivedAbility Dunning Kruger Effect / Expert Beginner Imposter Syndrome