Engineering Code

#Engineering Code: Starting a New Project/Feature

#Engineers make complex systems simple

  • Reduce complexity
  • Becareful about increasing/introducing complexity

#Identify the funnel

#Identify each step in the funnel

#Within each step, identify the inputs, processes, and outputs

#See if the process can be broken down

#See if the process can be done in parallel

#Build tools to measure the funnel

If you can't measure it. You can't improve it.

Build it into a chart.

See Pipelines

#Funnel Data Structure

#Table

Source Destination Time
1 2 2015-11-05 12:33:41
1a 2
1b 2
2 3
2 4

Having such a table means you can generate a graph.

Search online: Representing a graph in a database

#Steps can change, moved, and removed

#Steps can be parallized

#Tests, Monitoring, Alerts

Build these in.

Make it easy to do so.

#Reduce Technical Debt

Cons of Technical Debt

  • Slows you down
  • Slows down the team
  • Harder to clean up the longer it exists
  • Frustrating

    • Burns out people

Introduced as:

  • Complexities
  • Inconsistencies
  • Non standardization
  • Gotchas
  • Surprises
  • Patches
  • Death by a thousand commits
  • Poor foresight
  • Poor encapsulation

The road to hell is paved with good intentions

#Maintaining/Managing States is a PITA

Maintaining/managing states is a PITA. When there are more states to maintain, it increases the complexity of the project.

#What slows down momentum

  • Processes

    • We should engineer the processes out. Automate them. That is what engineering does best.
  • Communication Overhead

    • We should engineer reducing communication overhead.
  • Non Reproducible Steps

    • We should engineer reproducible steps.
  • Synchronous Knowledge Sharing

    • We should engineer asynchronous knowledge sharing.