Things that move containers (EKB, SACO, ANCOTRANS, ECU, OI, FreightGate, TFG)
Things that move cargo (SACO, Gruber)
Things that pack/unpack things (P&B)
Things that deal with documents (Porath, Dakosy, SACO, FreightGate)
Things that hold containers (DAKOSY)
EKB
Trucks. Mostly in DE
They send us a representation of the DB records for that shipment after each change in their system
Super nice people.
They write everything in Spring Boot.
lorenz-cgo tells Lorenz about cgo detections so he can manually try and determine if there will be a delay.
Porath
Send us semicolon delimited representations of ATLAS messages
ATLAS is just Zoll
Also send us ;messages; in other countries with XML tags written in that nation. For example, we have German and Dutch XML tags.
Usually instant; messages sometimes delayed by weeks.
Porath Bot tells ops about customs
None of this maps to transport plan
Limited tech resources on their end.
SACO
They have boats that move containers
They have small trucks that move cargo (not containers)
They send us WWA Member Shipment XML
Most of that isn't related to transport plan
Prahl & Barso
They pack and unpack containers
We mostly care about telling ops when they announce an ATB number so they can do customs
There's no transport plan events for this
Prahl & Barso bot pings the ops manager working on that shipment when their website shows the data
We scrape it every half hour, they don't have an API
They outsource their technology to some other company that occasionally goes offline
Ocean Insights
Tells us where containers are (really just about the part on a boat or close-to-it, they don't tell us about trucks or whatever)
Tricky weird logic about MBLs, Booking Numbers, and container numbers
Our TMS doesn't really provide the information we need to subscribe to things
Almost exactly a 1:1 mapping with TransportPlan, except rollovers or delays that happen at port-of-call.
Rollover Bot (Adele Bot) notifies ops about rollovers
Dakosy
Port of Hamburg (also Wilhelmshaven and Bremerhaven)
Tells us what a container is doing at the port
We can subscribe to updates about a container
We can tell the port what to do with a container (but we don't)
We can lock-out important partners like ECU from knowing what the status of our containers are if we subscribe to them first.
The entire thing is XML SFTP uploads/downloads
We only integrate with Dakosy "IMP". There's no such thing as Dakosy "EXP". You can get export information with other Dakosy products but they are not called "EXP".
TFG
They're trains
Some people refuse to admit they have trucks, but they do.
They send us XML that looks like SOAP but is actually a key-value lookup powered by request bodies matching a value in MySql.
They don't tell us estimates
We can book with them via API, but we don't.
FreightGate
Our WNL agents in Asia use this to provide us details about shipments
Because a lot of email conversations take place and data is often missing in emails
Pushes updates to TMS
Cross-region concerns. Data leaving the region is prone to a lot of failure.
Updates actual values of the shipment object
Sends some transport planning commands
Ancotrans
REST-like API
Also: Doesn't identify purpose of a stop, only that a stop happened
Doesn't provide GPS
Seems to be the same API their actual website uses
Undergoing rebuild on their side. Talk to them in 2019.
Tech Products
TypedEnv
Hosted Graphite Configs
Github Partner Collaboration
Swagger API Codegen
Cookiecutter + Integrations Comons
Code Quality/Standards Enforcement
Continuous Integration + Deployment
most best practices
External Tooling
Depndabot+approbot
BackHub
PR Reminders
go-flashpaper
AWS Glacier
AWS WorkSpaces
Heroku
Common Needs
Transports
Queues (SQS)
HTTP/REST
FTP
WEB*
Serialisations
XML
JSON
Weird stuff
Web*
Data States
Present-Representation
Events
Custom Applications
Loopback
Outbound
TP
Activity Feed
Slack
Logs
StatsD
DataWarehouse
Data-Correlation
A total mess
Only trust container IDs
Transports
seriously dudes, it doesn't matter.
Except for web. Web is awful.
Serialisations
XML parsing sillyness
JSON parsing sillyness
Expect weird stuff
Web is horrible. Web is not HTML.
Data States
When you get events
Store events
Act on events
When you have an entity representation
Store all data snapshots
Compute diffs to detect events
Act on events
Computing diffs is actually better if the data source is not event-driven in nature.
Loopback
Data Correlation
Only containers are trustworthy
Shipment IDs - Garbage
HBLs - Garbage
MBLs - Garbage
Booking Reference IDs? Garbage!
The arrow direction doesn't mean anything.
The graphing tool just puts arrows in there.
Don't look at the arrows.
Outbound
TP
Activity Feed
Slack
Logs
StatsD
DataWarehouse
We lack a general aggregation gateway
Development Strategy
Build people; not software
Build context; not documents
Build value; not lines of code
Fix root causes; not symptoms
People
Software is not written by smart people
Software is written by habits and reflexes of people
Build workout routines
High Context
Everyone knows the business
Everyone sees how code impacts the "real world"
Opportunities and innovation surface
Can work for the betterment of the company without being given a task
Higher buy-in and sense of ownership
Low Context
Teams instructed to do exactly one thing as defined in a ticket
Blocked I/O tasks go up the stack and wait
Value
Activity is not productivity
Value is not shipped code
Value is money
Value can be extracted from an investment
Debt can be useful or destructive
Fixing Symptoms
The site is down.
Turn it back on.
The site is down.
Turn it back on.
The site is down.
Turn it back on.
Death by 1000 papercuts.
Root Causes
The site is down.
What situations existed that it was able to go down?