danielfisher.com
• danielfisher.com– Developer, Architect, Coach, Trainer
• lennybacon.com– Blog
• Justcommunity.de– Mit-Gründer und Vorstand
• nrwconf.de– Mit-Gründer und Organisator
• twitter.com– @lennybacon
Daniel Fisher
danielfisher.com
EFFICIENT COMMUNICATION…
danielfisher.com
No more monoliths
https://www.flickr.com/photos/senorwences/2366892425
danielfisher.com
https://www.flickr.com/photos/inju/2647397230
danielfisher.com
Change must be cheap
https://www.flickr.com/photos/smull/432813187
danielfisher.com
Feedback must be fast
https://www.flickr.com/photos/thatguyfromcchs08/2300190277
danielfisher.com
Component-based software engineering is a branch
of software engineering that emphasizes the
separation of concerns in respect of the wide-ranging functionality available throughout a
given software system.
http://en.wikipedia.org/wiki/Component-based_software_engineering
danielfisher.com
It is a reuse-based approach to defining,
implementing and composing loosely coupled independent components into systems.
This practice aims to bring about an equally wide-ranging degree of
benefits in both the short-term and the
long-term for the software itself and for
organizations that sponsor such software.
http://en.wikipedia.org/wiki/Component-based_software_engineering
danielfisher.com
Sorry this is *NO hot shit*!
The idea first became prominent with
Douglas McIlroy at the NATO conference on software
engineering in Garmisch, Germany,
1968
danielfisher.com
http://enterprisecraftsmanship.com/2015/01/10/how-to-build-microservices-wrong
What about micro services?
danielfisher.com
Don't reinvent the wheel!
danielfisher.com
‘Nuf bla bla!
So what’s a component?
danielfisher.com
https://www.flickr.com/photos/64693712@N05/8059145606
danielfisher.com
Divide and Conquer
danielfisher.com
danielfisher.com
Separation of ConcernsSingle Responsibility
…Clean Code
danielfisher.com
https://www.flickr.com/photos/lynsey_wells83/11054897226
danielfisher.com
https://www.flickr.com/photos/miasone/8741413785
danielfisher.com
Explicit boundariesAutonomous
Shared schema and contractCompatibility through Policy
danielfisher.com
Ensure separation
• Ndepend– http://www.ndepend.com/
danielfisher.com
Component Component Component
Domain ServicesDomain Objects
APIAPI
DD
DTE
C
Layers
Value Objects
Aggregate Root
danielfisher.com
The only thing
really hard is making things
really easy
danielfisher.com
https://www.flickr.com/photos/shardayyy/5711563136
danielfisher.com
Dependencies
Core
Directory
Data
DataModel Diagnostics
ComponentModel
DataModel.Data
danielfisher.com
https://www.flickr.com/photos/archivesnz/8759939806
Source Control Repositories
danielfisher.com
Branch Strategy
Branch for stability Commit for stability
danielfisher.com
Usual Repository
Class Library Test Sample Class Library
Class LibrarySample Test Test
Class Library Test Sample Class Library
Class LibraryExecutableSample Class Library
danielfisher.com
Component Repository
Class Library Test Sample
danielfisher.com
Pros
• You just work with what you need• Separation of concerns from the
beginning
danielfisher.com
Cons
• There will be lots of repositories• There will be multiple histories/logs
danielfisher.com
Consequences
• The need for a flexible SCM• Aggregated feeds of history/logs
danielfisher.com
Flexible version control
• GIT
danielfisher.com
Tests
danielfisher.com
Pros
• You only see and maintain relevant tests
• Feedback is delivered faster
danielfisher.com
Cons
• Any?
danielfisher.com
Consequences
• You need to change the way you did it before?
danielfisher.comMonolith solution or too many
tests?
• NCrunch.NET– http://www.ncrunch.net/
• Wallaby.JS– http://wallabyjs.com/
danielfisher.com
© Daniel Fisher
Builds
danielfisher.com
Builds
• A project consist of multiple builds– Per branch?
• Check-In• Nightly• Feature• Team• Release
It really depends on your business strategy and team organization!
danielfisher.com
Pros
• Build can be parallelized• Feedback is delivered faster• You see where it breaks
danielfisher.com
Cons
• There will be lots of builds• There will be even more build results
danielfisher.com
Consequences
• Build Process that supports build trees– https://
en.wikipedia.org/wiki/Topological_sorting
• Aggregated overview of build results
danielfisher.com
Build Servers
• Good question!
danielfisher.com
danielfisher.com
SOS…
danielfisher.com
Build Scripts
https://www.flickr.com/photos/frf_kmeron/3587872772
danielfisher.com
Build ProcessCh
ecko
ut-S
ourc
es
Gen
erat
e-Co
de
Set-
Vers
ion
Com
pile
-Cod
e
Reso
lve-
Dep
ende
ncie
s
Sign
-Out
put
Pack
age-
Out
put
Publ
ish-
Pack
age
Anal
yze-
Out
put
Doc
umen
t-O
utpu
t
Test
-Out
put
Dep
loy-
Pack
age
Test
-Dep
loym
ent
Test
-Inte
grati
on
danielfisher.com
Rake, Fake, Workflow
danielfisher.com
IMHO
• Until you don't build value by writing build scripts avoid it
danielfisher.com
Package Publication
https://www.flickr.com/photos/leshaines123/5422165409
danielfisher.comLatest & Greatest vs. Old &
Conservative
https://www.flickr.com/photos/thomasletholsen/11139022726
danielfisher.com
Package Publication
• NuGet• NPM• Bower• …
danielfisher.com
Pros
• Orchestration of releases
danielfisher.com
Cons
• Maintenance of multiple Package Repositories?
danielfisher.com
Bug Tracking
https://www.flickr.com/photos/goingslo/4523034319
danielfisher.com
Software is not for itself!
• A Bug Tracker for each Product– A category/tag for each project
danielfisher.com
Roadmap
https://www.flickr.com/photos/aigle_dore/5849712695
danielfisher.com
Software is not for itself!
• A Feature plan for each Product– A category/tag for each project
danielfisher.com
Versions
https://www.flickr.com/photos/jasonmichael/5396824640
danielfisher.com
Software is not for support!
• One version number per Product for each Project
danielfisher.com
READ LENNYBACON.COMFOLLOW @LENNYBACON
LINK LINKEDIN.COM/IN/LENNYBACONXING XING.COM/PROFILE/DANIEL_FISHERFRIEND FB.COM/DANIEL.FISHER.LENNYBACONMAIL [email protected] +49 (176) 6159 8612