A blog about software and making.

Odds & Ends - March 2016

Thoughts, terms, and ideas I’ve come across over the last few months.

  • Data center power = 50% for Store/Retrieve/Transmit and 50% for cooling.
  • Social Signal - A Like, +1, etc.
  • Mixin = Small, specific, orthogonal
  • This worked for me! The for me is silent.
  • The standard you tolerate is the standard you accept.
  • Localize related concerns. Components that frequency interact should be kept close! Avoid cross-network calls. Chatty (fine grained) vs. Chunky (course-grained).
  • Service vs. Libary - Service is updated at the same time as the client while a library can be updated independently.
  • Don’t start with generic - Concentrate on your features and specific use cases first. Later you can think about a generic solution if it satisfies the rule of three.
  • Ad-hoc Analytics - Issues dynamic queries on the data store and system responds. Used to explore the dataset.
  • Streaming Analytics - Issue static queries and system processes them as time ordered data comes in without storing. Examples are windows, joins, counting, temporal event sequence detection.
  • Store an immutable sequence of events. Model data transformations as a series of materialized stages from the original input. Can debug and test each state independently. When code changes, you can re-run to get new output (Reprocessing/Regenerating output).
  • Time to first byte - How to measure startup times
  • Environmental Viscosity - When the dev environment is slow devs are tempted to make minimal changes, so they don’t have to wait. Do what’s easy instead of doing what’s right.
  • Are the portions of the code with highest fan-in (used in the most places) exercised by automated tests?
  • Are there volatile parts of the codebase that get changed with every commit?
  • Testing Pyramid - 70% unit tests / 20% integration tests / 10% end to end tests.
  • 1/2 the world is 20000km and a ping is there and back (40000km) at the speed of light so 133ms minimum.
  • Constructor injected dependencies and method arguments are both input arguments applied at different times in the application lifecycle.
  • Represent side effects as intents to perform actions transparent objects that expose the details of side effects without actually performing them.
  • It is impossible to completely decouple a code base without damaging coherence. It is impossible to have fully cohesive code without introducing coupling.
  • Domain Events - Bones of a domain model. Stable because they only change if the business changes. Many choices for how to implement behavior and represent in data.