---
title: "Software Engineering Index"
type: concept
related: [User Interviews, Task Estimation, Software Engineering, Testing, Documentation And Specification]
source: https://www.jemoka.com/posts/kbhsoftware_engineering/
confidence: high
status: active
---

process of Engineering: chronological order User Interviews + User Stories Requirements Analysis Documentation and Specification Build the damned thing Project Management and Development Methodology (SDLC) Task Estimation Software Design and Architecture Patterns Testing Build and Release engineering (TODO) Other topics Query optimization (TODO) Fucking acronyms to know AAA Method SOLID principles STAR method: state behaviorals in Situation, Task, Action, Results fundamental trade-off of Software Engineering The MIT vs. New Jersey problem: in Software Engineering, you can only choose one of FAST or ROBUST.
Problem Fast (&ldquo;Bell Labs/NJ&rdquo;) Robust (&ldquo;MIT&rdquo;) Specs Whatever it looks like screens, states, UI elements documented; transitions Time &ldquo;whenever&rdquo; precise projections, track work and dependencies Testing &ldquo;ran it + didn&rsquo;t crash&rdquo; black, white box, code overage, edge/adv. cases Modular Giant function object/data model, grouped function, abstraction barriers Failure Unpredictable + silent Graceful, noisy, error reporting + logging Language Scripting, high level Low-level, assembly/bare metal, control, can be difficult Proto. Many/Quickly Few/Slowly Being Done Now Later Source: here.
how to choose? Which is the better approach? There isn&rsquo;t one. However, here are some critical questions for you to answer:
Deadline: what happens if you don&rsquo;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? So&mdash;
As consequences for deadline gets worse, trend towards fast; as consequences for failure gets worse, trend towards robust.
