blockmine 1.20.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/README.md +469 -0
- package/.claude/agents/auth-route-debugger.md +118 -0
- package/.claude/agents/auth-route-tester.md +93 -0
- package/.claude/agents/auto-error-resolver.md +97 -0
- package/.claude/agents/build-optimizer.md +236 -0
- package/.claude/agents/code-architecture-reviewer.md +83 -0
- package/.claude/agents/code-refactor-master.md +94 -0
- package/.claude/agents/cost-optimizer.md +134 -0
- package/.claude/agents/deployment-orchestrator.md +113 -0
- package/.claude/agents/documentation-architect.md +82 -0
- package/.claude/agents/frontend-error-fixer.md +77 -0
- package/.claude/agents/iac-code-generator.md +71 -0
- package/.claude/agents/incident-responder.md +346 -0
- package/.claude/agents/infrastructure-architect.md +31 -0
- package/.claude/agents/kubernetes-specialist.md +56 -0
- package/.claude/agents/migration-planner.md +181 -0
- package/.claude/agents/network-architect.md +196 -0
- package/.claude/agents/plan-reviewer.md +52 -0
- package/.claude/agents/refactor-planner.md +63 -0
- package/.claude/agents/security-scanner.md +102 -0
- package/.claude/agents/web-research-specialist.md +78 -0
- package/.claude/commands/cost-analysis.md +315 -0
- package/.claude/commands/dev-docs-update.md +55 -0
- package/.claude/commands/dev-docs.md +51 -0
- package/.claude/commands/incident-debug.md +247 -0
- package/.claude/commands/infra-plan.md +81 -0
- package/.claude/commands/migration-plan.md +478 -0
- package/.claude/commands/route-research-for-testing.md +37 -0
- package/.claude/commands/security-review.md +66 -0
- package/.claude/hooks/CONFIG.md +448 -0
- package/.claude/hooks/README.md +163 -0
- package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
- package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
- package/.claude/hooks/add-skill-activation-banners.ts +132 -0
- package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
- package/.claude/hooks/error-handling-reminder.sh +12 -0
- package/.claude/hooks/error-handling-reminder.ts +222 -0
- package/.claude/hooks/k8s-manifest-validator.sh +56 -0
- package/.claude/hooks/package-lock.json +556 -0
- package/.claude/hooks/package.json +16 -0
- package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
- package/.claude/hooks/post-tool-use-tracker.sh +183 -0
- package/.claude/hooks/security-policy-check.sh +247 -0
- package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
- package/.claude/hooks/skill-activation-prompt.sh +10 -0
- package/.claude/hooks/skill-activation-prompt.ts +141 -0
- package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
- package/.claude/hooks/terraform-validator.sh +53 -0
- package/.claude/hooks/test-input.json +7 -0
- package/.claude/hooks/test-skill-activation.ts +427 -0
- package/.claude/hooks/trigger-build-resolver.sh +79 -0
- package/.claude/hooks/tsc-check.sh +173 -0
- package/.claude/hooks/tsconfig.json +19 -0
- package/.claude/settings.json +55 -0
- package/.claude/settings.local.json +28 -3
- package/.claude/skills/README.md +507 -0
- package/.claude/skills/api-engineering/SKILL.md +63 -0
- package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
- package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
- package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
- package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
- package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
- package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
- package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
- package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
- package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
- package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
- package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
- package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
- package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
- package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
- package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
- package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
- package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
- package/.claude/skills/build-engineering/SKILL.md +431 -0
- package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
- package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
- package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
- package/.claude/skills/build-engineering/resources/build-security.md +95 -0
- package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
- package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
- package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
- package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
- package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
- package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
- package/.claude/skills/cloud-engineering/SKILL.md +675 -0
- package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
- package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
- package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
- package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
- package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
- package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
- package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
- package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
- package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
- package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
- package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
- package/.claude/skills/cybersecurity/SKILL.md +409 -0
- package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
- package/.claude/skills/database-engineering/SKILL.md +61 -0
- package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
- package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
- package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
- package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
- package/.claude/skills/devsecops/SKILL.md +374 -0
- package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
- package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
- package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
- package/.claude/skills/devsecops/resources/container-security.md +915 -0
- package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
- package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
- package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
- package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
- package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
- package/.claude/skills/devsecops/resources/security-testing.md +203 -0
- package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
- package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
- package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
- package/.claude/skills/documentation-as-code/SKILL.md +323 -0
- package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
- package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
- package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
- package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
- package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
- package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
- package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
- package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
- package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
- package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
- package/.claude/skills/engineering-management/SKILL.md +356 -0
- package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
- package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
- package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
- package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
- package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
- package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
- package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
- package/.claude/skills/error-tracking/SKILL.md +379 -0
- package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
- package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
- package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
- package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
- package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
- package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
- package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
- package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
- package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
- package/.claude/skills/general-it-engineering/SKILL.md +393 -0
- package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
- package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
- package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
- package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
- package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
- package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
- package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
- package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
- package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
- package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
- package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
- package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
- package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
- package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
- package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
- package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
- package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
- package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
- package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
- package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
- package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
- package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
- package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
- package/.claude/skills/network-engineering/SKILL.md +385 -0
- package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
- package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
- package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
- package/.claude/skills/network-engineering/resources/network-security.md +921 -0
- package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
- package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
- package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
- package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
- package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
- package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
- package/.claude/skills/observability-engineering/SKILL.md +101 -0
- package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
- package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
- package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
- package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
- package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
- package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
- package/.claude/skills/platform-engineering/SKILL.md +555 -0
- package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
- package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
- package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
- package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
- package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
- package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
- package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
- package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
- package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
- package/.claude/skills/release-engineering/SKILL.md +393 -0
- package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
- package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
- package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
- package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
- package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
- package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
- package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
- package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
- package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
- package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
- package/.claude/skills/route-tester/SKILL.md +392 -0
- package/.claude/skills/skill-developer/ADVANCED.md +197 -0
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
- package/.claude/skills/skill-developer/SKILL.md +430 -0
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
- package/.claude/skills/skill-rules.json +2940 -0
- package/.claude/skills/sre/SKILL.md +464 -0
- package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
- package/.claude/skills/sre/resources/capacity-planning.md +226 -0
- package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
- package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
- package/.claude/skills/sre/resources/incident-management.md +436 -0
- package/.claude/skills/sre/resources/observability-stack.md +240 -0
- package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
- package/.claude/skills/sre/resources/performance-optimization.md +108 -0
- package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
- package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
- package/.claude/skills/sre/resources/toil-reduction.md +145 -0
- package/.claude/skills/systems-engineering/SKILL.md +648 -0
- package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
- package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
- package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
- package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
- package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
- package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
- package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
- package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
- package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
- package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
- package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
- package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
- package/.claude/skills/technical-leadership/SKILL.md +728 -0
- package/CHANGELOG.md +90 -39
- package/README.md +94 -0
- package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
- package/backend/jest.config.js +59 -0
- package/backend/package-lock.json +6129 -0
- package/backend/package.json +16 -4
- package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
- package/backend/prisma/schema.prisma +33 -0
- package/backend/src/__tests__/core/DependencyService.test.js +336 -0
- package/backend/src/__tests__/core/UserService.test.js +875 -0
- package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
- package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
- package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
- package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
- package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
- package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
- package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
- package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
- package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
- package/backend/src/__tests__/secretsFilter.test.js +425 -0
- package/backend/src/__tests__/services/BotLifecycleService.test.js +411 -0
- package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
- package/backend/src/__tests__/services/CacheManager.test.js +125 -0
- package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
- package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
- package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
- package/backend/src/__tests__/setup.js +25 -0
- package/backend/src/api/routes/apiKeys.js +181 -0
- package/backend/src/api/routes/bots.js +49 -7
- package/backend/src/api/routes/plugins.js +2 -1
- package/backend/src/api/routes/system.js +174 -0
- package/backend/src/container.js +82 -0
- package/backend/src/core/BotManager.js +142 -871
- package/backend/src/core/BotManager.old.js +1093 -0
- package/backend/src/core/BotProcess.js +1092 -850
- package/backend/src/core/BreakLoopSignal.js +8 -0
- package/backend/src/core/EventGraphManager.js +280 -193
- package/backend/src/core/GraphExecutionEngine.js +321 -928
- package/backend/src/core/MessageQueue.js +27 -6
- package/backend/src/core/NodeRegistry.js +37 -991
- package/backend/src/core/PluginManager.js +62 -12
- package/backend/src/core/PrismaService.js +32 -0
- package/backend/src/core/UserService.js +3 -3
- package/backend/src/core/__tests__/PrismaService.test.js +24 -0
- package/backend/src/core/commands/README.md +305 -0
- package/backend/src/core/commands/dev.js +13 -7
- package/backend/src/core/commands/ping.js +10 -4
- package/backend/src/core/commands/whois.js +63 -0
- package/backend/src/core/config/validation.js +27 -0
- package/backend/src/core/constants/graphTypes.js +21 -0
- package/backend/src/core/node-registries/actions.js +132 -0
- package/backend/src/core/node-registries/arrays.js +137 -0
- package/backend/src/core/node-registries/bot.js +23 -0
- package/backend/src/core/node-registries/data.js +290 -0
- package/backend/src/core/node-registries/debug.js +26 -0
- package/backend/src/core/node-registries/events.js +187 -0
- package/backend/src/core/node-registries/flow.js +139 -0
- package/backend/src/core/node-registries/logic.js +45 -0
- package/backend/src/core/node-registries/math.js +42 -0
- package/backend/src/core/node-registries/objects.js +98 -0
- package/backend/src/core/node-registries/strings.js +153 -0
- package/backend/src/core/node-registries/time.js +113 -0
- package/backend/src/core/node-registries/users.js +79 -0
- package/backend/src/core/nodes/actions/bot_look_at.js +36 -0
- package/backend/src/core/nodes/actions/bot_set_variable.js +32 -0
- package/backend/src/core/nodes/actions/http_request.js +98 -0
- package/backend/src/core/nodes/actions/send_log.js +28 -0
- package/backend/src/core/nodes/actions/send_message.js +32 -0
- package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
- package/backend/src/core/nodes/arrays/add_element.js +23 -0
- package/backend/src/core/nodes/arrays/contains.js +40 -0
- package/backend/src/core/nodes/arrays/find_index.js +23 -0
- package/backend/src/core/nodes/arrays/get_by_index.js +23 -0
- package/backend/src/core/nodes/arrays/get_next.js +35 -0
- package/backend/src/core/nodes/arrays/get_random_element.js +32 -0
- package/backend/src/core/nodes/arrays/remove_by_index.js +30 -0
- package/backend/src/core/nodes/bot/get_position.js +20 -0
- package/backend/src/core/nodes/data/array_literal.js +31 -0
- package/backend/src/core/nodes/data/boolean_literal.js +21 -0
- package/backend/src/core/nodes/data/cast.js +42 -0
- package/backend/src/core/nodes/data/datetime_literal.js +27 -0
- package/backend/src/core/nodes/data/entity_info.js +69 -0
- package/backend/src/core/nodes/data/get_argument.js +23 -0
- package/backend/src/core/nodes/data/get_bot_look.js +14 -0
- package/backend/src/core/nodes/data/get_entity_field.js +18 -0
- package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
- package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
- package/backend/src/core/nodes/data/get_server_players.js +18 -0
- package/backend/src/core/nodes/data/get_user_field.js +40 -0
- package/backend/src/core/nodes/data/get_variable.js +23 -0
- package/backend/src/core/nodes/data/length.js +25 -0
- package/backend/src/core/nodes/data/make_object.js +31 -0
- package/backend/src/core/nodes/data/number_literal.js +21 -0
- package/backend/src/core/nodes/data/string_literal.js +34 -0
- package/backend/src/core/nodes/data/type_check.js +53 -0
- package/backend/src/core/nodes/debug/log.js +16 -0
- package/backend/src/core/nodes/flow/branch.js +15 -0
- package/backend/src/core/nodes/flow/break.js +14 -0
- package/backend/src/core/nodes/flow/delay.js +43 -0
- package/backend/src/core/nodes/flow/for_each.js +39 -0
- package/backend/src/core/nodes/flow/sequence.js +16 -0
- package/backend/src/core/nodes/flow/switch.js +47 -0
- package/backend/src/core/nodes/flow/while.js +64 -0
- package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
- package/backend/src/core/nodes/logic/compare.js +33 -0
- package/backend/src/core/nodes/logic/operation.js +35 -0
- package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
- package/backend/src/core/nodes/math/operation.js +31 -0
- package/backend/src/core/nodes/math/random_number.js +43 -0
- package/backend/src/core/nodes/objects/create.js +40 -0
- package/backend/src/core/nodes/objects/delete.js +26 -0
- package/backend/src/core/nodes/objects/get.js +23 -0
- package/backend/src/core/nodes/objects/has_key.js +30 -0
- package/backend/src/core/nodes/objects/set.js +27 -0
- package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
- package/backend/src/core/nodes/strings/concat.js +27 -0
- package/backend/src/core/nodes/strings/contains.js +41 -0
- package/backend/src/core/nodes/strings/ends_with.js +43 -0
- package/backend/src/core/nodes/strings/equals.js +36 -0
- package/backend/src/core/nodes/strings/length.js +36 -0
- package/backend/src/core/nodes/strings/matches.js +39 -0
- package/backend/src/core/nodes/strings/split.js +37 -0
- package/backend/src/core/nodes/strings/starts_with.js +43 -0
- package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
- package/backend/src/core/nodes/time/add.js +33 -0
- package/backend/src/core/nodes/time/compare.js +35 -0
- package/backend/src/core/nodes/time/diff.js +29 -0
- package/backend/src/core/nodes/time/format.js +32 -0
- package/backend/src/core/nodes/time/now.js +18 -0
- package/backend/src/core/nodes/users/check_blacklist.js +37 -0
- package/backend/src/core/nodes/users/get_groups.js +36 -0
- package/backend/src/core/nodes/users/get_permissions.js +36 -0
- package/backend/src/core/nodes/users/set_blacklist.js +37 -0
- package/backend/src/core/services/BotLifecycleService.js +596 -0
- package/backend/src/core/services/BotProcessManager.js +163 -0
- package/backend/src/core/services/CacheManager.js +111 -0
- package/backend/src/core/services/CommandExecutionService.js +351 -0
- package/backend/src/core/services/ResourceMonitorService.js +90 -0
- package/backend/src/core/services/TelemetryService.js +124 -0
- package/backend/src/core/services/ValidationService.js +132 -0
- package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
- package/backend/src/core/services.js +20 -5
- package/backend/src/core/system/CommandContext.js +84 -0
- package/backend/src/core/system/Transport.js +78 -0
- package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
- package/backend/src/core/utils/jsonParser.js +18 -0
- package/backend/src/core/utils/secretsFilter.js +262 -0
- package/backend/src/core/utils/variableParser.js +89 -0
- package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
- package/backend/src/core/validation/nodeSchemas.js +112 -0
- package/backend/src/lib/prisma.js +2 -4
- package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
- package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
- package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
- package/backend/src/real-time/botApi/handlers/index.js +43 -0
- package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
- package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
- package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
- package/backend/src/real-time/botApi/index.js +40 -0
- package/backend/src/real-time/botApi/middleware.js +79 -0
- package/backend/src/real-time/botApi/utils.js +54 -0
- package/backend/src/real-time/socketHandler.js +6 -2
- package/backend/src/repositories/BaseRepository.js +43 -0
- package/backend/src/repositories/BotRepository.js +42 -0
- package/backend/src/repositories/CommandRepository.js +53 -0
- package/backend/src/repositories/EventGraphRepository.js +40 -0
- package/backend/src/repositories/GroupRepository.js +69 -0
- package/backend/src/repositories/PermissionRepository.js +48 -0
- package/backend/src/repositories/PluginRepository.js +42 -0
- package/backend/src/repositories/ServerRepository.js +27 -0
- package/backend/src/repositories/UserRepository.js +48 -0
- package/backend/src/server.js +3 -0
- package/backend/src/test-refactor.js +85 -0
- package/frontend/dist/assets/index-CfTo92bP.css +1 -0
- package/frontend/dist/assets/index-CiFD5X9Z.js +8344 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package.json +1 -5
- package/package.json +2 -1
- package/frontend/dist/assets/index-BFd7YoAj.css +0 -1
- package/frontend/dist/assets/index-CMMutadc.js +0 -8352
- package/nul +0 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
# Resource Planning and Capacity Management
|
|
2
|
+
|
|
3
|
+
**Practical guide to team sizing, capacity planning, and resource allocation for engineering managers.**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Team Capacity Model
|
|
8
|
+
|
|
9
|
+
### Realistic Capacity Per Engineer
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Nominal Hours per Week: 40 hours
|
|
13
|
+
├── Meetings: -5 hours (stand-ups, 1-on-1s, planning, retros)
|
|
14
|
+
├── Code reviews: -2 hours
|
|
15
|
+
├── Context switching: -3 hours (interruptions, Slack, email)
|
|
16
|
+
├── Operational work: -3 hours (on-call, incidents, support)
|
|
17
|
+
├── Administrative: -2 hours (timesheets, reports, training)
|
|
18
|
+
└── Productive work: ~25-28 hours
|
|
19
|
+
|
|
20
|
+
Adjust for:
|
|
21
|
+
├── Junior engineers (L3): 20-25 hours (more learning/mentorship time)
|
|
22
|
+
├── Mid engineers (L4): 25-30 hours
|
|
23
|
+
├── Senior engineers (L5): 25-30 hours (more meetings/reviews)
|
|
24
|
+
└── Staff+ engineers (L6+): 20-25 hours (more strategic work, less coding)
|
|
25
|
+
|
|
26
|
+
On-call impact:
|
|
27
|
+
├── Primary on-call week: -5 to -10 hours (interruptions + fatigue)
|
|
28
|
+
└── Post-incident week: -3 to -5 hours (postmortem, fixes)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Key insight:** Plan for **25-30 productive hours per engineer per week**, not 40.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Capacity Planning Formula
|
|
36
|
+
|
|
37
|
+
### Basic Formula
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Team Capacity = Engineers × Productive Hours × Utilization Target
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
├── Team size: 8 engineers
|
|
44
|
+
├── Productive hours: 28 hours/week per engineer
|
|
45
|
+
├── Utilization target: 80% (leave buffer for unknowns)
|
|
46
|
+
└── Weekly capacity: 8 × 28 × 0.80 = 179 hours/week
|
|
47
|
+
|
|
48
|
+
Story points alternative:
|
|
49
|
+
├── Average velocity: 40 points/sprint (2 weeks)
|
|
50
|
+
├── 80% utilization: 32 points available for planned work
|
|
51
|
+
└── Buffer: 8 points for unplanned work, bugs, tech debt
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Capacity Allocation
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Recommended allocation:
|
|
58
|
+
├── Feature work (planned): 60-70%
|
|
59
|
+
├── Tech debt & refactoring: 15-20%
|
|
60
|
+
├── Bug fixes & support: 10-15%
|
|
61
|
+
├── Learning & innovation: 5-10%
|
|
62
|
+
└── Operational work: Always running (included in hours above)
|
|
63
|
+
|
|
64
|
+
Adjust by team type:
|
|
65
|
+
├── Product teams: 70% features, 15% tech debt, 15% bugs/support
|
|
66
|
+
├── Platform teams: 50% new features, 30% tech debt, 20% support
|
|
67
|
+
└── SRE teams: 40% projects, 30% reliability, 30% on-call/incidents
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Why this matters:** Over-allocating capacity leads to burnout, missed deadlines, and quality issues.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## When to Hire
|
|
75
|
+
|
|
76
|
+
### Capacity Indicators
|
|
77
|
+
|
|
78
|
+
**You likely need to hire when:**
|
|
79
|
+
1. **Sustained overload:** Team at >90% capacity for 3+ months
|
|
80
|
+
2. **Chronic delays:** Consistently missing commitments
|
|
81
|
+
3. **Burnout signals:** Engineers working nights/weekends regularly
|
|
82
|
+
4. **No slack time:** Zero buffer for innovation or learning
|
|
83
|
+
5. **Key person risk:** Single points of failure across critical systems
|
|
84
|
+
6. **Strategic initiatives blocked:** Can't invest in important projects due to capacity
|
|
85
|
+
|
|
86
|
+
**Calculate hiring need:**
|
|
87
|
+
```
|
|
88
|
+
Current capacity: 8 engineers × 28 hours × 80% = 179 hours/week
|
|
89
|
+
Current demand: 220 hours/week of work
|
|
90
|
+
Gap: 41 hours/week
|
|
91
|
+
|
|
92
|
+
Hiring need: 41 / (28 × 0.80) = ~1.8 engineers
|
|
93
|
+
Decision: Hire 2 engineers
|
|
94
|
+
|
|
95
|
+
Timeline:
|
|
96
|
+
├── Start hiring: Now
|
|
97
|
+
├── First hire start: +3 months (hiring lag)
|
|
98
|
+
├── Second hire start: +4 months
|
|
99
|
+
└── Full productivity: +6-9 months (ramp time)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### When NOT to Hire
|
|
103
|
+
|
|
104
|
+
**Don't hire if:**
|
|
105
|
+
1. **Temporary spike:** Capacity crunch is project-specific and time-bound
|
|
106
|
+
2. **Process problems:** Inefficiencies that adding people won't fix
|
|
107
|
+
- Too many meetings
|
|
108
|
+
- Unclear requirements or changing priorities
|
|
109
|
+
- Poor tooling or developer experience
|
|
110
|
+
3. **Unclear scope:** Don't know what new hire would work on
|
|
111
|
+
4. **Budget constraints:** Can't support sustained headcount
|
|
112
|
+
5. **Can optimize instead:** Can address capacity through automation or tooling
|
|
113
|
+
|
|
114
|
+
**Alternative solutions:**
|
|
115
|
+
- **Descope:** Cut low-priority work
|
|
116
|
+
- **Delegate:** Push work to appropriate teams
|
|
117
|
+
- **Automate:** Invest in tooling to reduce toil
|
|
118
|
+
- **Contractors:** Temporary capacity for time-bound projects
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Team Sizing Guidelines
|
|
123
|
+
|
|
124
|
+
### Optimal Team Sizes
|
|
125
|
+
|
|
126
|
+
**General principles:**
|
|
127
|
+
- **Small teams (5-8):** Optimal for communication and autonomy
|
|
128
|
+
- **Medium teams (8-12):** Need more structure and coordination
|
|
129
|
+
- **Large teams (12+):** Should split into multiple teams
|
|
130
|
+
|
|
131
|
+
**Amazon "two-pizza rule":** If you can't feed the team with two pizzas, it's too large.
|
|
132
|
+
|
|
133
|
+
### Sizing by Team Type
|
|
134
|
+
|
|
135
|
+
**Product Engineering Teams:**
|
|
136
|
+
```
|
|
137
|
+
Team composition (6-8 engineers):
|
|
138
|
+
├── 1 Senior/Staff engineer (tech lead)
|
|
139
|
+
├── 3-4 Mid-level engineers
|
|
140
|
+
├── 1-2 Junior engineers
|
|
141
|
+
└── 1 Engineering Manager (if >5 people)
|
|
142
|
+
|
|
143
|
+
Ratio: ~1 senior : 2-3 mid : 1 junior
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Platform Engineering Teams:**
|
|
147
|
+
```
|
|
148
|
+
Team composition (8-10 engineers):
|
|
149
|
+
├── 1 Staff engineer (platform architect)
|
|
150
|
+
├── 4-5 Senior engineers (specialists)
|
|
151
|
+
├── 2-3 Mid-level engineers
|
|
152
|
+
├── 1 Junior engineer (optional)
|
|
153
|
+
└── 1 Engineering Manager
|
|
154
|
+
|
|
155
|
+
Ratio: Higher senior weighting for platform complexity
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**SRE Teams:**
|
|
159
|
+
```
|
|
160
|
+
Team composition (6-8 SREs):
|
|
161
|
+
├── 1 Senior SRE (team lead)
|
|
162
|
+
├── 3-4 SREs
|
|
163
|
+
├── 1-2 Junior SREs
|
|
164
|
+
└── 1 SRE Manager
|
|
165
|
+
|
|
166
|
+
Support ratio: 1 SRE per 50-100 engineers (mature org)
|
|
167
|
+
On-call rotation: Need 6-8 people for sustainable rotation
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Security Teams:**
|
|
171
|
+
```
|
|
172
|
+
Team composition (6-8 engineers):
|
|
173
|
+
├── 1 Security architect
|
|
174
|
+
├── 2-3 AppSec engineers
|
|
175
|
+
├── 2-3 Infrastructure security engineers
|
|
176
|
+
├── 1 Compliance specialist
|
|
177
|
+
└── 1 Security manager
|
|
178
|
+
|
|
179
|
+
Support ratio: 1 security engineer per 50-75 engineers
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Manager Span of Control
|
|
183
|
+
|
|
184
|
+
**Individual contributor managers:**
|
|
185
|
+
- **Optimal:** 6-8 direct reports
|
|
186
|
+
- **Acceptable:** 5-10 direct reports
|
|
187
|
+
- **Too few:** <4 (unless special circumstances)
|
|
188
|
+
- **Too many:** >10 (quality of management suffers)
|
|
189
|
+
|
|
190
|
+
**Manager of managers:**
|
|
191
|
+
- **Optimal:** 4-6 direct reports (other managers)
|
|
192
|
+
- **Acceptable:** 3-7 direct reports
|
|
193
|
+
- **Too many:** >7 (can't support managers effectively)
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Org Scaling Patterns
|
|
198
|
+
|
|
199
|
+
### 1-25 Engineers: Single Team
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
Structure:
|
|
203
|
+
├── VP Engineering / CTO
|
|
204
|
+
└── 1-3 teams (product + infra combined)
|
|
205
|
+
|
|
206
|
+
Characteristics:
|
|
207
|
+
├── Generalists, everyone does everything
|
|
208
|
+
├── Informal processes
|
|
209
|
+
└── Fast but chaotic
|
|
210
|
+
|
|
211
|
+
Challenges:
|
|
212
|
+
├── No specialization
|
|
213
|
+
├── Scaling technical decisions
|
|
214
|
+
└── Knowledge silos emerging
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### 25-100 Engineers: Functional Teams
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
Structure:
|
|
221
|
+
├── VP Engineering
|
|
222
|
+
├── Product Engineering (3-4 teams)
|
|
223
|
+
├── Platform/Infrastructure (1-2 teams)
|
|
224
|
+
└── Mobile/Frontend (1-2 teams)
|
|
225
|
+
|
|
226
|
+
Characteristics:
|
|
227
|
+
├── Functional specialization emerging
|
|
228
|
+
├── More formal processes
|
|
229
|
+
└── Coordination challenges
|
|
230
|
+
|
|
231
|
+
Challenges:
|
|
232
|
+
├── Cross-team dependencies
|
|
233
|
+
├── Resource allocation conflicts
|
|
234
|
+
└── Need for technical program management
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 100-300 Engineers: Product + Platform Org
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
Structure:
|
|
241
|
+
├── CTO
|
|
242
|
+
├── VP Product Engineering
|
|
243
|
+
│ └── Multiple product teams
|
|
244
|
+
├── VP Platform Engineering
|
|
245
|
+
│ ├── Developer experience team
|
|
246
|
+
│ ├── SRE team
|
|
247
|
+
│ └── Data platform team
|
|
248
|
+
└── VP/Director Security
|
|
249
|
+
└── Security team
|
|
250
|
+
|
|
251
|
+
Characteristics:
|
|
252
|
+
├── Clear separation: product vs platform
|
|
253
|
+
├── Platform as internal product
|
|
254
|
+
└── Enabling teams model
|
|
255
|
+
|
|
256
|
+
Challenges:
|
|
257
|
+
├── Platform adoption (not mandated)
|
|
258
|
+
├── Balancing product vs platform investment
|
|
259
|
+
└── Avoiding ivory tower platforms
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 300+ Engineers: Scaled Org
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
Structure:
|
|
266
|
+
├── CTO
|
|
267
|
+
├── VP Product Engineering (multiple VPs by domain)
|
|
268
|
+
│ ├── Payments org (50 engineers)
|
|
269
|
+
│ ├── Growth org (40 engineers)
|
|
270
|
+
│ └── Core product org (60 engineers)
|
|
271
|
+
├── VP Platform Engineering
|
|
272
|
+
│ ├── Developer experience (20 engineers)
|
|
273
|
+
│ ├── Data platform (15 engineers)
|
|
274
|
+
│ └── ML platform (10 engineers)
|
|
275
|
+
├── VP SRE & Operations
|
|
276
|
+
│ ├── Production SRE (15 engineers)
|
|
277
|
+
│ ├── Observability (8 engineers)
|
|
278
|
+
│ └── Incident management (5 engineers)
|
|
279
|
+
└── VP Security / CISO
|
|
280
|
+
├── AppSec (10 engineers)
|
|
281
|
+
├── Infrastructure security (8 engineers)
|
|
282
|
+
└── Compliance (5 engineers)
|
|
283
|
+
|
|
284
|
+
Characteristics:
|
|
285
|
+
├── Multiple layers of management
|
|
286
|
+
├── Specialized organizations
|
|
287
|
+
└── Formal processes and governance
|
|
288
|
+
|
|
289
|
+
Challenges:
|
|
290
|
+
├── Communication and alignment
|
|
291
|
+
├── Avoiding silos and bureaucracy
|
|
292
|
+
└── Maintaining engineering culture
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Headcount Planning
|
|
298
|
+
|
|
299
|
+
### Annual Planning Process
|
|
300
|
+
|
|
301
|
+
**Timeline (for calendar year planning):**
|
|
302
|
+
```
|
|
303
|
+
Sept-Oct: Strategic planning
|
|
304
|
+
├── Product roadmap for next year
|
|
305
|
+
├── Technical initiatives and investments
|
|
306
|
+
├── Org growth targets
|
|
307
|
+
|
|
308
|
+
Oct-Nov: Headcount requests
|
|
309
|
+
├── Each org submits headcount needs
|
|
310
|
+
├── Justification with capacity models
|
|
311
|
+
└── Prioritization across company
|
|
312
|
+
|
|
313
|
+
Nov-Dec: Budget approval
|
|
314
|
+
├── Finance reviews and approves budget
|
|
315
|
+
├── Headcount allocated to orgs
|
|
316
|
+
└── Hiring plan created
|
|
317
|
+
|
|
318
|
+
Jan-Dec: Execution
|
|
319
|
+
├── Hire according to plan
|
|
320
|
+
├── Quarterly check-ins and adjustments
|
|
321
|
+
└── Handle attrition and changes
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Headcount Request Template
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
Team: Platform Engineering
|
|
328
|
+
Manager: [Your Name]
|
|
329
|
+
Current headcount: 8 engineers
|
|
330
|
+
Requested headcount: +3 engineers (total 11)
|
|
331
|
+
|
|
332
|
+
Justification:
|
|
333
|
+
1. Capacity Gap
|
|
334
|
+
- Current capacity: 179 hours/week
|
|
335
|
+
- Current demand: 240 hours/week
|
|
336
|
+
- Gap: 61 hours/week (2.7 FTE equivalent)
|
|
337
|
+
|
|
338
|
+
2. Strategic Initiatives
|
|
339
|
+
- Multi-region platform expansion (1 engineer, 6 months)
|
|
340
|
+
- Developer experience improvements (1 engineer, ongoing)
|
|
341
|
+
- Observability platform rebuild (1 engineer, 9 months)
|
|
342
|
+
|
|
343
|
+
3. Risk Mitigation
|
|
344
|
+
- Key person risk on K8s (single expert)
|
|
345
|
+
- On-call rotation understaffed (need 8 for sustainable rotation)
|
|
346
|
+
|
|
347
|
+
Proposed hires:
|
|
348
|
+
├── Q1: Senior Platform Engineer (Kubernetes focus)
|
|
349
|
+
├── Q2: Mid-level Platform Engineer (CI/CD focus)
|
|
350
|
+
└── Q3: Mid-level Platform Engineer (Observability focus)
|
|
351
|
+
|
|
352
|
+
Impact if not approved:
|
|
353
|
+
├── Can't invest in developer experience (productivity loss)
|
|
354
|
+
├── Multi-region delayed by 6-9 months (revenue impact)
|
|
355
|
+
└── Burnout risk on team (retention issue)
|
|
356
|
+
|
|
357
|
+
Cost:
|
|
358
|
+
├── Senior engineer: $200K total comp
|
|
359
|
+
├── Mid-level (2): $150K × 2 = $300K total comp
|
|
360
|
+
└── Total: $500K annual cost
|
|
361
|
+
|
|
362
|
+
ROI:
|
|
363
|
+
├── Developer productivity: Save 50 engineers × 2 hours/week = 5,000 hours/year
|
|
364
|
+
├── Value: 5,000 hours × $100/hour = $500K savings
|
|
365
|
+
└── Break-even: Year 1
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Resource Allocation Frameworks
|
|
371
|
+
|
|
372
|
+
### 70-20-10 Model
|
|
373
|
+
|
|
374
|
+
```
|
|
375
|
+
70% Core Business (Sustaining)
|
|
376
|
+
├── Feature development for current products
|
|
377
|
+
├── Bug fixes and maintenance
|
|
378
|
+
└── Customer support and requests
|
|
379
|
+
|
|
380
|
+
20% Adjacent Opportunities (Growing)
|
|
381
|
+
├── New features in existing products
|
|
382
|
+
├── Platform improvements
|
|
383
|
+
└── Developer experience investments
|
|
384
|
+
|
|
385
|
+
10% New Bets (Exploring)
|
|
386
|
+
├── R&D and prototypes
|
|
387
|
+
├── New technologies
|
|
388
|
+
└── Innovation time
|
|
389
|
+
|
|
390
|
+
Adjust by company stage:
|
|
391
|
+
├── Early stage: 80% core, 15% adjacent, 5% new
|
|
392
|
+
├── Growth stage: 70% core, 20% adjacent, 10% new
|
|
393
|
+
└── Mature stage: 60% core, 25% adjacent, 15% new
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Priority-Based Allocation
|
|
397
|
+
|
|
398
|
+
```
|
|
399
|
+
P0: Must-Have (40-50% capacity)
|
|
400
|
+
├── Critical customer commitments
|
|
401
|
+
├── Security and compliance requirements
|
|
402
|
+
└── Production reliability
|
|
403
|
+
|
|
404
|
+
P1: Should-Have (30-40% capacity)
|
|
405
|
+
├── Planned features and roadmap
|
|
406
|
+
├── Technical debt reduction
|
|
407
|
+
└── Developer productivity improvements
|
|
408
|
+
|
|
409
|
+
P2: Nice-to-Have (10-20% capacity)
|
|
410
|
+
├── Experimental projects
|
|
411
|
+
├── Learning and innovation
|
|
412
|
+
└── Process improvements
|
|
413
|
+
|
|
414
|
+
P3: Backlog (not planned)
|
|
415
|
+
├── Everything else
|
|
416
|
+
└── Revisit quarterly
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## Contractor vs. Full-Time Employee
|
|
422
|
+
|
|
423
|
+
### When to Use Contractors
|
|
424
|
+
|
|
425
|
+
**Good use cases:**
|
|
426
|
+
- **Time-bound projects:** Clear scope with definite end date
|
|
427
|
+
- **Specialized skills:** Need expertise your team lacks temporarily
|
|
428
|
+
- **Capacity spikes:** Temporary increase in workload
|
|
429
|
+
- **Prototyping:** Experiment before committing to full hire
|
|
430
|
+
- **Cost constraints:** Budget for contractors but not headcount
|
|
431
|
+
|
|
432
|
+
**Bad use cases:**
|
|
433
|
+
- **Core product work:** Critical to business, long-term ownership needed
|
|
434
|
+
- **Tribal knowledge:** Work requiring deep context of your systems
|
|
435
|
+
- **Team culture:** Building team cohesion and culture
|
|
436
|
+
- **Mentorship:** Growing junior engineers
|
|
437
|
+
|
|
438
|
+
### Cost Comparison
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
Full-Time Engineer (L4):
|
|
442
|
+
├── Base salary: $150K
|
|
443
|
+
├── Benefits (30%): $45K
|
|
444
|
+
├── Equity: $30K/year (vesting)
|
|
445
|
+
├── Overhead: $25K (office, equipment, etc.)
|
|
446
|
+
└── Total: $250K/year
|
|
447
|
+
|
|
448
|
+
Contractor (equivalent level):
|
|
449
|
+
├── Hourly rate: $100-150/hour
|
|
450
|
+
├── Annual (40 hours × 50 weeks): $200K-300K
|
|
451
|
+
├── No benefits or equity
|
|
452
|
+
└── Total: $200K-300K/year
|
|
453
|
+
|
|
454
|
+
Break-even: ~1 year of full-time work
|
|
455
|
+
Decision: If need >1 year, hire full-time
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## Productivity Metrics
|
|
461
|
+
|
|
462
|
+
### Team Health Metrics
|
|
463
|
+
|
|
464
|
+
**Leading indicators (predict problems):**
|
|
465
|
+
- **Capacity utilization:** Target 70-80% (not 100%)
|
|
466
|
+
- **Cycle time:** Time from commit to production (target <1 day)
|
|
467
|
+
- **PR review time:** Time to first review (target <4 hours)
|
|
468
|
+
- **Deploy frequency:** How often deploy to production (target daily+)
|
|
469
|
+
- **Change failure rate:** % of deploys causing incidents (target <15%)
|
|
470
|
+
|
|
471
|
+
**Lagging indicators (measure outcomes):**
|
|
472
|
+
- **Velocity:** Story points completed per sprint (track trend)
|
|
473
|
+
- **Throughput:** Features shipped per quarter
|
|
474
|
+
- **Quality:** Bugs per feature, incident rate
|
|
475
|
+
- **Availability:** Uptime and reliability (SLO compliance)
|
|
476
|
+
|
|
477
|
+
**People metrics:**
|
|
478
|
+
- **Attrition:** <10% annual (healthy)
|
|
479
|
+
- **eNPS:** Employee net promoter score (>30 is good)
|
|
480
|
+
- **1-on-1 frequency:** Weekly 30-min minimum
|
|
481
|
+
- **Growth:** Promotion rate, skill development
|
|
482
|
+
|
|
483
|
+
### What NOT to Measure
|
|
484
|
+
|
|
485
|
+
**Anti-patterns:**
|
|
486
|
+
- ❌ Lines of code written
|
|
487
|
+
- ❌ Number of commits
|
|
488
|
+
- ❌ Hours worked
|
|
489
|
+
- ❌ Number of tickets closed
|
|
490
|
+
- ❌ Individual velocity/output
|
|
491
|
+
|
|
492
|
+
**Why:** These metrics incentivize wrong behaviors and don't correlate with value delivered.
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
## Resource Planning Tools
|
|
497
|
+
|
|
498
|
+
### Capacity Planning Spreadsheet
|
|
499
|
+
|
|
500
|
+
```
|
|
501
|
+
Team Capacity Model (weekly):
|
|
502
|
+
|
|
503
|
+
Engineer | Level | Productive Hours | Utilization | Available Capacity
|
|
504
|
+
---------|-------|------------------|-------------|-------------------
|
|
505
|
+
Alice | L5 | 25 | 80% | 20 hours
|
|
506
|
+
Bob | L4 | 28 | 80% | 22.4 hours
|
|
507
|
+
Carol | L4 | 28 | 80% | 22.4 hours
|
|
508
|
+
Dave | L3 | 23 | 80% | 18.4 hours
|
|
509
|
+
... | ... | ... | ... | ...
|
|
510
|
+
TOTAL | - | - | - | 167 hours/week
|
|
511
|
+
|
|
512
|
+
Committed work:
|
|
513
|
+
├── Feature A: 40 hours
|
|
514
|
+
├── Feature B: 60 hours
|
|
515
|
+
├── Tech debt: 30 hours
|
|
516
|
+
├── Support/ops: 25 hours
|
|
517
|
+
└── Total: 155 hours
|
|
518
|
+
|
|
519
|
+
Buffer: 167 - 155 = 12 hours (7% slack) ✅ Healthy
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
### Project Estimation
|
|
523
|
+
|
|
524
|
+
```
|
|
525
|
+
Feature estimation:
|
|
526
|
+
├── Break down into tasks
|
|
527
|
+
├── Estimate each task (hours or points)
|
|
528
|
+
├── Add buffer (30-50% for unknowns)
|
|
529
|
+
├── Account for dependencies and blockers
|
|
530
|
+
└── Reality check: Does timeline make sense?
|
|
531
|
+
|
|
532
|
+
Example:
|
|
533
|
+
├── API implementation: 20 hours
|
|
534
|
+
├── Frontend work: 30 hours
|
|
535
|
+
├── Testing: 15 hours
|
|
536
|
+
├── Documentation: 5 hours
|
|
537
|
+
├── Subtotal: 70 hours
|
|
538
|
+
├── Buffer (40%): 28 hours
|
|
539
|
+
└── Total estimate: 98 hours (~3-4 weeks with interruptions)
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
---
|
|
543
|
+
|
|
544
|
+
## Key Takeaways for Managers
|
|
545
|
+
|
|
546
|
+
1. **Plan for 25-30 productive hours** per engineer per week, not 40
|
|
547
|
+
2. **Target 70-80% utilization** - leave buffer for unknowns
|
|
548
|
+
3. **Hire when sustained overload** (>90% capacity for 3+ months)
|
|
549
|
+
4. **Optimize before hiring** - fix process issues first
|
|
550
|
+
5. **Keep teams small** (5-8 people) for effectiveness
|
|
551
|
+
6. **Balance allocation:** 70% features, 20% tech debt, 10% innovation
|
|
552
|
+
7. **Track leading indicators** - capacity, cycle time, deploy frequency
|
|
553
|
+
8. **Don't measure individuals** - focus on team outcomes
|
|
554
|
+
9. **Plan annually, adjust quarterly** - be flexible
|
|
555
|
+
10. **Justify with data** - use capacity models for headcount requests
|
|
556
|
+
|
|
557
|
+
Resource planning is about enabling sustainable delivery, not maximizing utilization.
|