SlideShare a Scribd company logo
1 of 100
Stop wasting time through clean code #phpnw11 Volker Dusch / @__edorian
So stop wasting time!Why are we here? 2 Introduction
Why are we hereto talk code and coding! 3 Introduction
});});}); 4 Introduction
Me? 5 Introduction
Volker Dusch@__edorian 6 Introduction
PHP for around 9 years  7 Introduction
I’m currently into TDD, CI, Clean Code and shipping 8 Introduction …amongst other stuff
9 Introduction Just go and buy those *Book covers used under fair use
            Get in touchTwitter: @__edorianXing / G+: Volker DuschStackoverflow:(visit us at http://chat.stackoverflow.com/rooms/11/phpIRC: edorianMail: php@wallbash.com 10 Introduction
Ask questions at any time! 11 Introduction First question gets an elePHPant Another question gets one too!
Why try to save time? 12 Motivation
Because we are professionals 13 Motivation
Even so our field is quite young 14 Motivation
Do you know how expensive it is to have you people around? 15 Motivation
16 Motivation German numbers, ymmv €, £, Approx.. values You get around 50k a year 50.000 / Year Adding non-wage labor costs of around 60% 80.000 / Year Office space, water, hardware, coffee, plants, cleaning, drugs, travels, training 100.000 / Year 250 Days without weekends and holidays and your 30 holidays => 220 days 455 / Day When working 8 hours a day 55 Bucks per Hour! Your employer expects you to contribute  over 100.000 Bucks in business value per year!
Wait why are we here again? 17 Motivation
To get things done, fast!Delivering is fun! 18 Motivation
Coding! 19 Motivation Not: ,[object Object]
Scrum,
Kanban,
Organizational structures
Sane hardware
Sane working environments
Tools,[object Object]
21 Time! It matters! Not programming Changing Planning Thinking Creating Growing/Building Asking Typing Reviewing Reading
We spent time: 22 Time! It matters! ,[object Object]
Reading
Processing
Writing
Going to 10
Actual typing? Not that much,[object Object]
Goals: 24 Time! It matters! ,[object Object],The ability to change your software quickly ,[object Object],The ability to understand your software quickly ,[object Object],[object Object]
Why is our code hard to understand? 26 Clean code? ,[object Object]
Unclear requirements?
Customers?
Schedules?
Requirement changes?,[object Object]
Rushing out stuff to make people happy“Well I’d go back and fix it but I can’t because $x”Is that comfortable? 28 Clean Code?
What we need: 29 Clean Code? A way to WRITE to our codebase so that we are able to keep our READ costs low! ,[object Object]
If we don‘t fix stuff we won‘t have a readable, maintainable codebase,[object Object]
Pragmatic? 31 Pragmatic? ,[object Object]
Simple
Just get it done as fast as possible
Nobody cares how you do it
Micromanagement?,[object Object]
If you can go faster when writing tests it is your responsibility to do that!
When not writing tests means “getting it done slower” nobody is asking you to do it!,[object Object]
This is not a TDD session 34 TDD! It saves kittens! A small TDD checklist: ,[object Object]
Just do it. It’s not magic, don’t fear doing it!
Practice before you do it at work!
Tools? You don‘t need tools to get started!
watch –n1 'phpunit' and ¼ of a screen is ALL you need!,[object Object]
Your tests should run REALLY fast
If you can‘t do that now use --filter
„You“ means everyone in your team!,[object Object]
You need to practice
It‘s just like any other tool and concept
Actually – Unit testing is really easy…
Writing testable code can be hard and NEEDS practice!,[object Object]
What to focus on?Is there anything we can base our decisions on?  38 Enough! Code! Now!
39 I <2 off by one errors "There are only two hard problems in Computer Science: cache invalidation, naming things, and off-by-one errors.“ - Phil Karlton
40 Naming things!
We name everythingWe might want to get that right 41 Naming matters
The purpose of a name is to reveal intent 42 Naming matters
A good name tells you everything you need to know! 43 Examples! class User { 	public function getId() {…} 	public function getName() {…}     /** Calculate Body-Mass-Index @link … */ 	public function getBMI() {…}    /** @param float $kg Weight in Kilogramm */ 	public function setWeight($kg) {…}
You shouldn’t need comments 44 Code! Finally! class User { 	public function getUserId() {…} 	public function getFirst/Last/DisplayName() {…}     /** @link … */ 	public function getBodyMassIndex() {…}    /** @param float $kilogramm */ 	public function setWeight($kilogramm) {…}
Names already arecompliable documentation 45 Naming matters
Another example 46 Code! class Calendar { 	public function getMonth($shortened = false) {…} } class Calendar { 	public function getMonthNames() {…} 	public function getShortendMonthNames() {…} }
Proper naming is important and easily neglectable 47 Names matter! A lot! ,[object Object]
They enable us to understand what‘s up
Misleading names can make it nearly impossible to navigate in a codebase,[object Object]
Before we startnaming things 49 Let’s go!
50 $pszError = &“E_FATAL“; Hungarian Notation? $aArray; $sString; $fFloat; $cCount; interface IUser {} class CUser {} ,[object Object]
If you have long methods you might be interested in types 100 lines later
But that isn‘t the issue we want to adress,[object Object]
Classes
Functions
Variables,[object Object]
Namespaces gave us the ability to get pretty class names
“User” vs“Framework_Util_Stuff_Foo_Auth_User”,[object Object]
Is that a good idea?
Harder to change folder structure
Duplicate information
Just do it anyways. It’s the expected layout
It also pushes you to create modules!,[object Object]
Using generic names throws that away!
ApplicationManager, FrameworkDataInformationProvider, UtilityDataProcessor,[object Object]
Single responsibility principle!
There should be only one reason to change a class,[object Object],[object Object]
By always asking if stuff fits we can ‘discover’ new classes in our applications
EmailAttachment, ImageEmailAttachment?,[object Object]
You depend on way to much other stuff
Usually tightly coupled
You can extend from those classes and chances are you can’t swap out ether
You don’t get nice interfaces as well,[object Object]
Composite? 60 Another logger interface interface Logger {     public function log($logMessage);     public function setOutputFormat($format);     public function activate();     public function deactivate();     public function flush(); public function setIncludeTimestamp($format);     public function addLogger(Logger $logger); }
All those rules! I want to get things done! 61 Rule 1: Segmentation fault ,[object Object]
They exist to act as early warning signs
Not running into trouble two hours later can save an amazing amount of time,[object Object]

More Related Content

What's hot

SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principles
Sergey Karpushin
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
Theo Jungeblut
 
Coding standards for java
Coding standards for javaCoding standards for java
Coding standards for java
maheshm1206
 

What's hot (20)

C# conventions & good practices
C# conventions & good practicesC# conventions & good practices
C# conventions & good practices
 
Clean code
Clean codeClean code
Clean code
 
Coding standard
Coding standardCoding standard
Coding standard
 
Clean Code Principles
Clean Code PrinciplesClean Code Principles
Clean Code Principles
 
How To Become A Good C# Programmer
How To Become A Good C# ProgrammerHow To Become A Good C# Programmer
How To Become A Good C# Programmer
 
Writing clean code in C# and .NET
Writing clean code in C# and .NETWriting clean code in C# and .NET
Writing clean code in C# and .NET
 
Clean Code 2
Clean Code 2Clean Code 2
Clean Code 2
 
Clean code & design patterns
Clean code & design patternsClean code & design patterns
Clean code & design patterns
 
Understanding Mocks
Understanding MocksUnderstanding Mocks
Understanding Mocks
 
Clean Code
Clean CodeClean Code
Clean Code
 
Tools for the Toolmakers
Tools for the ToolmakersTools for the Toolmakers
Tools for the Toolmakers
 
Coding standard and coding guideline
Coding standard and coding guidelineCoding standard and coding guideline
Coding standard and coding guideline
 
Advanced Object-Oriented/SOLID Principles
Advanced Object-Oriented/SOLID PrinciplesAdvanced Object-Oriented/SOLID Principles
Advanced Object-Oriented/SOLID Principles
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principles
 
Coding Best Practices
Coding Best PracticesCoding Best Practices
Coding Best Practices
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Java & J2EE Coding Conventions
Java & J2EE Coding ConventionsJava & J2EE Coding Conventions
Java & J2EE Coding Conventions
 
Coding standard
Coding standardCoding standard
Coding standard
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
 
Coding standards for java
Coding standards for javaCoding standards for java
Coding standards for java
 

Viewers also liked

Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
Theo Jungeblut
 
Clean Code Part I - Design Patterns at SoCal Code Camp
Clean Code Part I - Design Patterns at SoCal Code CampClean Code Part I - Design Patterns at SoCal Code Camp
Clean Code Part I - Design Patterns at SoCal Code Camp
Theo Jungeblut
 
Accidentally Manager – A Survival Guide for First-Time Engineering Managers
Accidentally Manager – A Survival Guide for First-Time Engineering ManagersAccidentally Manager – A Survival Guide for First-Time Engineering Managers
Accidentally Manager – A Survival Guide for First-Time Engineering Managers
Theo Jungeblut
 
Clean Code III - Software Craftsmanship
Clean Code III - Software CraftsmanshipClean Code III - Software Craftsmanship
Clean Code III - Software Craftsmanship
Theo Jungeblut
 
Powerpoint presentation
Powerpoint presentationPowerpoint presentation
Powerpoint presentation
mcilvennajm
 

Viewers also liked (20)

Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my time
 
Clean code
Clean codeClean code
Clean code
 
Do They Really Smell Bad? A Study on Developers' Perception of Bad Code Smells
Do They Really Smell Bad? A Study on Developers' Perception of Bad Code SmellsDo They Really Smell Bad? A Study on Developers' Perception of Bad Code Smells
Do They Really Smell Bad? A Study on Developers' Perception of Bad Code Smells
 
“Writing code that lasts” … or writing code you won’t hate tomorrow.
“Writing code that lasts” … or writing code you won’t hate tomorrow.“Writing code that lasts” … or writing code you won’t hate tomorrow.
“Writing code that lasts” … or writing code you won’t hate tomorrow.
 
Clean code
Clean codeClean code
Clean code
 
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
 
Clean Code Part I - Design Patterns at SoCal Code Camp
Clean Code Part I - Design Patterns at SoCal Code CampClean Code Part I - Design Patterns at SoCal Code Camp
Clean Code Part I - Design Patterns at SoCal Code Camp
 
Accidentally Manager – A Survival Guide for First-Time Engineering Managers
Accidentally Manager – A Survival Guide for First-Time Engineering ManagersAccidentally Manager – A Survival Guide for First-Time Engineering Managers
Accidentally Manager – A Survival Guide for First-Time Engineering Managers
 
Clean Code III - Software Craftsmanship
Clean Code III - Software CraftsmanshipClean Code III - Software Craftsmanship
Clean Code III - Software Craftsmanship
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Clean code and the clean coders
Clean code and the clean codersClean code and the clean coders
Clean code and the clean coders
 
Introduction Professional Scrum Developer for Java
Introduction Professional Scrum Developer for JavaIntroduction Professional Scrum Developer for Java
Introduction Professional Scrum Developer for Java
 
Clean Code
Clean CodeClean Code
Clean Code
 
From dev to ops and beyond - getting it done
From dev to ops and beyond - getting it doneFrom dev to ops and beyond - getting it done
From dev to ops and beyond - getting it done
 
Gracet
GracetGracet
Gracet
 
Mit pune e prospectus
Mit pune e prospectusMit pune e prospectus
Mit pune e prospectus
 
Chloecollins
ChloecollinsChloecollins
Chloecollins
 
Powerpoint presentation
Powerpoint presentationPowerpoint presentation
Powerpoint presentation
 
Expotacuaral09
Expotacuaral09Expotacuaral09
Expotacuaral09
 

Similar to Stop wasting-time-by-applying-clean-code-principles

You shouldneverdo
You shouldneverdoYou shouldneverdo
You shouldneverdo
daniil3
 
Clean code, Feb 2012
Clean code, Feb 2012Clean code, Feb 2012
Clean code, Feb 2012
cobyst
 
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
Antonio de la Torre Fernández
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
Mike Harris
 
How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
Mike Harris
 

Similar to Stop wasting-time-by-applying-clean-code-principles (20)

You shouldneverdo
You shouldneverdoYou shouldneverdo
You shouldneverdo
 
Clean code, Feb 2012
Clean code, Feb 2012Clean code, Feb 2012
Clean code, Feb 2012
 
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Code
 
How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
 
Your Own Metric System
Your Own Metric SystemYour Own Metric System
Your Own Metric System
 
Object Oriented Apologetics
Object Oriented ApologeticsObject Oriented Apologetics
Object Oriented Apologetics
 
Refactoring 2 The Max
Refactoring 2 The MaxRefactoring 2 The Max
Refactoring 2 The Max
 
TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019TDD and Simple Design Workshop - Session 1 - March 2019
TDD and Simple Design Workshop - Session 1 - March 2019
 
Refactoring, 2nd Edition
Refactoring, 2nd EditionRefactoring, 2nd Edition
Refactoring, 2nd Edition
 
NANO266 - Lecture 9 - Tools of the Modeling Trade
NANO266 - Lecture 9 - Tools of the Modeling TradeNANO266 - Lecture 9 - Tools of the Modeling Trade
NANO266 - Lecture 9 - Tools of the Modeling Trade
 
Code Quality Makes Your Job Easier
Code Quality Makes Your Job EasierCode Quality Makes Your Job Easier
Code Quality Makes Your Job Easier
 
Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1
 
The Art of Clean code
The Art of Clean codeThe Art of Clean code
The Art of Clean code
 
Femmengeeniring_Kateryna Mishchenko.pdf
Femmengeeniring_Kateryna Mishchenko.pdfFemmengeeniring_Kateryna Mishchenko.pdf
Femmengeeniring_Kateryna Mishchenko.pdf
 
New Ideas for Old Code - Greach
New Ideas for Old Code - GreachNew Ideas for Old Code - Greach
New Ideas for Old Code - Greach
 
Java basics
Java basicsJava basics
Java basics
 
Code Retreat
Code RetreatCode Retreat
Code Retreat
 
Coding Checkpoints
Coding CheckpointsCoding Checkpoints
Coding Checkpoints
 

More from Edorian (11)

Your (coding) standards matter
Your (coding) standards matterYour (coding) standards matter
Your (coding) standards matter
 
Nginx - The webserver you might actually like
Nginx - The webserver you might actually likeNginx - The webserver you might actually like
Nginx - The webserver you might actually like
 
Code review in practice
Code review in practiceCode review in practice
Code review in practice
 
PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best Practices
 
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlinNginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
 
Clean code is not the goal - working software is
Clean code is not the goal - working software isClean code is not the goal - working software is
Clean code is not the goal - working software is
 
The state of PHPUnit
The state of PHPUnitThe state of PHPUnit
The state of PHPUnit
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnit
 
Nginx The webserver you might actually like
Nginx   The webserver you might actually likeNginx   The webserver you might actually like
Nginx The webserver you might actually like
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnit
 
php unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my timephp unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my time
 

Recently uploaded

TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
FIDO Alliance
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
FIDO Alliance
 

Recently uploaded (20)

JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Top 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTop 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development Companies
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch Tuesday
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate Guide
 
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
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
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!
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overview
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - Questionnaire
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 

Stop wasting-time-by-applying-clean-code-principles