Technical Due Diligence: What Investors Actually Evaluate in Your Engineering Organization
Investors and acquirers evaluate far more than codebase quality during technical due diligence. This guide covers every dimension they examine: architecture scalability, CI/CD maturity, test coverage, dependency health, security posture, bus factor, tech debt, infrastructure costs, and documentation. Includes a self-assessment checklist founders can run before fundraising.
Most founders approach technical due diligence the same way they approached their first code review: hoping the reviewer doesn’t look too hard. That is a losing strategy.
The technical advisors investors use are not there to admire your architecture. They are there to find leverage in the negotiation, or reasons to walk away. What they evaluate is not what most founders expect. It is less about clever system design and more about operational evidence: does your engineering organization make sustainable, predictable decisions, or does it accumulate risk?
This guide covers every dimension that gets evaluated, what a red flag looks like in each area, and how to run your own pre-fundraise assessment before someone else does it for you.
What Actually Gets Evaluated
A typical Seed or Series A technical advisor spends 8-20 hours across your codebase, infrastructure, documentation, and team interviews. Acquirers go deeper, sometimes 40-80 hours across multiple reviewers. The evaluation covers ten areas:
- Codebase quality signals
- Architecture scalability
- CI/CD maturity
- Test coverage and types
- Dependency health
- Security posture
- Team structure and bus factor
- Technical debt quantification
- Infrastructure cost efficiency
- Documentation
Each area has specific signals that pass and specific signals that create problems. Understanding the difference before diligence starts is the entire game.
Codebase Quality Signals
Investors do not read your codebase the way a new hire would. They look for patterns: consistency, evidence of code review, naming conventions, test-to-code ratios, and the presence (or absence) of obvious shortcuts.
What passes: Consistent style across files, enforced via linting config checked into version control. PR history showing substantive reviews with comments and requested changes. A clear directory structure that reflects domain boundaries, not just “models, controllers, utils.” Type coverage in TypeScript codebases at or above 90%.
What fails: Files that were clearly written by different people with incompatible conventions, with no shared config enforcing anything. Long functions (500+ lines) with no comments. A utils.ts file containing 3,000 lines of uncategorized helpers. Commented-out code blocks from six months ago. console.log statements in production code paths.
The consistent thread through failing signals is that they suggest the team does not enforce shared standards, which means the codebase degrades over time instead of improving.
Architecture Scalability Assessment
Founders most often over-prepare here in the wrong direction. Advisors are not impressed by complex distributed architectures at early stage. They want to know whether you understand your load ceilings and have a credible plan for what follows them.
The questions they will ask:
- What happens to your database when user count increases 10x?
- Are there synchronous third-party API calls in your request path?
- What is the current p99 latency for your most critical endpoints?
- What parts of your architecture require a full rewrite to scale?
Founders with factual answers pass. Founders who have not thought about it fail, even if the underlying architecture is sound.
Scalability red flags:
- Single database with no read replicas and no connection pooling
- Synchronous calls to payment processors or email providers in the request path with no circuit breakers
- Job queues with no visibility into depth or failure rates
- No caching anywhere in a read-heavy path
- Monolithic deployment with no graceful degradation on component failure
None of these are automatically disqualifying if you know they exist and can articulate the remediation. They become problems when you are surprised by them during diligence.
CI/CD Maturity
Deployment process is hard to fake. Either you have an automated pipeline that runs consistently, or you do not. The evidence is in your commit history, deployment logs, and the answers your engineers give when asked “how do you ship?”
Maturity levels:
| Level | Description | Investor Read |
|---|---|---|
| 0 | Manual deployment via SSH or local scripts | Significant operational risk; expect repricing |
| 1 | Automated build, manual deploy trigger | Acceptable at pre-seed; needs improvement roadmap |
| 2 | Automated build and deploy on merge to main | Standard baseline; passes without comment |
| 3 | Feature flags, staged rollouts, automated rollback | Strong signal; above average for stage |
| 4 | Deployment frequency tracked, DORA metrics visible | Rare at Series A; very positive signal |
At Series A, level 2 is the minimum that does not generate findings. Level 1 with a specific, short roadmap to level 2 is acceptable.
Signals that matter: Does CI run on every PR? A full run over 30 minutes suggests no one maintains it. Can you describe your rollback procedure and have you performed one in the last 90 days?
Test Coverage and Types
Coverage numbers alone are meaningless. 80% coverage that is 100% trivial getter/setter tests is worse than 40% coverage of the paths that matter. Advisors will ask to see specific test scenarios, not just the aggregate.
What they look for:
Unit test distribution. Tests should concentrate on business logic: pricing calculations, payment processing, authorization rules. A codebase where all tests are on model validation and none on billing logic is a red flag regardless of the aggregate number.
Integration tests for critical paths. Signup, login, payment, and the core workflow. Tests that exercise these end-to-end against a real database are worth more than a hundred isolated unit tests.
Tests that run in CI. Tests that exist but do not run automatically are aspirational documentation. Advisors check the CI configuration, not just the test directory.
Test maintenance signals. When was the last test commit? A test-to-production commit ratio skewed heavily toward production code over the past three months means test coverage is degrading as features ship.
Quick heuristic: Would your test suite catch calculateMonthlyBilling() returning undefined? If not, the tests are not covering what matters.
Dependency Health
Dependency management is one of the most neglected areas of startup engineering and one of the most reliable signals of overall engineering discipline. The state of your package.json or requirements.txt tells an advisor a lot about how your team operates.
What gets flagged:
- Severely outdated runtimes. Node 16 (EOL since 2023), Python 3.8 (EOL since 2024). Running EOL runtimes means no security patches and no access to newer language features. It signals the team avoids upgrade work.
- Known critical CVEs.
npm auditorpip-auditwith critical findings that are months old. The finding itself is less damaging than the evidence that no one acted on it. - Abandoned dependencies. Libraries with no commits in 3+ years, especially for packages handling authentication, cryptography, or file processing.
- Dependency count outliers. A 1,200-line
node_modulestree for a simple CRUD API suggests the team reaches for packages instead of writing code. Not fatal, but it increases supply chain risk. - No lockfile or an unlocked lockfile.
package-lock.jsonoryarn.locknot checked into version control means builds are not reproducible.
What a healthy posture looks like: Regular Dependabot or Renovate PRs in commit history. A lockfile updated in the same PR as the dependency change. A clear policy for how long critical CVEs can remain open (24-48 hours is defensible; “we’ll get to it” is not).
Security Posture
Security findings are the most likely to derail or reprice a deal, particularly for B2B SaaS products where enterprise customers will run their own security assessments before signing. Investors know this and evaluate accordingly.
The scan that always happens: Before any interview, a technical advisor will run a scan of your public repository and check for secrets in git history. The command is straightforward:
# Advisors run something like this before the first call
git log --all --full-history -p | grep -E "(password|secret|api_key|token|credential)" -i
Secrets that appear in version history do not disappear when you rotate them. The history is permanent. This finding alone can cause deals to pause while legal evaluates exposure.
The security checklist advisors work from:
| Area | Minimum Acceptable | Strong Signal |
|---|---|---|
| Secrets management | Environment variables in deployment config; no secrets in code | Vault, AWS Secrets Manager, or equivalent; secrets rotated on schedule |
| Dependency CVEs | No critical CVEs open more than 30 days | Automated scanning in CI; Dependabot enabled |
| Authentication | Industry-standard library (Auth0, Clerk, NextAuth); no hand-rolled JWT validation | MFA available; session management documented |
| Authorization | Role-based access control; server-side enforcement | Audit logs for sensitive operations; row-level security in DB |
| Input validation | Validation on all user inputs before DB writes | Parameterized queries everywhere; no string interpolation in queries |
| Rate limiting | Rate limiting on authentication endpoints | Rate limiting across all public API endpoints |
| HTTPS | All production traffic over HTTPS | HSTS enabled; no mixed content |
| Third-party exposure | Least-privilege API keys for external services | Regular key rotation; keys scoped per environment |
Team Structure and Bus Factor
Bus factor is the number of people who would need to leave for a critical system to become unmaintainable. A bus factor of 1 is a material risk for any revenue-generating system.
Advisors assess this through interviews, code authorship analysis, and documentation review. They will ask your engineers directly: “Who else could ship a change to the payment system without your involvement?” and “If you were out for two weeks, what would block?”
Structural red flags:
- One engineer wrote 70%+ of production code and is the only reviewer for changes to it
- Billing, auth, or data pipeline knowledge lives entirely in one person’s head
- No on-call documentation, meaning incidents require waking up the original author
- No ADRs, meaning the “why” behind critical decisions is undocumented
What passes: Runbooks for the five most common production incidents. PR reviews showing multiple substantive reviewers. An architecture document a new engineer could use in week one. At least two people who can operate each critical subsystem.
Technical Debt Quantification
Every codebase has technical debt. This is not a red flag. The red flag is not knowing what your debt is, having no way to measure it, and having no plan for it.
Technical advisors distinguish between two types of debt:
Intentional debt is shortcuts taken consciously to ship faster, with a known remediation cost and timeline. “We used an in-process job queue to ship the v1. We’ll migrate to a managed queue once we hit 100 jobs/minute. Three sprints.” Acceptable, and it signals maturity.
Accidental debt accumulates when shortcuts are taken without documentation and forgotten. Nobody knows what is there, which makes it impossible to estimate the remediation cost. That unknowability is what investors price in.
How to quantify your debt before diligence: Run a one-day audit with your senior engineers. For each codebase area, answer three questions: What shortcuts were taken? What is the cost if we never address this? What would it take to fix it?
Produce a table:
| Area | Debt Description | Severity | Impact if Unaddressed | Remediation Estimate |
|---|---|---|---|---|
| Job processing | In-process queue; data loss on crash | High | Lost jobs at scale | 3 sprints |
| Search | Full table scan for search queries | Medium | Slow search above 100K records | 2 sprints |
| Reporting | Reports generated synchronously | Low | User-facing timeouts at scale | 1 sprint |
Bring this table to diligence. Investors are not looking for zero debt. They are looking for self-awareness and a plan.
Infrastructure Cost Efficiency
Infrastructure cost surfaces as a unit economics question even at Seed. Advisors want to know whether you can grow revenue without growing infrastructure costs proportionally, and whether there is obvious waste.
What gets flagged:
- Over-provisioned compute. Advisors will compare your cloud cost dashboard against resource utilization metrics. A database instance at 8% CPU average is a signal.
- No per-customer cost visibility. Especially material in AI/ML products where inference costs dominate. If you do not know what a customer costs you to serve, you cannot defend your pricing model.
- Always-on dev/staging environments. Development and staging left running full-time when they could be shut down.
- Orphaned resources. Unused Lambda functions, forgotten snapshots, unattached volumes. Small individually, significant in aggregate, and a signal of no housekeeping discipline.
- No cost alerting. Billing alerts are a basic operational control. Their absence suggests infrastructure is not actively managed.
Benchmark: Infrastructure as a percentage of revenue. For early-stage SaaS, 5-15% is acceptable. Above 25% requires a credible explanation about where it goes and how it scales.
Documentation
Documentation is a proxy for engineering culture. A team that writes things down shares context through systems. A team that does not is dependent on specific people being available.
The five documents that matter:
Architecture overview. A written document (not slides) explaining what the system does, how components interact, and where data flows. A new senior engineer should be able to read it in 30 minutes and ask productive questions on their first PR.
Runbooks. How to restart a failed service, investigate error rate spikes, and restore from backup. These must live in the repository, not in one person’s Notion workspace.
ADRs. Architecture Decision Records explain why major decisions were made. The decisions matter less than the evidence that they were deliberate. Three well-written ADRs signal more maturity than thirty wiki pages of implementation notes.
Incident post-mortems. Documented root causes and follow-through actions. Zero documented incidents is not a good sign; advisors will interpret it as “no observability.”
Onboarding guide. If a new engineer needs a week of conversations to make their first commit, that is a bus-factor signal masquerading as a documentation gap.
Pre-Fundraising Self-Assessment Checklist
Run this six to nine months before your target fundraise date. Issues found now can be addressed. Issues found during diligence become negotiating leverage against you.
Codebase
- Linting and formatting configs checked into version control and enforced in CI
- No
console.logstatements in production code paths - TypeScript strict mode enabled, or a documented plan to enable it
- No commented-out code blocks older than 30 days
- PR history shows substantive reviews, not rubber-stamp approvals
CI/CD
- CI runs on every pull request, not just on main
- Full CI run completes in under 20 minutes
- Deployment to production is automated (no manual SSH steps)
- Rollback procedure exists and has been tested in the last 90 days
- Deployment frequency is at least weekly
Testing
- Tests run in CI on every PR
- Critical user flows (signup, payment, core workflow) have integration tests
- Test coverage is concentrated on business logic, not just models
- Test suite last updated within the past two weeks
- Removing a critical function would cause at least one test to fail
Dependencies
- No EOL runtimes (Node, Python, Ruby) in production
-
npm auditor equivalent shows zero critical CVEs - Lockfile checked into version control
- Dependabot or Renovate enabled
- No dependency with zero commits in 3+ years in critical code paths
Security
-
git log --all --full-history -p | grep -i "password\|secret\|api_key"returns nothing damaging - Secrets loaded from environment variables or secrets manager, not code
- Authentication uses an established library, not hand-rolled JWT
- All API endpoints have authorization checks server-side
- Rate limiting on authentication and sensitive endpoints
- All production traffic over HTTPS with HSTS
Team and Bus Factor
- At least two engineers can operate each critical subsystem
- Runbooks exist for the top five production incident types
- New engineer onboarding documented; first commit achievable in under 3 days
- Architecture decision records exist for major past decisions
- Code authorship spread across at least two engineers for critical paths
Technical Debt
- Technical debt inventory documented (area, severity, remediation estimate)
- Debt backlog visible to the whole team, not just the CTO
- At least one debt item addressed in the past 60 days
Infrastructure
- Cloud cost dashboard reviewed monthly
- Billing alerts configured for anomalous spend
- Infrastructure cost as a percentage of revenue calculated and tracked
- Dev/staging environments shut down when not in use
- No orphaned resources (unused functions, unattached volumes, forgotten snapshots)
Documentation
- Architecture overview document exists and was updated in the past 90 days
- Runbooks for critical operations checked into version control
- At least three ADRs for major technical decisions
- At least two production incident post-mortems written and shared with the team
What Passes vs. What Fails
Investors are not looking for a perfect engineering organization. They are looking for one that knows itself.
What passes: A technical debt inventory with estimates, even if the debt is substantial. A CI pipeline that is slow but consistently green. A security posture with no critical open issues and visible maintenance activity. A three-person team where bus factor is mitigated by runbooks and cross-training.
What fails: Surprise. Critical CVEs open for six months. Secrets in git history the founder did not know about. A “no time for documentation” culture where every system depends on one person’s memory. A test suite the team cannot describe beyond “it exists.”
Working through the checklist above honestly, with your senior engineers, six months before fundraising is the most effective preparation available. Advisors are good at distinguishing organizations that are early and honest from those that are hiding things. The former gets a fair valuation. The latter gets repriced or passed on.
More in Engineering Management
The AI Productivity Paradox: Why Your Team Ships More Code but Delivers Less
AI coding tools create an illusion of velocity at the individual level while degrading team-level delivery, quality, and maintainability. The core mechanism is a 5x+ senior/junior productivity split that aggregate metrics hide entirely.
The AI Productivity Paradox: Why Your Team Ships More Code but Delivers Less Value
93% of developers use AI coding tools, yet DORA metrics haven't improved proportionally. Individual output rises while bug rates, review times, and deployment instability climb. Here is why individual AI productivity gains create organizational drag, and how to fix it with architecture-level guardrails.
Why Your Engineering Team Is Shipping Slower Than 6 Months Ago
Engineering velocity declines at seed-to-Series-A startups for predictable, diagnosable reasons. Process debt, unclear ownership, hiring mistakes, burnout, and architectural bottlenecks all compound. Here is a diagnostic framework you can run in one afternoon, plus a tradeoffs table for each intervention.
The AI Ratchet Effect: Why Giving Your Engineering Team AI Tools Made Them Work Harder, Not Smarter
67% of engineers who adopted AI tools in 2025 worked more hours by year-end, not fewer. This is the AI ratchet effect: management converts every productivity gain into a permanently higher baseline. Here is how it happens, why it is worse at startups, and what a sustainable AI adoption cadence actually looks like.