SlideShare a Scribd company logo
Common sense
driven development
Bozhidar Bozhanov
Vanity slide
http://techblog.bozho.net
@bozhobg
Senior Software Engineer @ TomTom
It’s a maze
TDD, BDD
Domain-driven design, Design-driven
development
SOA, Microservices
MQs, ESBs, rules engines, data processing
engines
...and software is still crap
“because writing software is hard”, we soothe
ourselves
Some real methodologies
Hype driven development (Big Data in the
Cloud, yeah)
Demo driven development
Copy/paste driven development
Denial driven development (Not Invented
Here syndrome)
Common sense
Common sense gives you
less bugs
maintainability
extensibility
scalability
eternal life
Applying common sense
No definition for common sense
...so we’ll define it by counter-examples
Let’s make an API
...that we never write against
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(...);
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new
StreamResult(writer));
String result = writer.toString();
default use-case(s)
Let’s use raw JDBC
easy to setup
...and you’ll eventually build a feature-poor,
buggy and time-consuming object mapper.
you are probably using ORMs wrong
Let’s use java.util.Date
...instead of joda-time, java.time
or let it creep from other libraries
java.util.Date is mutable, not timezone-aware, with a
bad, deprecated api. Bottom line: it’s bad
extra effort for: hibernate, json/xml
serialization
Let’s homegrow a
framework
NIH (Not Invented Here) syndrome
“NIH's emphasis is on ignoring, boycotting, or
otherwise refusing to acknowledge solutions by
others.”
Our web framework, our DI, our ORM, our
build tools.
...what could go wrong?
Let’s not use latest versions
Java 8 is “too new” #not
Latest JavaEE/Spring is probably still buggy
We don’t have time to learn the new things
We have a “standard infrastructure”
… and other bullshit
critical security issues, fixed bugs
regularly upgrade
Let’s not support safe-and-refresh
...because waiting for 3 minutes to see
changes is cool
you can check facebook
JRebel is not the only option
HotSwap in debug mode
Process
Let’s skip code reviews
we don’t have time
we are really good, we promise
someone may get offended
...because I suggested to rename a variable
Let’s not write tests
we don’t have time
but we do have time to fix recurring bugs
we are really good, we promise
the code is simple and doesn’t need testing
yeah, right
Common Sense Driven Development
Let’s make it work just for the demo
...and never actually deliver working features
it’s fine to show incomplete features
it’s not fine to write crap in the codebase just for a
demo to work
Let’s allow management decisions to
influence software design
because non-technical managers know better:
which database to use
what frameworks to use
how to structure the deployment
that 89% coverage is not enough
Architecture
(source: MSDN.com)
Let’s use SOAP
...for no apparent reason
...where simple RESTful services will do
...and we don’t actually need web services
Let’s use an ESB
...because I heard it’s cool
...even though we have to integrate just 2
systems, both of which are under our control
it won’t break, I promise.
Let’s use an MQ
“message-driven” - decoupling, throughput,
fault-tolerance, distributed processing
right… do you really need these?
what’s the overhead of managing an MQ?
async processing without MQ, in your JVM
there are legitimate use-cases. But fewer than
you think.
hardware is cheap, unreadable code isn’t
Let’s use application-level state
instance fields with data
non-cache (non-dismissable) information
well, maybe you don’t want to scale out
Let’s split the system
...and make separately deployable
submodules communicate with web-services
with us as the only user
...of our relatively small application
monolithic applications work fine
splitting, microservices - prove if necessary
(by Martin Fowler)
Let’s [..]. How about...
So...
That’s what commons sense isn’t.
But there were contradictions...
like “reuse existing solutions” vs “you probably
don’t need X”
or “don’t overdesign in advance” vs “design
good APIs”
This is where you apply common sense to
choose what fits your case :)
Obvious?
Yes, but every project has many of the above.
Common sense is not a set of rules or a set of
slides.
Based on...
http://techblog.bozho.net/development-methodologies/
http://techblog.bozho.net/you-probably-dont-need-a-message-queue/
http://techblog.bozho.net/the-default-use-case/
http://techblog.bozho.net/orm-haters-dont-get-it/
http://techblog.bozho.net/do-it-either-way-well-refactor-it-later/
http://techblog.bozho.net/kiss-my-yagni/
http://techblog.bozho.net/two-types-of-deployment-of-subsystems/
http://techblog.bozho.net/keep-as-much-stuff-as-possible-in-the-application-itself/
http://techblog.bozho.net/state-does-not-belong-in-the-code/
http://techblog.bozho.net/save-and-refresh-with-java-web-projects/
http://martinfowler.com/bliki/MicroservicePremium.html
Questions?

More Related Content

PPTX
AngularJS UTOSC
PPTX
Creating Tomorrow’s Web Applications Using Today’s Technologies
PPTX
AngularJS vs Backbone.js Smackdown
PPTX
Intern PPT Template FINAL
PPTX
Presentation
PDF
KEY
Portal - Lego set for app development
PDF
The New Design Workflow
AngularJS UTOSC
Creating Tomorrow’s Web Applications Using Today’s Technologies
AngularJS vs Backbone.js Smackdown
Intern PPT Template FINAL
Presentation
Portal - Lego set for app development
The New Design Workflow

What's hot (20)

KEY
Sugarcoating your frontend one ViewModel at a time
PDF
Memorial Sloan Kettering: Adventures in Drupal 8
PDF
Gemeinsame View-Models mit XAML Technologien
PPTX
Introduction to portable class libraries
PPTX
[Mas 500] Web Basics
PPTX
Ruby on rails
PDF
Making Multisite Work for You
PPTX
Some chat ops what?
PPTX
Knock out Introduction with samples (jsfiddle.net)
PDF
Component based Progress Programming
PDF
Harnessing The Power of CDNs
PDF
Coonti in HelsinkiJS
PPTX
Using Javascript in today's world
PPTX
1 - demo lab using vmware workstation
PDF
Gwt cdi jud_con_berlin
PDF
Rediscovering Modularity - .NET Edition
PPTX
ApacheCon North America - Introduction to FlexJS
PPTX
Kolomiyets Dmytro "Dealing with Multiple Caches, When Developing Microservices"
PDF
Redhat.com: An Architectural Case Study
PPT
Portable Class Library Deep Dive
Sugarcoating your frontend one ViewModel at a time
Memorial Sloan Kettering: Adventures in Drupal 8
Gemeinsame View-Models mit XAML Technologien
Introduction to portable class libraries
[Mas 500] Web Basics
Ruby on rails
Making Multisite Work for You
Some chat ops what?
Knock out Introduction with samples (jsfiddle.net)
Component based Progress Programming
Harnessing The Power of CDNs
Coonti in HelsinkiJS
Using Javascript in today's world
1 - demo lab using vmware workstation
Gwt cdi jud_con_berlin
Rediscovering Modularity - .NET Edition
ApacheCon North America - Introduction to FlexJS
Kolomiyets Dmytro "Dealing with Multiple Caches, When Developing Microservices"
Redhat.com: An Architectural Case Study
Portable Class Library Deep Dive
Ad

Viewers also liked (9)

PPTX
Electronic identification
PDF
Biometric identification
PPTX
PPTX
E-government architecture
PPTX
Electronic governance steps in the right direction?
PPTX
Open Source for the Government
PPT
anxiety and child development
PDF
Fear Driven Development
PDF
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)
Electronic identification
Biometric identification
E-government architecture
Electronic governance steps in the right direction?
Open Source for the Government
anxiety and child development
Fear Driven Development
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)
Ad

Similar to Common Sense Driven Development (20)

PPTX
Common Sense Software Development
PPTX
Software Development Practices in Practice
PDF
A Tale of Contemporary Software
PPTX
Software Engineering Primer
PPTX
Finding balance of DDD while your application grows
PDF
Accelerating Innovation with Java: The Future is Today
PPTX
From Code to Commerce, a Backend Java Developer's Galactic Journey into Ecomm...
PPSX
Enhancing clean architecture: 2 n-dimensional layers
PDF
Modern Java EE design patterns building scalable architecture for sustainable...
PPT
Software Development in 21st Century
PDF
DDD tales from ProductLand - NewCrafts Paris - May 2024
PPTX
A Beard, An App, A Blender
PPTX
Growing Software and Growing Ourselves
PDF
10 Ways To Improve Your Code( Neal Ford)
PPTX
Java Zone Academy 2018 - Build the right system
ODP
Starting a Software Developer Career
PPSX
Agile, User Stories, Domain Driven Design
PDF
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
PDF
Journey to APIs and Microservices: Best Practices
PDF
The Lost Tales of Platform Design (February 2017)
Common Sense Software Development
Software Development Practices in Practice
A Tale of Contemporary Software
Software Engineering Primer
Finding balance of DDD while your application grows
Accelerating Innovation with Java: The Future is Today
From Code to Commerce, a Backend Java Developer's Galactic Journey into Ecomm...
Enhancing clean architecture: 2 n-dimensional layers
Modern Java EE design patterns building scalable architecture for sustainable...
Software Development in 21st Century
DDD tales from ProductLand - NewCrafts Paris - May 2024
A Beard, An App, A Blender
Growing Software and Growing Ourselves
10 Ways To Improve Your Code( Neal Ford)
Java Zone Academy 2018 - Build the right system
Starting a Software Developer Career
Agile, User Stories, Domain Driven Design
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Journey to APIs and Microservices: Best Practices
The Lost Tales of Platform Design (February 2017)

More from Bozhidar Bozhanov (20)

PPTX
Откриване на фалшиви клетки за подслушване
PPTX
Wiretap Detector - detecting cell-site simulators
PPTX
Антикорупционен софтуер
PDF
Nothing is secure.pdf
PPTX
Elasticsearch - Scalability and Multitenancy
PPTX
Encryption in the enterprise
PPTX
Blockchain overview - types, use-cases, security and usabilty
PPTX
Електронна държава
PPTX
Blockchain - what is it good for?
PPTX
Algorithmic and technological transparency
PPTX
Scaling horizontally on AWS
PDF
Alternatives for copyright protection online
PPTX
GDPR for developers
PPTX
Политики, основани на данни
PDF
Отворено законодателство
PPTX
Overview of Message Queues
PPTX
Сигурност на електронното управление
PPTX
Opensource government
PDF
Биометрична идентификация
PPTX
Регулации и технологии
Откриване на фалшиви клетки за подслушване
Wiretap Detector - detecting cell-site simulators
Антикорупционен софтуер
Nothing is secure.pdf
Elasticsearch - Scalability and Multitenancy
Encryption in the enterprise
Blockchain overview - types, use-cases, security and usabilty
Електронна държава
Blockchain - what is it good for?
Algorithmic and technological transparency
Scaling horizontally on AWS
Alternatives for copyright protection online
GDPR for developers
Политики, основани на данни
Отворено законодателство
Overview of Message Queues
Сигурност на електронното управление
Opensource government
Биометрична идентификация
Регулации и технологии

Recently uploaded (20)

PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
System and Network Administraation Chapter 3
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
ai tools demonstartion for schools and inter college
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PPT
Introduction Database Management System for Course Database
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Understanding Forklifts - TECH EHS Solution
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PPTX
Introduction to Artificial Intelligence
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
System and Network Administraation Chapter 3
How to Migrate SBCGlobal Email to Yahoo Easily
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Softaken Excel to vCard Converter Software.pdf
Design an Analysis of Algorithms II-SECS-1021-03
ai tools demonstartion for schools and inter college
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Introduction Database Management System for Course Database
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Understanding Forklifts - TECH EHS Solution
2025 Textile ERP Trends: SAP, Odoo & Oracle
Introduction to Artificial Intelligence
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Wondershare Filmora 15 Crack With Activation Key [2025
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
How to Choose the Right IT Partner for Your Business in Malaysia

Common Sense Driven Development

Editor's Notes

  • #9: constructors with 10 parameters, using different order of pairs of parameters (source, target|target,source) speaking of bad APIs...
  • #10: orms are hard to setup and make it easy for shooting yourself in the foot. raw jdbc is fine sometimes, and ORMs give you that
  • #11: transition to the next slide: what hibernate?
  • #12: extend or patch existing ones instead.
  • #16: does that remind you of something? I copied this slide to the next one
  • #17: but don’t aim for 100% coverage, of course.
  • #26: emphasize on monolithic applications