Processes¶
Client Engagement¶
Discovery & Onboarding¶
1. Initial Contact - Email or call to discuss project needs - Free 30-minute discovery call - High-level requirements gathering
2. Technical Assessment - Review existing systems (if applicable) - Discuss technical requirements and constraints - Identify potential challenges and risks - Propose technical approach
3. Proposal - Detailed scope of work - Timeline with key milestones - Cost estimate (fixed price or rate structure) - Technology recommendations - Team composition
4. Contract & Kick-off - Sign agreement and NDA (if needed) - Set up communication channels (Slack, email) - Access to repositories, tools, documentation - Initial planning session
Project Execution¶
Sprint Structure - Typical sprint length: 1-2 weeks - Flexible based on project needs and client preferences
Communication Cadence - Progress updates: Weekly (or as agreed) - Demos: End of each sprint or milestone - Standups: Optional, based on team preference - Ad-hoc communication: Slack/email for quick questions
Delivery Process - Feature branches for all work - Pull requests with descriptions and context - Code reviews before merging - Continuous deployment to staging - Production deployments after client approval
Documentation - Technical decisions documented as we go - API documentation (OpenAPI/Swagger) - Architecture diagrams for complex systems - Setup and deployment guides - Handover documentation for project completion
Quality Assurance¶
Testing Standards - Unit tests for business logic - Integration tests for critical paths - E2E tests for key user flows - Manual testing before production deployment
Code Quality - TypeScript strict mode enabled - Linting (ESLint, Credo for Elixir) - Code formatting (Prettier, mix format) - Static analysis tools - Code reviews on all changes
Security - Dependency vulnerability scanning - Secrets management (never commit credentials) - Authentication and authorization best practices - HTTPS/TLS by default - Regular security updates
Service Levels & Escalation¶
- Response times: Within 1 business day for normal requests, same-business-day for blockers. Critical incidents: acknowledge in ≤1 hour during business hours.
- Incident comms: Single incident channel/thread, timestamped updates until resolution; post-incident summary with action items.
- Escalation: If blocked >1 business day, escalate to both founders and the client lead; we surface tradeoffs early with options.
- Availability: Normal hours EET; extended/after-hours support only if contracted.
Project Completion¶
Deliverables - Production-ready code in your repository - Comprehensive documentation - Infrastructure as Code (if applicable) - CI/CD pipeline configured - Monitoring and alerting set up
Handover - Code walkthrough sessions - Documentation review - Deployment process demonstration - Knowledge transfer to your team - Post-launch support (if included) - Handover checklist: access/credential rotation, alerts/ownership transferred, runbooks verified, infra diagrams stored, admin accounts handed off.
Post-Project - Maintenance retainer (optional) - Ad-hoc support available - Open to future projects
Engagement Models (Recap)¶
- Time & Materials - Flexible scope, billed hourly/daily; good for evolving projects and rapid iteration.
- Fixed Price - Defined scope and price; good for clear requirements and tight budgets.
- Retainer - Reserved capacity monthly; good for ongoing support, predictable velocity, and quick response.
Development Practices¶
Definition of Ready¶
- Clear user story or goal with acceptance criteria
- Dependencies identified and unblocked
- Test data/fixtures available
- Impacted systems and risks noted
Definition of Done¶
- Functionality implemented with tests
- Documentation updated (README/ADR/API)
- Monitoring/alerts updated if needed
- Deployed to agreed environment and demonstrated
- No high-severity bugs open for the scope
Version Control¶
- Git with feature branch workflow
- Meaningful commit messages
- Pull requests for all changes
- Protected main/production branches
CI/CD¶
- Automated testing on every push
- GitHub Actions or GitLab CI
- Automated deployments to staging
- Manual approval for production
- Rollback procedures documented
Code Quality Standards¶
- TypeScript strict mode
- Comprehensive linting rules
- Code formatting enforced
- No warnings in production builds
- Regular dependency updates
Testing Approach¶
- Test-driven development when appropriate
- Unit tests for business logic
- Integration tests for API endpoints
- E2E tests for critical user journeys
- Minimum 70% code coverage for critical modules
Communication¶
With Clients¶
- Regular, transparent updates
- Proactive communication about blockers
- Clear explanations of technical decisions
- Realistic timelines and estimates
- No surprises
Internal¶
- Async-first for non-urgent matters
- Quick sync calls when needed
- Document all decisions
- Share context proactively
Tools¶
Development¶
- Git, GitHub/GitLab
- VS Code, Neovim
- Docker, Docker Compose
- Postman, curl for API testing
Project Management¶
- Linear, GitHub Projects
- Asana, Jira (client preference)
- Notion for documentation
Communication¶
- Slack (primary)
- Zoom, Google Meet
- Email for formal communications
For more tools and resources, see resources.
Principles¶
Quality over speed We don't cut corners. Proper testing, code reviews, and documentation are non-negotiable.
Automate repetitive tasks If we do something more than twice, we automate it. This includes testing, deployments, and data processing.
Security by default Security isn't an afterthought. We build secure systems from the start.
Transparent communication Regular updates, honest timelines, and proactive problem-solving. No hiding issues until they become crises.
Pragmatic technology choices Choose boring, proven technology over shiny new frameworks. Use the right tool for the job.
Documentation as we go Document while building, not as an afterthought. Future developers (including us) will thank us.