Launch Interceptor Decision System (DECIDE)
A Java implementation of the classic DECIDE specification — 15 geometric Launch Interceptor Conditions evaluated against 2D radar tracks, built by a 5-person team under strict CI and review discipline.
15
LAUNCH CONDITIONS (LICS)
LIC 0, 6, 11 + helpers
PERSONALLY IMPLEMENTED
2 reviewers + CI
REVIEW GATE
Overview
DECIDE is a famous specification from the software-engineering literature: a hypothetical anti-ballistic-missile system that must evaluate 15 geometric Launch Interceptor Conditions (LICs) against 2D radar tracking data and produce a launch / no-launch decision. The spec is deliberately precise and deliberately treacherous — it punishes teams that code before they read.
What I did
- Implemented LIC 0, 6, and 11 plus shared geometric helper functions — point-to-line distances, circumradius checks, and the angle and area predicates several conditions share.
- Initialized the repository and the CI/CD pipeline with GitHub Actions, building and running the unit test suite on every push and pull request from day one.
- Helped enforce the team's two-stage branch protection workflow (feature → dev → main) with mandatory two-reviewer approval and green CI before any merge — main stayed stable for the entire project.
- Drove the adoption of Conventional Commits (
feat:,fix:,test:,docs:) and consistent naming conventions, keeping the commit history reviewable for a 5-person team moving fast.
What I learned
Geometry code fails silently: a wrong epsilon or a degenerate triangle doesn't crash, it just quietly returns the wrong boolean to a missile-launch decision. The only defence is the one the spec forces on you — exhaustive unit tests on every boundary condition, written from the spec rather than from the code.
APPENDIX A // MEDIA
IMAGE SLOT — AWAITING UPLOAD