Confoo 09-03-2018
Bruce Lee Driven
Development
Jeroen van der Gulik
About me
❖ Software Architect/ Consultant
❖ Co-Founder Isset
(https://isset.nl)
❖ Señor Developer
❖ Organizer DDDNL
❖ Builder of Artificial Stupidity
❖ @n0x13
dev-books.com
S. O. L. I. D.
–Bruce Lee
“Notice that the stiffest tree
is most easily cracked …”
–Bruce Lee
“… while the bamboo survives
by bending with the wind.”
“Life is never stagnation.
It is constant movement, constant change.”
“Those who are unaware they are walking
in darkness will never seek the light.”
.
|-- app
|-- config
|-- config.ru
|-- CONTRIBUTING.md
|-- db
|-- doc
|-- extra
|-- files -> ../files
|-- Gemfile
|-- Gemfile.lock
|-- lib
|-- log
|-- plugins
|-- public
|-- Rakefile
|-- README.rdoc
|-- script
|-- test
`-- tmp
app/
|-- controllers
|-- helpers
|-- models
`-- views
app/models/
|-- attachment.rb
|-- auth_source_ldap.rb
|-- auth_source.rb
|-- board.rb
|-- change.rb
|-- changeset.rb
|-- comment.rb
|-- custom_field.rb
|-- custom_field_value.rb
|-- custom_value.rb
|-- document_category_custom_field.rb
|-- document_category.rb
|-- document.rb
|-- enabled_module.rb
|-- enumeration.rb
|-- group_anonymous.rb
|-- group_builtin.rb
|-- group_custom_field.rb
|-- group_non_member.rb
|-- group.rb
|-- issue_category.rb
|-- issue_custom_field.rb
|-- issue_priority_custom_field.rb
|-- issue_priority.rb
|-- issue_query.rb
|-- issue.rb
|-- issue_relation.rb
|-- issue_status.rb
|-- journal_detail.rb
|-- journal.rb
|-- mailer.rb
|-- mail_handler.rb
|-- member.rb
|-- member_role.rb
|-- message.rb
|-- news.rb
|-- principal.rb
|-- project_custom_field.rb
|-- project.rb
|-- query.rb
|-- repository
|-- repository.rb
|-- role.rb
|-- setting.rb
|-- time_entry_activity_custom_field.rb
|-- time_entry_activity.rb
|-- time_entry_custom_field.rb
|-- time_entry_query.rb
|-- time_entry.rb
|-- token.rb
|-- tracker.rb
|-- user_custom_field.rb
|-- user_preference.rb
|-- user.rb
|-- version_custom_field.rb
|-- version.rb
|-- watcher.rb
|-- wiki_content.rb
|-- wiki_page.rb
|-- wiki.rb
|-- wiki_redirect.rb
|-- workflow_permission.rb
|-- workflow_rule.rb
`-- workflow_transition.rb
app/controllers/
|-- account_controller.rb
|-- activities_controller.rb
|-- admin_controller.rb
|-- application_controller.rb
|-- attachments_controller.rb
|-- auth_sources_controller.rb
|-- auto_completes_controller.rb
|-- boards_controller.rb
|-- calendars_controller.rb
|-- comments_controller.rb
|-- context_menus_controller.rb
|-- custom_fields_controller.rb
|-- documents_controller.rb
|-- enumerations_controller.rb
|-- files_controller.rb
|-- gantts_controller.rb
|-- groups_controller.rb
|-- issue_categories_controller.rb
|-- issue_relations_controller.rb
|-- issues_controller.rb
|-- issue_statuses_controller.rb
|-- journals_controller.rb
|-- mail_handler_controller.rb
|-- members_controller.rb
|-- messages_controller.rb
|-- my_controller.rb
|-- news_controller.rb
|-- previews_controller.rb
|-- project_enumerations_controller.rb
|-- projects_controller.rb
|-- queries_controller.rb
|-- reports_controller.rb
|-- repositories_controller.rb
|-- roles_controller.rb
|-- search_controller.rb
|-- settings_controller.rb
|-- sys_controller.rb
|-- timelog_controller.rb
|-- trackers_controller.rb
|-- users_controller.rb
|-- versions_controller.rb
|-- watchers_controller.rb
|-- welcome_controller.rb
|-- wiki_controller.rb
|-- wikis_controller.rb
`-- workflows_controller.rb
.
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE
├── README.md
├── app
├── artisan
├── bootstrap
├── bower.json
├── codeception.yml
├── composer.json
├── composer.lock
├── config
├── database
├── docs
├── gulpfile.js
├── package.json
├── phpspec.yml
├── phpunit.xml
├── public
├── resources
├── server.php
├── storage
└── tests
app
├── Commands
├── Console
├── Events
├── Exceptions
├── Handlers
├── Http
├── Includes
├── Libraries
├── Listeners
├── Models
├── Ninja
├── Policies
├── Providers
└── Services
app
├── Commands
├── Console
├── Events
├── Exceptions
├── Handlers
├── Http
├── Includes
├── Libraries
├── Listeners
├── Models
├── Ninja
├── Policies
├── Providers
└── Services
app/Ninja
├── Datatables
├── Import
├── Intents
├── Mailers
├── Notifications
├── PaymentDrivers
├── Presenters
├── Repositories
├── Serializers
└── Transformers
app/Models
├── Account.php
├── AccountGateway.php
├── AccountGatewaySettings.php
├── AccountGatewayToken.php
├── AccountToken.php
├── Activity.php
├── Affiliate.php
├── BalanceAffecting.php
├── Bank.php
├── BankAccount.php
├── BankSubaccount.php
├── Client.php
├── Company.php
├── Contact.php
├── Country.php
├── Credit.php
├── Currency.php
├── DateFormat.php
├── DatetimeFormat.p
├── Document.php
├── EntityModel.php
├── Expense.php
├── ExpenseCategory.php
├── Font.php
├── Frequency.php
├── Gateway.php
├── GatewayType.php
├── Industry.php
├── Invitation.php
├── Invoice.php
├── InvoiceDesign.php
├── InvoiceItem.php
├── InvoiceStatus.php
├── Language.php
├── License.php
├── OwnedByClientTrait.php
├── Payment.php
├── PaymentLibrary.php
├── PaymentMethod.php
├── PaymentStatus.php
├── PaymentTerm.php
├── PaymentType.php
├── Product.php
├── Project.php
├── SecurityCode.php
├── Size.php
├── Subscription.php
├── Task.php
├── TaxRate.php
├── Theme.php
├── Timezone.php
├── Traits
├── User.php
├── UserAccount.php
├── Vendor.php
└── VendorContact.php
app/Http/Controllers
├── AccountApiController.php
├── AccountController.php
├── AccountGatewayController.php
├── ActivityController.php
├── AppController.php
├── Auth
├── BankAccountController.php
├── BaseAPIController.php
├── BaseController.php
├── BlueVineController.php
├── BotController.php
├── ClientApiController.php
├── ClientAuth
├── ClientController.php
├── ClientPortalController.php
├── Controller.php
├── CreditController.php
├── DashboardApiController.php
├── DashboardController.php
├── DocumentAPIController.php
├── DocumentController.php
├── ExpenseApiController.php
├── ExpenseCategoryApiController.php
├── ExpenseCategoryController.php
├── ExpenseController.php
├── ExportController.php
├── HomeController.php
├── ImportController.php
├── IntegrationController.php
├── InvoiceApiController.php
├── InvoiceController.php
├── NinjaController.php
├── OnlinePaymentController.php
├── PaymentApiController.php
├── PaymentController.php
├── PaymentTermController.php
├── ProductApiController.php
├── ProductController.php
├── ProjectController.php
├── QuoteApiController.php
├── QuoteController.php
├── RecurringInvoiceController.php
├── ReportController.php
├── SelfUpdateController.php
├── TaskApiController.php
├── TaskController.php
├── TaxRateApiController.php
├── TaxRateController.php
├── TokenController.php
├── UserApiController.php
├── UserController.php
├── VendorApiController.php
└── VendorController.php
HouseBundle
├── Command
│   ├── GotoBedCommand.php
│   └── GetDressedCommand.php
├── Controllers
│   ├── BedController.php
│   ├── ClothesController.php
│   └── StairsController.php
├── Entity
│   ├── BedFurniture.php
│   ├── Cement.php
│   ├── ClosetFurniture.php
│   ├── Floor.php
│   ├── Wall.php
│   └── Wood.php
├── HouseBundle.php
├── Repository
│   ├── BedFurnitureRepositoy.php
│   └── ClosetFurnitureRepository.php
├── Resources
├── Service
│   ├── ChangeRoomService.php
│   └── SleepService.php
└── Tests
ActualHouse
├── FirstFloor
│   ├── BathRoom
│   ├── HallWay
│   ├── Kitchen
│   └── LivingRoom
├── SecondFloor
│   ├── BathRoom
│   ├── GuestBedRoom
│   ├── Hallway
│   └── MasterBedRoom
│   ├── Actions
│   │   ├── GoToBed.php
│   │   ├── GetDressed.php
│   └── Furniture
│   ├── ClothesCloset.php
│   └── DoubleBed.php
└── Shared
└── Stairs.php
“The junior hardcodes it,
The medior creates an
abstract factory for it,
The senior hardcodes it.”
– Bruce Lee
“Use only that which works,
and take it from any place
you can find it.”
Jeet Kune Do
❖ Efficiency
❖ Directness
❖ Simplicity
– Bruce Lee
“The less effort, the faster and
more powerful you will be.”
Bruce Lee Driven Development
A.K.A. Jeet Kune Do
B.L.D.D.
❖ Begin at the Core
– Bruce Lee
“In order to taste my cup of water
you must first empty your cup.”
B.L.D.D.
❖ Begin at the Core
❖ Recognise the Value
“As a Kung Fu Master
I want to travel fast to dojos
so I can proof I’m the best.”
“The key to immortality is first living
a life worth remembering.”
B.L.D.D.
❖ Begin at the Core
❖ Recognise the Value
❖ Use the simplest most direct approach first
B.L.D.D.
❖ Begin at the Core
❖ Recognise the Value
❖ Use the simplest most direct approach first
❖ Change is inevitable
– Bruce Lee
“Adapt what is useful, reject what
is useless, and add what is
specifically your own.”
D.R.Y.
Don’t Repeat Yourself
DO Repeat Yourself
B.L.D.D.
❖ Begin at the Core
❖ Recognise the Value
❖ Use the simplest most direct approach first
❖ Change is inevitable
❖ Experiment
– Bruce Lee
“Mistakes are always forgivable, if
one has the courage to admit them.”
B.L.D.D.
❖ Begin at the Core
❖ Recognise the Value
❖ Use the simplest most direct approach first
❖ Change is inevitable
❖ Experiment
– Bruce Lee
“A goal is not always meant to be
reached, it often serves simply as
something to aim at.”
– Bruce Lee
“Obey the principles without
being bound by them.”
– Bruce Lee
“If you want to learn to swim jump into
the water. On dry land no frame of mind
is ever going to help you.”
“Don’t get set into one form, adapt it and build
your own, and let it grow, be like water.”

2018 03-09 bruce lee driven development - confoo

  • 1.
    Confoo 09-03-2018 Bruce LeeDriven Development Jeroen van der Gulik
  • 2.
    About me ❖ SoftwareArchitect/ Consultant ❖ Co-Founder Isset (https://isset.nl) ❖ Señor Developer ❖ Organizer DDDNL ❖ Builder of Artificial Stupidity ❖ @n0x13
  • 11.
  • 15.
    S. O. L.I. D.
  • 16.
    –Bruce Lee “Notice thatthe stiffest tree is most easily cracked …”
  • 17.
    –Bruce Lee “… whilethe bamboo survives by bending with the wind.”
  • 24.
    “Life is neverstagnation. It is constant movement, constant change.”
  • 33.
    “Those who areunaware they are walking in darkness will never seek the light.”
  • 34.
    . |-- app |-- config |--config.ru |-- CONTRIBUTING.md |-- db |-- doc |-- extra |-- files -> ../files |-- Gemfile |-- Gemfile.lock |-- lib |-- log |-- plugins |-- public |-- Rakefile |-- README.rdoc |-- script |-- test `-- tmp
  • 35.
  • 36.
    app/models/ |-- attachment.rb |-- auth_source_ldap.rb |--auth_source.rb |-- board.rb |-- change.rb |-- changeset.rb |-- comment.rb |-- custom_field.rb |-- custom_field_value.rb |-- custom_value.rb |-- document_category_custom_field.rb |-- document_category.rb |-- document.rb |-- enabled_module.rb |-- enumeration.rb |-- group_anonymous.rb |-- group_builtin.rb |-- group_custom_field.rb |-- group_non_member.rb |-- group.rb |-- issue_category.rb |-- issue_custom_field.rb |-- issue_priority_custom_field.rb |-- issue_priority.rb |-- issue_query.rb |-- issue.rb |-- issue_relation.rb |-- issue_status.rb |-- journal_detail.rb |-- journal.rb |-- mailer.rb |-- mail_handler.rb |-- member.rb |-- member_role.rb |-- message.rb |-- news.rb |-- principal.rb |-- project_custom_field.rb |-- project.rb |-- query.rb |-- repository |-- repository.rb |-- role.rb |-- setting.rb |-- time_entry_activity_custom_field.rb |-- time_entry_activity.rb |-- time_entry_custom_field.rb |-- time_entry_query.rb |-- time_entry.rb |-- token.rb |-- tracker.rb |-- user_custom_field.rb |-- user_preference.rb |-- user.rb |-- version_custom_field.rb |-- version.rb |-- watcher.rb |-- wiki_content.rb |-- wiki_page.rb |-- wiki.rb |-- wiki_redirect.rb |-- workflow_permission.rb |-- workflow_rule.rb `-- workflow_transition.rb
  • 37.
    app/controllers/ |-- account_controller.rb |-- activities_controller.rb |--admin_controller.rb |-- application_controller.rb |-- attachments_controller.rb |-- auth_sources_controller.rb |-- auto_completes_controller.rb |-- boards_controller.rb |-- calendars_controller.rb |-- comments_controller.rb |-- context_menus_controller.rb |-- custom_fields_controller.rb |-- documents_controller.rb |-- enumerations_controller.rb |-- files_controller.rb |-- gantts_controller.rb |-- groups_controller.rb |-- issue_categories_controller.rb |-- issue_relations_controller.rb |-- issues_controller.rb |-- issue_statuses_controller.rb |-- journals_controller.rb |-- mail_handler_controller.rb |-- members_controller.rb |-- messages_controller.rb |-- my_controller.rb |-- news_controller.rb |-- previews_controller.rb |-- project_enumerations_controller.rb |-- projects_controller.rb |-- queries_controller.rb |-- reports_controller.rb |-- repositories_controller.rb |-- roles_controller.rb |-- search_controller.rb |-- settings_controller.rb |-- sys_controller.rb |-- timelog_controller.rb |-- trackers_controller.rb |-- users_controller.rb |-- versions_controller.rb |-- watchers_controller.rb |-- welcome_controller.rb |-- wiki_controller.rb |-- wikis_controller.rb `-- workflows_controller.rb
  • 39.
    . ├── CONTRIBUTING.md ├── Gruntfile.js ├──LICENSE ├── README.md ├── app ├── artisan ├── bootstrap ├── bower.json ├── codeception.yml ├── composer.json ├── composer.lock ├── config ├── database ├── docs ├── gulpfile.js ├── package.json ├── phpspec.yml ├── phpunit.xml ├── public ├── resources ├── server.php ├── storage └── tests
  • 40.
    app ├── Commands ├── Console ├──Events ├── Exceptions ├── Handlers ├── Http ├── Includes ├── Libraries ├── Listeners ├── Models ├── Ninja ├── Policies ├── Providers └── Services
  • 41.
    app ├── Commands ├── Console ├──Events ├── Exceptions ├── Handlers ├── Http ├── Includes ├── Libraries ├── Listeners ├── Models ├── Ninja ├── Policies ├── Providers └── Services
  • 42.
    app/Ninja ├── Datatables ├── Import ├──Intents ├── Mailers ├── Notifications ├── PaymentDrivers ├── Presenters ├── Repositories ├── Serializers └── Transformers
  • 43.
    app/Models ├── Account.php ├── AccountGateway.php ├──AccountGatewaySettings.php ├── AccountGatewayToken.php ├── AccountToken.php ├── Activity.php ├── Affiliate.php ├── BalanceAffecting.php ├── Bank.php ├── BankAccount.php ├── BankSubaccount.php ├── Client.php ├── Company.php ├── Contact.php ├── Country.php ├── Credit.php ├── Currency.php ├── DateFormat.php ├── DatetimeFormat.p ├── Document.php ├── EntityModel.php ├── Expense.php ├── ExpenseCategory.php ├── Font.php ├── Frequency.php ├── Gateway.php ├── GatewayType.php ├── Industry.php ├── Invitation.php ├── Invoice.php ├── InvoiceDesign.php ├── InvoiceItem.php ├── InvoiceStatus.php ├── Language.php ├── License.php ├── OwnedByClientTrait.php ├── Payment.php ├── PaymentLibrary.php ├── PaymentMethod.php ├── PaymentStatus.php ├── PaymentTerm.php ├── PaymentType.php ├── Product.php ├── Project.php ├── SecurityCode.php ├── Size.php ├── Subscription.php ├── Task.php ├── TaxRate.php ├── Theme.php ├── Timezone.php ├── Traits ├── User.php ├── UserAccount.php ├── Vendor.php └── VendorContact.php
  • 44.
    app/Http/Controllers ├── AccountApiController.php ├── AccountController.php ├──AccountGatewayController.php ├── ActivityController.php ├── AppController.php ├── Auth ├── BankAccountController.php ├── BaseAPIController.php ├── BaseController.php ├── BlueVineController.php ├── BotController.php ├── ClientApiController.php ├── ClientAuth ├── ClientController.php ├── ClientPortalController.php ├── Controller.php ├── CreditController.php ├── DashboardApiController.php ├── DashboardController.php ├── DocumentAPIController.php ├── DocumentController.php ├── ExpenseApiController.php ├── ExpenseCategoryApiController.php ├── ExpenseCategoryController.php ├── ExpenseController.php ├── ExportController.php ├── HomeController.php ├── ImportController.php ├── IntegrationController.php ├── InvoiceApiController.php ├── InvoiceController.php ├── NinjaController.php ├── OnlinePaymentController.php ├── PaymentApiController.php ├── PaymentController.php ├── PaymentTermController.php ├── ProductApiController.php ├── ProductController.php ├── ProjectController.php ├── QuoteApiController.php ├── QuoteController.php ├── RecurringInvoiceController.php ├── ReportController.php ├── SelfUpdateController.php ├── TaskApiController.php ├── TaskController.php ├── TaxRateApiController.php ├── TaxRateController.php ├── TokenController.php ├── UserApiController.php ├── UserController.php ├── VendorApiController.php └── VendorController.php
  • 46.
    HouseBundle ├── Command │   ├──GotoBedCommand.php │   └── GetDressedCommand.php ├── Controllers │   ├── BedController.php │   ├── ClothesController.php │   └── StairsController.php ├── Entity │   ├── BedFurniture.php │   ├── Cement.php │   ├── ClosetFurniture.php │   ├── Floor.php │   ├── Wall.php │   └── Wood.php ├── HouseBundle.php ├── Repository │   ├── BedFurnitureRepositoy.php │   └── ClosetFurnitureRepository.php ├── Resources ├── Service │   ├── ChangeRoomService.php │   └── SleepService.php └── Tests
  • 47.
    ActualHouse ├── FirstFloor │   ├──BathRoom │   ├── HallWay │   ├── Kitchen │   └── LivingRoom ├── SecondFloor │   ├── BathRoom │   ├── GuestBedRoom │   ├── Hallway │   └── MasterBedRoom │   ├── Actions │   │   ├── GoToBed.php │   │   ├── GetDressed.php │   └── Furniture │   ├── ClothesCloset.php │   └── DoubleBed.php └── Shared └── Stairs.php
  • 49.
    “The junior hardcodesit, The medior creates an abstract factory for it, The senior hardcodes it.”
  • 61.
    – Bruce Lee “Useonly that which works, and take it from any place you can find it.”
  • 63.
    Jeet Kune Do ❖Efficiency ❖ Directness ❖ Simplicity
  • 64.
    – Bruce Lee “Theless effort, the faster and more powerful you will be.”
  • 65.
    Bruce Lee DrivenDevelopment A.K.A. Jeet Kune Do
  • 66.
  • 70.
    – Bruce Lee “Inorder to taste my cup of water you must first empty your cup.”
  • 72.
    B.L.D.D. ❖ Begin atthe Core ❖ Recognise the Value
  • 73.
    “As a KungFu Master I want to travel fast to dojos so I can proof I’m the best.”
  • 79.
    “The key toimmortality is first living a life worth remembering.”
  • 80.
    B.L.D.D. ❖ Begin atthe Core ❖ Recognise the Value ❖ Use the simplest most direct approach first
  • 85.
    B.L.D.D. ❖ Begin atthe Core ❖ Recognise the Value ❖ Use the simplest most direct approach first ❖ Change is inevitable
  • 86.
    – Bruce Lee “Adaptwhat is useful, reject what is useless, and add what is specifically your own.”
  • 87.
  • 88.
  • 90.
  • 91.
    B.L.D.D. ❖ Begin atthe Core ❖ Recognise the Value ❖ Use the simplest most direct approach first ❖ Change is inevitable ❖ Experiment
  • 95.
    – Bruce Lee “Mistakesare always forgivable, if one has the courage to admit them.”
  • 96.
    B.L.D.D. ❖ Begin atthe Core ❖ Recognise the Value ❖ Use the simplest most direct approach first ❖ Change is inevitable ❖ Experiment
  • 97.
    – Bruce Lee “Agoal is not always meant to be reached, it often serves simply as something to aim at.”
  • 100.
    – Bruce Lee “Obeythe principles without being bound by them.”
  • 102.
    – Bruce Lee “Ifyou want to learn to swim jump into the water. On dry land no frame of mind is ever going to help you.”
  • 103.
    “Don’t get setinto one form, adapt it and build your own, and let it grow, be like water.”