# Codebase Exploration Checklist Systematic checklist for understanding a new codebase. ## Initial Overview ### Documentation Review - [ ] Read README.md thoroughly - [ ] Review CONTRIBUTING.md for guidelines - [ ] Check ARCHITECTURE.md or design docs - [ ] Read recent CHANGELOG entries - [ ] Review LICENSE and any legal requirements - [ ] Check CODE_OF_CONDUCT.md - [ ] Read SECURITY.md for vulnerability reporting ### Project Metadata - [ ] Identify project purpose and scope - [ ] Understand target users/audience - [ ] Note primary programming language(s) - [ ] Check framework/platform used - [ ] Identify project maturity (alpha/beta/stable) - [ ] Review release cadence - [ ] Check activity level (recent commits) --- ## Repository Structure ### Directory Mapping - [ ] Identify main source directory (src/, lib/, app/) - [ ] Locate test directory (test/, tests/, __tests__/) - [ ] Find documentation (docs/, doc/) - [ ] Identify build output (dist/, build/, target/) - [ ] Locate configuration files (config/, .config/) - [ ] Find examples/samples (examples/, samples/) - [ ] Check for scripts (scripts/, tools/, bin/) ### Organization Pattern - [ ] Determine organization principle: - [ ] By feature (user/, product/, order/) - [ ] By layer (models/, views/, controllers/) - [ ] By type (components/, utils/, services/) - [ ] Hybrid approach - [ ] Note any special directories - [ ] Understand separation of concerns - [ ] Identify public vs internal code --- ## Build System & Dependencies ### Package Management - [ ] Identify package manager (npm, yarn, pip, cargo, maven) - [ ] Locate package manifest (package.json, requirements.txt, Cargo.toml) - [ ] Review dependencies and their purposes - [ ] Check for peer dependencies - [ ] Note any unusual or unfamiliar dependencies - [ ] Check dependency versions and compatibility ### Build Configuration - [ ] Identify build tool (webpack, vite, rollup, gradle) - [ ] Locate build configuration files - [ ] Understand build process - [ ] Check for multiple build targets (dev, prod) - [ ] Note output artifacts - [ ] Identify entry points ### Setup & Installation - [ ] Follow setup instructions in README - [ ] Install dependencies successfully - [ ] Verify development environment works - [ ] Run development server/app - [ ] Check for environment variable requirements - [ ] Note any platform-specific setup --- ## Code Conventions ### Naming Conventions - [ ] File naming pattern: - [ ] kebab-case, PascalCase, snake_case, camelCase - [ ] Extensions used (.ts, .tsx, .js, .jsx, .py, .rs) - [ ] Directory naming pattern - [ ] Component/class naming (PascalCase, etc) - [ ] Function/method naming (camelCase, snake_case) - [ ] Variable naming (camelCase, snake_case) - [ ] Constant naming (UPPER_SNAKE_CASE, kConstant) - [ ] Private member naming (_private, #private, __private) - [ ] Boolean naming (isX, hasY, shouldZ) ### Code Style - [ ] Indentation (tabs vs spaces, size) - [ ] Line length limit - [ ] Quote style (single, double) - [ ] Semicolon usage - [ ] Brace style (same line, new line) - [ ] Import organization and ordering - [ ] Blank line conventions - [ ] Trailing comma usage ### Formatting Tools - [ ] Check for .editorconfig - [ ] Look for .prettierrc or prettier.config.js - [ ] Check for .eslintrc or eslint.config.js - [ ] Find other linter configs (.pylintrc, rustfmt.toml) - [ ] Run formatter to see changes - [ ] Run linter to check compliance --- ## Testing ### Test Framework - [ ] Identify testing framework (Jest, pytest, JUnit, etc) - [ ] Locate test configuration - [ ] Understand test file naming convention - [ ] Check test location pattern (co-located vs separate) - [ ] Note test file extensions ### Test Structure - [ ] Identify test structure pattern: - [ ] describe/it (Jest, Mocha) - [ ] test_ prefix (pytest) - [ ] Test* classes (JUnit) - [ ] #[test] attributes (Rust) - [ ] Check for test helpers/utilities - [ ] Review fixture patterns - [ ] Understand mocking approach - [ ] Note setup/teardown patterns ### Test Commands - [ ] Run all tests: [command] - [ ] Run specific test file: [command] - [ ] Run with coverage: [command] - [ ] Run in watch mode: [command] - [ ] Run integration tests: [command] - [ ] Run e2e tests: [command] ### Test Coverage - [ ] Check coverage tool (nyc, coverage.py, tarpaulin) - [ ] Find coverage configuration - [ ] Identify coverage thresholds - [ ] Locate coverage reports - [ ] Check what's excluded from coverage ### Test Patterns - [ ] Review 3-5 existing tests - [ ] Identify assertion library/style - [ ] Understand test data approach - [ ] Note how mocks are created - [ ] Check async test patterns - [ ] Review error/exception testing - [ ] Understand snapshot testing (if used) --- ## Development Workflow ### Running Locally - [ ] Start development server: [command] - [ ] Build for development: [command] - [ ] Build for production: [command] - [ ] Watch mode: [command] - [ ] Clean build: [command] ### Code Quality - [ ] Lint code: [command] - [ ] Fix linting issues: [command] - [ ] Format code: [command] - [ ] Type check (if applicable): [command] - [ ] Run pre-commit checks: [command] ### Git Workflow - [ ] Check branching strategy (git flow, trunk-based) - [ ] Understand branch naming convention - [ ] Review commit message format - [ ] Check for commit hooks (husky, pre-commit) - [ ] Note PR/merge requirements - [ ] Understand rebase vs merge policy --- ## CI/CD ### Continuous Integration - [ ] Identify CI system (GitHub Actions, Travis, CircleCI) - [ ] Locate CI configuration (.github/workflows/, .travis.yml) - [ ] Review CI jobs/pipelines - [ ] Understand what CI checks: - [ ] Tests - [ ] Linting - [ ] Type checking - [ ] Build - [ ] Coverage - [ ] Security scanning - [ ] Note CI environment differences - [ ] Check if CI runs on all branches or just some ### Deployment - [ ] Check deployment process - [ ] Identify deployment targets (npm, docker, cloud) - [ ] Review deployment configuration - [ ] Understand release process - [ ] Note versioning strategy (semver, calver) --- ## Architecture & Patterns ### Overall Architecture - [ ] Identify architectural pattern: - [ ] MVC/MVP/MVVM - [ ] Layered - [ ] Clean Architecture - [ ] Microservices - [ ] Monolithic - [ ] Component-based - [ ] Understand data flow - [ ] Identify key abstractions - [ ] Note separation of concerns - [ ] Check dependency direction ### Design Patterns - [ ] Identify common design patterns used: - [ ] Factory - [ ] Strategy - [ ] Observer - [ ] Decorator - [ ] Adapter - [ ] Singleton - [ ] Repository - [ ] Service - [ ] Note framework-specific patterns - [ ] Understand composition patterns ### State Management (if applicable) - [ ] Identify state management approach: - [ ] Redux/Zustand/MobX - [ ] Context API - [ ] Local state - [ ] Server state (React Query, SWR) - [ ] Understand state organization - [ ] Note where state lives - [ ] Check for state persistence ### API/Interface Patterns - [ ] Identify API style (REST, GraphQL, gRPC) - [ ] Understand error handling pattern - [ ] Note validation approach - [ ] Check authentication/authorization pattern - [ ] Review data serialization --- ## Language/Framework Specifics ### JavaScript/TypeScript - [ ] Check ES version target - [ ] Note module system (ESM, CommonJS) - [ ] Review TypeScript config (if TS) - [ ] Check for type definitions - [ ] Note async patterns (Promise, async/await) - [ ] Review bundler configuration ### Python - [ ] Check Python version - [ ] Note import style (absolute vs relative) - [ ] Review requirements/dependencies - [ ] Check for virtual environment usage - [ ] Note async patterns (asyncio, threading) - [ ] Review packaging configuration (setup.py, pyproject.toml) ### Rust - [ ] Check Rust edition - [ ] Review Cargo.toml features - [ ] Note error handling pattern (Result, panic) - [ ] Check for unsafe code usage - [ ] Review trait usage patterns - [ ] Note lifetime annotation style ### Go - [ ] Check Go version - [ ] Review module dependencies (go.mod) - [ ] Note package organization - [ ] Check error handling pattern - [ ] Review interface usage - [ ] Note concurrency patterns (goroutines, channels) --- ## Finding Similar Code ### Reference Examples - [ ] Find examples of similar features - [ ] Locate comparable components - [ ] Identify similar bug fixes - [ ] Review similar tests - [ ] Check similar API endpoints - [ ] Find analogous utilities ### Search Strategies ```bash # Find similar files find . -name "*[similar-name]*" # Find similar patterns rg "pattern" --type [lang] # Find similar classes/functions rg "class.*Name|function.*Name" # Find usages rg "functionName\(" # Find similar tests rg "test.*similar|describe.*Similar" ``` --- ## Code Reading ### Entry Points - [ ] Identify main entry point (main.js, __main__.py, main.rs) - [ ] Find route definitions (for web apps) - [ ] Locate command definitions (for CLI tools) - [ ] Identify public API (for libraries) - [ ] Find initialization code ### Core Components - [ ] Identify 3-5 most important modules - [ ] Understand their responsibilities - [ ] Note their relationships - [ ] Review their interfaces - [ ] Check their dependencies ### Code Flow - [ ] Trace a simple user action - [ ] Follow a typical request path - [ ] Understand data transformations - [ ] Note side effects - [ ] Identify external calls --- ## Documentation ### Inline Documentation - [ ] Check documentation style (JSDoc, docstrings, rustdoc) - [ ] Review documentation coverage - [ ] Note documentation patterns - [ ] Check for examples in docs - [ ] Review parameter documentation ### External Documentation - [ ] Check for API documentation - [ ] Review user guides - [ ] Find developer guides - [ ] Look for architecture diagrams - [ ] Check for decision records (ADRs) --- ## Security & Performance ### Security Practices - [ ] Check input validation patterns - [ ] Review authentication approach - [ ] Understand authorization checks - [ ] Note data sanitization - [ ] Check for security warnings in dependencies - [ ] Review secrets management ### Performance Considerations - [ ] Identify performance-critical paths - [ ] Check for caching strategies - [ ] Note optimization patterns - [ ] Review resource management - [ ] Check for profiling tools --- ## Community & Contribution ### Communication Channels - [ ] Find discussion forum/Discord/Slack - [ ] Locate issue tracker - [ ] Check for mailing list - [ ] Find meeting notes (if any) - [ ] Review RFCs or proposals ### Contribution Process - [ ] Review issue labels and meanings - [ ] Understand PR template requirements - [ ] Check review process - [ ] Note testing requirements - [ ] Understand merge criteria --- ## Project-Specific Notes ### Custom Conventions - [ ] Note any unusual patterns - [ ] Document project-specific terms - [ ] Record special requirements - [ ] Note gotchas or common mistakes - [ ] List helpful resources ### Tool-Specific Setup - [ ] IDE/editor configuration - [ ] Debugging setup - [ ] Testing utilities - [ ] Code generation tools - [ ] Development aids --- ## Completion Checklist Before considering exploration complete: - [ ] Can navigate the codebase confidently - [ ] Understand main architecture and patterns - [ ] Know where to find things - [ ] Can run, build, and test locally - [ ] Understand contribution workflow - [ ] Have found reference examples - [ ] Know project conventions - [ ] Can ask informed questions - [ ] Ready to start implementation --- ## Notes Template Use this to record your findings: ```markdown # Codebase Exploration Notes: [Project Name] **Date:** [date] **For Issue:** #[number] ## Quick Reference - Main language: [language] - Framework: [framework] - Test command: [command] - Dev server: [command] ## Structure [Key directory map] ## Conventions [Important patterns to follow] ## Similar Code [Reference examples for my work] ## Questions [Things still unclear] ## Ready to Code [Specific files/functions I'll modify] ```