Please enable JavaScript.
Coggle requires JavaScript to display documents.
Safari Architecture Training (start Starting a Project! (Metrics (Linting…
Safari Architecture
Training
Want Change?
Prepare Agenda
Pro/Con Lst
Subject Importance
Meeting Importance
Vote for whether meeting
is worthwhile
Make Action Items (AI)
How to follow up on AIs
Starting a Project!
Coding Standards
Metrics
Linting
Code Complexity
Sonar, etc.
Testing Requirements
Git workflow
Set up all environments
Logging Standards
Monitoring
Instrumenting?
Make feature matrix to determine what to use
Documents
Requirements
Element Catalog - Interfaces, behaviours
Variability Guide - Ability to suit needs of sol'n
Rationale
Continuous Delivery
Automated
Build Env
Configure Envs
Deploy envs
Test envs
Tear down envs
Documentation
iPad + projector + Penultimate + Evernote =
Searchable docs
Tools
Puppet/Chef
Boxen - More configurable
Ideas
Use Puppet/Chef/Boxen to create dev envs
Trunk-based Development ie. feature toggling
Togglz for Java
Types of Architecture
Space-based Architecture -
Good for scaling lots of data, but not RDBMS
Enterprise Architecture - Improve IT to do what business wants to do
Books/Edu
Continuous Delivery - Humble & Farley
Software Architecture in Practice
Important
Integration Architecture - Enterprise Integration Patterns - Hope & Wolf
Documenting Software Architectures:
Views & Beyond
Different kinds of docs (eg. hardware, protocols)
The Real Business of IT
Domain Driven Design
Implementing Domain Driven Design
Eric Evans eCourses
Mythical Man-Month
UML Distilled
Refactoring Databases - Ambler & Sadalage
Enterprise Architecture as Strategy
A Practical Guide to Enterprise Architecture
Who Needs an Architect? - Blog article
DevOps
Ideas
Wrap Cucumber around Puppet -
Easy to understand; active docs
Future To-Learn
Cloud infrastructure
Distributed Systems
Techniques
Harvesting Model
Team going full tilt
Refactoring/Architecture team "operationalizing" things
eg. Reuse
REST + HATEOS
Domain Application Protocol
Part of msg saying what state changes are available
Cache-Control
header ro do caching easily for often static resources
Expires
header to say when cache expires
Messaging vs Services
Messaging
Async
Guaranteed delivery
Check status of request
Exception processing
Good performance
Services
Human readable messages vs binary
External firewall access is possible
Versioning - Use "Semantic versioning". Make entirely new resource for new version
Almost alwasys use messaging for internal services
RESTful JMS
ActiveMQ
WebSphereMQ
GET
is not idempotent. HTTP verbs don't fit/
Smelly Trying to be the best of both worlds and failing at both?.
SOA
ESB
Decouple Client/Business
Service registry - location of service unknown
Message enhancement - Change the param types/names
Message Transform - Change the format (eg. xml -> JSON)
Protocol Transform - WHo cares how you communicate
Mule or Camel
Operations coupling - All services depend on ESB
Minimize application code in ESB for this reason
Externalize application code, but lose performance
Consumer Driven Contracts
Consumers give provider tests to run
Metrics
Dependency Handling
Dependency Handlers
Structure 101 - Makes to-do list of refactors
JDepend - Establish rules o dependencies and get test errors when they fail
Complexity
Deliberate
Reckless
Prudent
Inadvertent
Reckless
Prudent
Cyclomatic Complexity
Cyclomatic complexity / LOC - Trend related to releases
Higher & Higher = fewer releases
Sonar, tech debt calc
Where to refactor?
High complexity + high afferent calls (incoming calls)
ie. Important and complex
Refactor at "last responsible moment"
When complexity jumps up quickly
"Battles"
Tactical
Localized
"Non-decisive"
Ad-hoc tech project
Small Scope
Reactive
Builds Morale/XP
Enterprise
"Decisive"
Tech-based
Reactive
Medium scope/duration
Strategic
Localized
"Blockade"
Limited scope
Medium duration
Proactive/Planning
Business-related
Not "fun", but necessary
Enterprise
"Invasion"
Big risk
Proactive
Strategy/Planning
Business-related
Long duration
Big scope
Win/Lose scenario (eg. promoted/fired)