要件定義をきちんとすれば自然に辿り着くことだけど
自動販売機をモデル化する場合に核になるのはステートマシン
それを理解せず設計したりコードを書いたりすれば
>>45で指摘したような問題が後から後から出てくる

設計時もコーディング時も
事前/事後/不変条件を常に意識することが大事