SlideShare una empresa de Scribd logo
1 de 246
Descargar para leer sin conexión
A Journey Toward Clean
Code and Enjoyment
Impact and Logistics of
Software Craftsmanship on
True Business Agility
A Journey Toward Clean
Code and Enjoyment
Impact and Logistics of
Software Craftsmanship on
True Business Agility
https://www.linkedin.com/in/chrisholland
https://github.com/elchris
@chrisholland
What makes Software Not Fun?
Where does it hurt us?
Can we make it Fun?
TDD: Better Fuels Faster
Web App. Architectures
TDD: Better Fuels Faster
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
http://blog.cleancoder.com
Bad Code
(what could possibly go wrong?)
Code vs Fun
Taking Away Our Fun
❖ Inheriting Someone else’s code
❖ Having a hard time understanding how a system works
❖ Breaking old things when building new things
❖ Testing our work as much as we ought to
Code vs Agility
A Word about “Agility" …
A Word about “Agility" …
A Word about “Agility" …
We need to be more …
A Word about “Agility" …
We need to be more …
Agile!
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
MVC Frameworks
A Word about “Agility" …
Underlying Issue:
…
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
MVC Frameworks
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
MVC Frameworks
Underlying Issue:
…
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
MVC Frameworks
Underlying Issue:
…
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
MVC Frameworks
Underlying Issue:
…
A Word about “Agility" …
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
MVC Frameworks
Underlying Issue:
…
Bad Software !
A Word about “Agility” …
❖ https://martinfowler.com/bliki/FlaccidScrum.html
A Word about “Agility" …
- We are Agile !
A Word about “Agility" …
- We are Agile !
- You’re Not !
A Word about “Agility” …
❖ Bad Software eviscerates just about every benefit of
your “Agile Stack”.
Short-Lived Agility
New Features Released
Time
Technical Debt
(Bad Code)
Short-Lived Agility
New Features Released
Time
Technical Debt
(Bad Code)
Short-Lived Agility
New Features Released
Time
Technical Debt
(Bad Code)
New Features Released
Time
Short-Lived Agility
Technical Debt
(Bad Code)
New Features Released
Time
Short-Lived Agility
Technical Debt
(Bad Code)
Not
Agile
Short-Lived Agility
Business Value
Time
Short-Lived Agility
Business Value
Time
Bad Software starts
weighing you down
Short-Lived Agility
Business Value
Time
Fail to Pivot
Short-Lived Agility
Business Value
Time
Competition Takes Over
Your Competition has a Straw …
Competition
Your Competition has a Straw …
Competition
Your Competition has a Straw …
Competition
You
Bad Code vs Agility
http://bit.ly/future-programming
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Better Code: Enablers
Better Code: Enablers
TDD
Patterns
Clean Code
Better Code: Enablers
TDD
Patterns
Clean Code
Better Software
Better Code: Enablers
TDD
Patterns
Clean Code
Better Software
Better Code: TDD
❖ (We’ll come back to that)
Better Code: Enablers
TDD
Patterns
Clean Code
Better Software
Better Code: Clean
Code
http://bit.ly/
clean-code-book
Better Code: Enablers
TDD
Patterns
Clean Code
Better Software
Better Code: Patterns
❖ Most Languages Support Paradigms to varying degrees.
❖ Object-Oriented
❖ Procedural, Imperative
❖ Functional
Better Code: Patterns
❖ These paradigms are only as effective as our ability to
seek out and leverage … Patterns.
Better Code: Patterns
❖ Proper leverage of Patterns helps simplify complexity.
Better Code: Patterns
Programming Paradigms
Procedural, Imperative
Object-Oriented
Functional
Patterns
SOLID Principles
GoF Design Patterns
Enterprise
Application - Martin
Fowler
❖ OOP Patterns:
❖ designpatternsphp.readthedocs.io
❖ Functional Patterns:
❖ https://fsharpforfunandprofit.com/fppatterns/(Scott
Wlaschin)
❖ Streams in Java 8
❖ ƒP Use-Cases ( Uncle Bob )
❖ Intro to ƒP ( Anjana Vakil )
Better Code: Patterns
Web Apps: OOP Patterns
P1: Factory, Command, Repository, Data Mapper
P2: Strategy, Decorator, Adapter / Wrapper
P3: Builder
P0: Dependency Injection
Better Code: Enablers
TDD
Patterns
Clean Code
Better Software
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Flaccid OOP
Large System
Component
Component
Component
Large System
Component
Component
Component
Component
Component
Component
Large System
Component
Component
Component
Component
Component
Component Tight
Couplings
Large System
Component
Component
Component
Component
Component
Component
Component
Component
Component
Tight
Couplings
Large System
Component
Component
Component
Component
Component
Component
Component
Component
Component
Tight
Couplings
Change One Thing,
Break Everything
Flaccid OOP
❖ Indiscriminate use of OOP Constructs
❖ Random instantiation of Classes
❖ Unpredictable System Coupling
❖ Unpredictable System State
❖ Law of Demeter Violations (Past Meetup)
OOP Goals
OOP Goals
❖ Simple, Maintainable System
❖ Loosely-Coupled Components
❖ Consistent Dependency Graph
❖ Embracing Design Patterns
OOP Goals
❖ Simple, Maintainable System
❖ Loosely-Coupled Components
❖ Consistent Dependency Graph
❖ Embracing Design Patterns
Large System
Large System
Component
Large System
Component Component Component
Component Component Component
Large System
Component Component Component
Component Component Component
Loose
Couplings
Large System
Component Component Component
Component Component Component
Loose
Couplings
Change One Thing,
Break Nothing
Large System
Component Component Component
Component Component Component
Loose
Couplings
Change One Thing,
Break Nothing
Large System
Component Component Component
Component Component Component
Loose
Couplings
Change One Thing,
Break Nothing
Design Patterns FTW !
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Web Applications: Beyond MVC
MVC Sweet Spot
❖ Skinning your Database
❖ Each URI performs one CRUD Operation against
database.
MVC Limitations
❖ Most applications start out simple …
❖ … then get more complex
❖ … no real layer for Business Logic
Framework Coupling
Framework Coupling
Framework
Middleware
Framework
Persistence
Business
Framework De-Coupling
Business
Framework
Middleware
Framework
Persistence
More Layers
Beyond MVC: CSRVCED
Acceptance & Integration Tests
http://codeception.com
http://www.seleniumhq.org
è Tests should be lightweight
100% Unit-Test Coverage
Commands
Services
Repositories
Controllers
Entities
DTOs
Views
Interfaces
Interfaces
Beyond MVC: CSRVCED
Acceptance & Integration Tests
http://codeception.com
http://www.seleniumhq.org
è Tests should be lightweight
100% Unit-Test Coverage
Commands
Services
Repositories
Controllers
Entities
DTOs
Views
Interfaces
Interfaces
ORM ODM SQL NoSQL
Polyglot Persistence
Beyond MVC: CSRVCED
❖ Yellow Zone: “Irrelevant”
❖ Very thin: 1% of code-base. If that.
❖ Coupled to Transport: HTTP / HTML
❖ Coupled to Framework
Beyond MVC: CSRVCED
❖ Green Zone: “What Matters”
❖ 99%+ of code-base
❖ Transport-Agnostic
❖ Framework-Agnostic
Web App: Repositories
❖ Can be backed by any data store
❖ Swappable implementation as needs evolve:
❖ RDBMS -> NoSQL: Data Storage Scalability
❖ ORM -> Raw SQL: Increase Performance
Web App. Architectures
❖ Watch: http://bit.ly/clean-architecture-video
❖ Read: http://bit.ly/clean-architecture
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
TDD: Better Fuels Faster
Why do TDD?
Why TDD?
❖ Speed (more on that later)
Why TDD?
❖ Speed (more on that later)
❖ Embrace Change
Why TDD?
❖ Speed (more on that later)
❖ Embrace Change
❖ Requirements
❖ New Features
Why TDD?
❖ Speed (more on that later)
❖ Embrace Change
❖ Requirements
❖ New Features
❖ Constantly Improve Code
Improving Code
TDD
Patterns
Clean Code
Better Software
Improving Code
TDD
Patterns
Clean Code
Better Software
Improving Code
TDD
Patterns
Clean Code
Better Software
Improving Code
TDD
Patterns
Clean Code
Better Software
Improving Code
TDD
Patterns
Clean Code
Better Software
Improving Code
TDD
Patterns
Clean Code
Better Software
TDD vs Unit Tests
❖ After the Fact Testing: “Now I have to cover my code”
❖ Test-Driven Development: “I code to my assertions”
TDD: Web Applications Challenges
❖ Most TDD Tutorials focus on simple algorithmic
problems.
❖ And yet, Web Apps:
❖ Have several Architectural Layers
❖ (Should) Have many Classes
❖ Are heavily Data/IO Driven
TDD … Goals!
Web Apps TDD: Goals
❖ Get Satisfaction of Building Business Capabilities
❖ … Without leaving comfort of Test Harness
Web Apps TDD: Goals
Without TDD:
Where do we waste Time?
Wasting Time without TDD
❖ While Building Things
❖ While Testing Things
Web Apps: Time Wasted
❖ While Building Things:
❖ Set-up local DB
❖ Scaffold / bootstrap basic UI
❖ Write Code
❖ Use debugger to step thru code
❖ Use logging to trace behavior & debug issues
Web Apps: Time Wasted
❖ While Testing Things:
❖ Click UI to get application into given state
❖ Visually inspect database records to verify behavior
❖ Manually modify DB records to jump to state
❖ Break things as you build new things
Web Apps: Old Workflow
❖ All Activities marked in RED are throw-away activities.
❖ They are manual and repetitive
❖ … relevant only once
———————
coding
Always. Be. Coding.
Web Apps: Desired Workflow
❖ Coding Against Assertions:
❖ Write Failing Test
❖ Write Code to make the Test Pass
❖ Refactor
Web Apps: Desired Workflow
❖ All Activities marked in GREEN are foundational
activities.
❖ Permanently relevant
Web Apps TDD
❖ Work effectively across architectural boundaries
❖ Introduce meaningful Data into Tests …
❖ … While making meaningful assertions
How?
xUnit: Test Harness
xUnit: Test Harness
ORM
xUnit: Test Harness
ORM
in-memory
DB
xUnit: Test Harness
ORM
in-memory
DB
Unit Test
xUnit: Test Harness
ORM
in-memory
DB
Unit Test
Unit Test
xUnit: Test Harness
ORM
in-memory
DB
Unit Test
Unit Test
Unit Test
Web Apps TDD: Tooling
❖ xUnit
❖ ORM w/ Code-First Data Mapper Pattern
❖ In-Memory DB
❖ …
Web Apps TDD: PHP
❖ xUnit
❖ PHPUnit
❖ ORM w/ Code-First Data Mapper Pattern
❖ Doctrine ORM
❖ In-Memory DB
❖ SQLite
Web Apps TDD: Java
❖ xUnit
❖ jUnit
❖ ORM w/ Code-First Data Mapper Pattern
❖ Hibernate
❖ In-Memory DB
❖ HSQLDB
Web Apps TDD: .Net/C#
❖ xUnit
❖ NUnit
❖ ORM w/ Code-First Data Mapper Pattern
❖ Entity Framework or NHibernate
❖ In-Memory DB
❖ SQL CE
Web Apps TDD: Covenants
❖ Commit to TDD and enforce with:
❖ Tooling to ensure 100% coverage, at all times
❖ Peer code reviews to verify that all tests have
meaningful assertions
Web Apps TDD: Covenants
❖ You don’t want:
❖ Less than 100% coverage. TDD gives you that for free.
Going below 100% means someone isn’t doing TDD.
❖ Code that is 100% covered with meaningless
assertions. This also means someone isn’t doing TDD.
TDD Workflow
Decouple
Business Logic
from
Framework Stack
TDDing a Web App
Acceptance & Integration Tests
http://codeception.com
http://www.seleniumhq.org
è Tests should be lightweight
100% Unit-Test Coverage
Commands
Services
Repositories
Controllers
Entities
DTOs
Views
Interfaces
Interfaces
Coupled Workflow
Business Logic
Coupled Workflow
Controller
Business Logic
Coupled Workflow
Route
Controller
Business Logic
Coupled Workflow
UI
Route
Controller
Business Logic
Coupled Workflow
UI
Route
Controller
Business Logic
Migrations
Coupled Workflow
UI
Route
Controller
Business Logic
Schema
Migrations
Coupled Workflow
UI
Route
Controller
Business Logic
Schema
Migrations
Coupled Workflow
Intertwined
Concerns
UI
Route
Controller
Business Logic
Schema
Migrations
Coupled Workflow
Intertwined
Concerns
Less Productive TDD
UI
Route
Controller
Business Logic
Schema
Migrations
De-Coupled Workflow
Business Logic
De-Coupled Workflow
Repos ServicesEntities
UI
Route
ControllerSchema
Migrations
Business Logic
De-Coupled Workflow
Repos ServicesEntities
TDD
UI
Route
ControllerSchema
Migrations
Business Logic
De-Coupled Workflow
Repos ServicesEntities
TDD
UI
Route
ControllerSchema
Migrations
TDD in
Rapid Iterations
Business Logic
De-Coupled Workflow
Repos ServicesEntities
TDD
UI
Route
ControllerSchema
Migrations
ORM
TDD in
Rapid Iterations
Business Logic
De-Coupled Workflow
Repos ServicesEntities
TDD
UI
Route
ControllerSchema
Migrations
ORM
Auto-Generated
Migrations
from
Entity Graph
TDD in
Rapid Iterations
Business Logic
De-Coupled Workflow
Repos ServicesEntities
TDD
UI
Route
ControllerSchema
Migrations
ORM
Auto-Generated
Migrations
from
Entity Graph
TDD in
Rapid Iterations
Business Logic
De-Coupled Workflow
Repos ServicesEntities
TDD
UI
Route
ControllerSchema
Migrations
ORM
Manual
Testing
Auto-Generated
Migrations
from
Entity Graph
TDD in
Rapid Iterations
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
Build UI
Concurrently
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
Build UI
Concurrently
Map URI Routes to Service Methods
Build UI
Concurrently
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
Map URI Routes to Service Methods
Generate SQL Migration from Entity Graph
Build UI
Concurrently
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
Map URI Routes to Service Methods
Generate SQL Migration from Entity Graph
Run SQL Migrations against Local RDBMS
Build UI
Concurrently
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
Map URI Routes to Service Methods
Generate SQL Migration from Entity Graph
Run SQL Migrations against Local RDBMS
Build UI
Concurrently
Test Application thru the UI
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo(s)
TDD Service
TDD
Repo
TDD Service
TDD
Repo
TDD Service
TDD
Repo
Map URI Routes to Service Methods
Generate SQL Migration from Entity Graph
Run SQL Migrations against Local RDBMS
Build UI
Concurrently
Test Application thru the UI
Zone 1
Zone 2
TDD Service
TDD
Repo
TDD Service
TDD
Repo
TDD Service
TDD
Repo
Zone 1
Map URI Routes to Service Methods
Generate SQL Migration from Entity Graph
Run SQL Migrations against Local RDBMS
Build UI
Concurrently
Test Application thru the UI
Zone 2
TDD Service
TDD
Repo
TDD Service
TDD
Repo
TDD Service
TDD
Repo
Zone 1
Map URI Routes to Service Methods
Generate SQL Migration from Entity Graph
Run SQL Migrations against Local RDBMS
Build UI
Concurrently
Test Application thru the UI
Zone 2
Decoupled
TDD Workflow Advantages
❖ Implement Most Business Logic in Zone 1
❖ Without having to depend on Zone 2
❖ Rapid, Localized TDD iterations in Zone 1
Example: Ride-Hailing
Making a Repo
Web Apps TDD: Base Test
Making a Service
Finished Service Test & Impl.
Finished Repo
User Entity
Role Entity
Next Steps
Next Steps
❖ Generate Migration SQL File with “doctrine diff”
❖ Map Controller / Routes to Service Methods
❖ Deploy Code
❖ Run SQL Migrations
Get the Code
Web Apps TDD: Code
❖ http://bit.ly/tdd-kata-php-video <— Watch Video
❖ See demo-run-4 branch <— Source Code Link
More Reading
TDD: More Reading
❖ TDD Harms App Architecture (Uncle Bob)
❖ Giving-Up on TDD (Uncle Bob)
❖ http://xunitpatterns.com ( Gerard Meszaros )
More Reading
❖ http://bit.ly/refactoring-book ( Martin Fowler )
❖ http://bit.ly/legacy-code-book ( Michael Feathers )
Benefits
Web Apps TDD: Benefits
❖ Keep UI Workflows Decoupled …
❖ … from solving Business Problems
Web Apps TDD: Benefits
❖ Get in the Zone, Stay in it.
Web Apps TDD: Benefits
❖ Easy to get back into the Zone after interruption
❖ Last Test you wrote is your “anchor”
Web Apps TDD: Benefits
❖ No need to worry about “Optimal Design”
❖ Code can always be improved.
❖ Because covered.
Web Apps TDD: Benefits
❖ No need to worry about “Optimal Design”
❖ Code can always be improved.
❖ Because covered.
Implement First, Optimize Later
Web Apps TDD: Benefits
❖ 100% code coverage “For Free”
❖ Sustained Velocity => Agility
❖ Unit Tests are the Living Documentation of our App
Do TDD When …
When to do TDD
❖ When Prototyping!
❖ … Ship faster with TDD
❖ … Embrace constant change
❖ Ship constantly
When to do TDD
❖ When Building Complex Things
❖ When Building Simpler Things
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Bad Code vs Agility
Better Code: Enablers
Empowering OOP
Web App. Architectures
TDD: Better Fuels Faster
Takeaways
Better … Faster
Better and Faster
Better Software
Fuels Agility
Better Software
Means more Fun
Better Software
Keeps you in Business
Do Less This
Do More This
TDD
Patterns
Clean Code
Better Software
Great Software & Agile Stack
Re-inventing Project
Management
&
Task-Planning
Scrum / Kanban
Scripting Integration
“Integration Hell”
CI / CD
Build MVC
Applications
Faster
MVC Frameworks
Better
Software
Sustained Agility
New Features Released
Time
Business Value
Questions?
Questions?
https://www.linkedin.com/in/chrisholland
https://github.com/elchris @chrisholland
Questions?
https://www.linkedin.com/in/chrisholland
I’m Hiring !
https://github.com/elchris @chrisholland
Questions?
https://www.linkedin.com/in/chrisholland
I’m Hiring !
http://bit.ly/software-craftsman-wanted
https://github.com/elchris @chrisholland

Más contenido relacionado

La actualidad más candente

TDD with BDD in PHP and Symfony
TDD with BDD in PHP and SymfonyTDD with BDD in PHP and Symfony
TDD with BDD in PHP and SymfonyKamil Adryjanek
 
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017   ember.js - escape the javascript fatigueNode.js meetup 17.05.2017   ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigueTobias Braner
 
A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...
A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...
A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...Codemotion
 
The Future Of Web Frameworks
The Future Of Web FrameworksThe Future Of Web Frameworks
The Future Of Web FrameworksMatt Raible
 
Web Frameworks of the Future
Web Frameworks of the FutureWeb Frameworks of the Future
Web Frameworks of the Futureelliando dias
 
"Our BDDs are broken!" Lean Agile Exchange 2020
"Our BDDs are broken!"   Lean Agile Exchange 2020"Our BDDs are broken!"   Lean Agile Exchange 2020
"Our BDDs are broken!" Lean Agile Exchange 2020Seb Rose
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applicationshchen1
 
Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeOdessaJS Conf
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersEtiene Dalcol
 
Attacking and Defending Mobile Applications
Attacking and Defending Mobile ApplicationsAttacking and Defending Mobile Applications
Attacking and Defending Mobile ApplicationsJerod Brennen
 
Usability in the GeoWeb
Usability in the GeoWebUsability in the GeoWeb
Usability in the GeoWebDave Bouwman
 
10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!Caleb Jenkins
 
Serverless observability - a hero's perspective
Serverless observability - a hero's perspectiveServerless observability - a hero's perspective
Serverless observability - a hero's perspectiveYan Cui
 
Scaling Scrum with UX in the Enterprise
Scaling Scrum with UX in the EnterpriseScaling Scrum with UX in the Enterprise
Scaling Scrum with UX in the EnterpriseCaleb Jenkins
 
API Description Languages
API Description LanguagesAPI Description Languages
API Description LanguagesAkana
 
Web Standards And Protocols
Web Standards And ProtocolsWeb Standards And Protocols
Web Standards And ProtocolsSteven Cahill
 
How to write good quality code
How to write good quality codeHow to write good quality code
How to write good quality codeHayden Bleasel
 
Advanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms toolsAdvanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms toolsChris Love
 
Morden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web AppsMorden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web AppsCaesar Chi
 

La actualidad más candente (20)

TDD with BDD in PHP and Symfony
TDD with BDD in PHP and SymfonyTDD with BDD in PHP and Symfony
TDD with BDD in PHP and Symfony
 
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017   ember.js - escape the javascript fatigueNode.js meetup 17.05.2017   ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
 
A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...
A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...
A. De Biase/C. Quatrini/M. Barsocchi - API Release Process: how to make peopl...
 
The Future Of Web Frameworks
The Future Of Web FrameworksThe Future Of Web Frameworks
The Future Of Web Frameworks
 
Web Frameworks of the Future
Web Frameworks of the FutureWeb Frameworks of the Future
Web Frameworks of the Future
 
"Our BDDs are broken!" Lean Agile Exchange 2020
"Our BDDs are broken!"   Lean Agile Exchange 2020"Our BDDs are broken!"   Lean Agile Exchange 2020
"Our BDDs are broken!" Lean Agile Exchange 2020
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on native
 
20120802 timisoara
20120802 timisoara20120802 timisoara
20120802 timisoara
 
What I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginnersWhat I learned teaching programming to 150 beginners
What I learned teaching programming to 150 beginners
 
Attacking and Defending Mobile Applications
Attacking and Defending Mobile ApplicationsAttacking and Defending Mobile Applications
Attacking and Defending Mobile Applications
 
Usability in the GeoWeb
Usability in the GeoWebUsability in the GeoWeb
Usability in the GeoWeb
 
10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!
 
Serverless observability - a hero's perspective
Serverless observability - a hero's perspectiveServerless observability - a hero's perspective
Serverless observability - a hero's perspective
 
Scaling Scrum with UX in the Enterprise
Scaling Scrum with UX in the EnterpriseScaling Scrum with UX in the Enterprise
Scaling Scrum with UX in the Enterprise
 
API Description Languages
API Description LanguagesAPI Description Languages
API Description Languages
 
Web Standards And Protocols
Web Standards And ProtocolsWeb Standards And Protocols
Web Standards And Protocols
 
How to write good quality code
How to write good quality codeHow to write good quality code
How to write good quality code
 
Advanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms toolsAdvanced front end debugging with ms edge and ms tools
Advanced front end debugging with ms edge and ms tools
 
Morden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web AppsMorden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web Apps
 

Similar a Better and Faster: A Journey Toward Clean Code and Enjoyment

Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...GreeceJS
 
CQRS recipes or how to cook your architecture
CQRS recipes or how to cook your architectureCQRS recipes or how to cook your architecture
CQRS recipes or how to cook your architectureThomas Jaskula
 
Accelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and MicroservicesAccelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and MicroservicesAmazon Web Services
 
What Web Framework To Use?
What Web Framework To Use?What Web Framework To Use?
What Web Framework To Use?Kasra Khosravi
 
Web Development Presentation
Web Development PresentationWeb Development Presentation
Web Development PresentationTurnToTech
 
Node.js and the MEAN Stack Building Full-Stack Web Applications.pdf
Node.js and the MEAN Stack Building Full-Stack Web Applications.pdfNode.js and the MEAN Stack Building Full-Stack Web Applications.pdf
Node.js and the MEAN Stack Building Full-Stack Web Applications.pdflubnayasminsebl
 
AWS and Dynatrace: Moving your Cloud Strategy to the Next Level
AWS and Dynatrace: Moving your Cloud Strategy to the Next LevelAWS and Dynatrace: Moving your Cloud Strategy to the Next Level
AWS and Dynatrace: Moving your Cloud Strategy to the Next LevelDynatrace
 
Web Development Today
Web Development TodayWeb Development Today
Web Development Todaybretticus
 
Node PDX: Intro to Sails.js
Node PDX: Intro to Sails.jsNode PDX: Intro to Sails.js
Node PDX: Intro to Sails.jsMike McNeil
 
2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with BlackfireMarko Mitranić
 
Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming languageMarco Cedaro
 
2010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week12010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week1Wolfram Arnold
 
Subverting the monolith!
Subverting the monolith!Subverting the monolith!
Subverting the monolith!Sophia Russell
 
Is Serverless The New Swiss Cheese? - AWS Seattle User Group
Is Serverless The New Swiss Cheese? - AWS Seattle User GroupIs Serverless The New Swiss Cheese? - AWS Seattle User Group
Is Serverless The New Swiss Cheese? - AWS Seattle User GroupChase Douglas
 
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...Simplilearn
 
Starting Your DevOps Journey – Practical Tips for Ops
Starting Your DevOps Journey – Practical Tips for OpsStarting Your DevOps Journey – Practical Tips for Ops
Starting Your DevOps Journey – Practical Tips for OpsDynatrace
 
State of Infrastructure as Code - AutomaCon 2016
State of Infrastructure as Code - AutomaCon 2016State of Infrastructure as Code - AutomaCon 2016
State of Infrastructure as Code - AutomaCon 2016Amazon Web Services
 
Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusJarrod Overson
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoChristian Heilmann
 

Similar a Better and Faster: A Journey Toward Clean Code and Enjoyment (20)

Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
 
CQRS recipes or how to cook your architecture
CQRS recipes or how to cook your architectureCQRS recipes or how to cook your architecture
CQRS recipes or how to cook your architecture
 
Accelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and MicroservicesAccelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and Microservices
 
What Web Framework To Use?
What Web Framework To Use?What Web Framework To Use?
What Web Framework To Use?
 
Web Development Presentation
Web Development PresentationWeb Development Presentation
Web Development Presentation
 
Node.js and the MEAN Stack Building Full-Stack Web Applications.pdf
Node.js and the MEAN Stack Building Full-Stack Web Applications.pdfNode.js and the MEAN Stack Building Full-Stack Web Applications.pdf
Node.js and the MEAN Stack Building Full-Stack Web Applications.pdf
 
AWS and Dynatrace: Moving your Cloud Strategy to the Next Level
AWS and Dynatrace: Moving your Cloud Strategy to the Next LevelAWS and Dynatrace: Moving your Cloud Strategy to the Next Level
AWS and Dynatrace: Moving your Cloud Strategy to the Next Level
 
Web Development Today
Web Development TodayWeb Development Today
Web Development Today
 
Node PDX: Intro to Sails.js
Node PDX: Intro to Sails.jsNode PDX: Intro to Sails.js
Node PDX: Intro to Sails.js
 
2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire2019 StartIT - Boosting your performance with Blackfire
2019 StartIT - Boosting your performance with Blackfire
 
Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming language
 
2010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week12010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week1
 
Subverting the monolith!
Subverting the monolith!Subverting the monolith!
Subverting the monolith!
 
Is Serverless The New Swiss Cheese? - AWS Seattle User Group
Is Serverless The New Swiss Cheese? - AWS Seattle User GroupIs Serverless The New Swiss Cheese? - AWS Seattle User Group
Is Serverless The New Swiss Cheese? - AWS Seattle User Group
 
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
 
Starting Your DevOps Journey – Practical Tips for Ops
Starting Your DevOps Journey – Practical Tips for OpsStarting Your DevOps Journey – Practical Tips for Ops
Starting Your DevOps Journey – Practical Tips for Ops
 
Modern Web Applications
Modern Web ApplicationsModern Web Applications
Modern Web Applications
 
State of Infrastructure as Code - AutomaCon 2016
State of Infrastructure as Code - AutomaCon 2016State of Infrastructure as Code - AutomaCon 2016
State of Infrastructure as Code - AutomaCon 2016
 
Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San Francisco
 

Último

WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
+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
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benonimasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
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 TransformationWSO2
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 

Último (20)

WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
+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...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
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
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 

Better and Faster: A Journey Toward Clean Code and Enjoyment