Houjun Liu

Software Engineering Index

# index

process of Engineering: chronological order

Other topics

  • Query optimization (TODO)

Fucking acronyms to know

fundamental trade-off of Software Engineering

The MIT vs. New Jersey problem: in Software Engineering, you can only choose one of FAST or ROBUST.

ProblemFast (“Bell Labs/NJ”)Robust (“MIT”)
SpecsWhatever it looks likescreens, states, UI elements documented; transitions
Time“whenever”precise projections, track work and dependencies
Testing“ran it + didn’t crash”black, white box, code overage, edge/adv. cases
ModularGiant functionobject/data model, grouped function, abstraction barriers
FailureUnpredictable + silentGraceful, noisy, error reporting + logging
LanguageScripting, high levelLow-level, assembly/bare metal, control, can be difficult
Being DoneNowLater

Source: here.

how to choose?

Which is the better approach? There isn’t one. However, here are some critical questions for you to answer:

  • Deadline: what happens if you don’t finish today?
  • Release cycle: if you ship a bug, how long can you fix it?
  • Consequences: if the software malfunctions, how bad is it?
  • Life-cycle: how long will the software get used?


As consequences for deadline gets worse, trend towards fast; as consequences for failure gets worse, trend towards robust.