"매 bottom-up = 매 작은 building block 부터 만들고 합쳐 system 으로 키우는 composition-first 접근.". 매 top-down 이 spec → decompose 인 반면, bottom-up 은 primitive → compose. 매 2026 modern 실무는 hybrid (meet-in-the-middle) — 매 spike/prototype 은 bottom-up, architecture 는 top-down, 매 LLM-driven 합성에서 bottom-up 의 compositional reasoning 이 다시 부상.
매 핵심
매 distinction
Top-down: 매 high-level spec → subsystem → module → function. 매 known-domain 적합.
Bottom-up: 매 primitive utility → combinator → application. 매 unknown-domain / discovery 적합.
Meet-in-the-middle: 매 양쪽 동시 → 중간에서 만남.
Outside-in (TDD): 매 acceptance test → unit — 매 top-down 변형.
매 strengths
Reusability: 매 primitive 가 여러 system 에 공통.
Testability: 매 작은 unit 부터 100% covered.
Discoverability: 매 unknown territory 에서 "뭐가 가능한지" 발견.
Compositional: 매 functional programming, Lisp, Forth 의 핵심.
매 weaknesses
No big picture: 매 individual unit 우수해도 system 일관성 부재 가능.
YAGNI risk: 매 안 쓰일 primitive 까지 만들 수 있음.
Integration debt: 매 끝에 가서야 합쳐지는 surprise.
매 응용
Functional libraries: 매 Lodash, Ramda — combinator 가 primitive.
Forth / Concatenative langs: 매 word 정의 후 합성.
Embedded firmware: 매 driver → HAL → app.
ML pipeline: 매 ops → layers → model.
Spike / discovery prototype: 매 architecture 모르는 phase.
💻 패턴
Functional combinator (bottom-up)
-- primitivesadd1::Int->Intadd1x=x+1double::Int->Intdoublex=x*2-- composition (no top-level spec needed)addThenDouble::Int->IntaddThenDouble=double.add1-- application emerges by composingprocess::[Int]->[Int]process=map(double.add1).filter(>0)
# Day 1 — bottom-up exploration before architecture existsdefparse_log_line(s):...# primitivedeffilter_errors(lines):...# combinatordefaggregate_by_minute(lines):...defrender_chart(buckets):...# After 2 days you SEE the pipeline → THEN write architecture doc
LLM compositional planning (modern bottom-up)
# Claude tool-use bottom-up: define small tools, let model composetools=[{"name":"search_db","description":"..."},{"name":"render_chart","description":"..."},{"name":"send_email","description":"..."},]# Model receives high-level task and composes a plan from primitivesclient.messages.create(model="claude-opus-4-7",tools=tools,messages=[{"role":"user","content":"Send a weekly sales summary"}],)