6 min read · March 27, 2026
Every team works differently. A software development team tracks story points and sprint velocity. An agency tracks client name and billing status. A construction company tracks permit numbers and inspection dates. A marketing team tracks campaign budget and publication date.
Project management tools that ship with a fixed set of fields (title, description, assignee, due date, status) force every team into the same mold. The inevitable result: customers export data to spreadsheets, maintain shadow systems in Notion or Airtable, and eventually switch to a competitor that lets them customize the data model.
Custom fields are the solution. This article covers why PM tools need them, how the major players implement them, and how to add them to your product without a multi-month engineering project.
The core data model of a PM tool (tasks, projects, timelines, assignments) is universal. But the metadata on each task varies by industry, team function, and workflow.
Consider how different teams use the same PM tool:
| Team Type | Custom Fields They Need | Why |
|---|---|---|
| Software engineering | Story points, sprint, epic, component, PR link | Agile workflow tracking and velocity measurement |
| Marketing | Campaign name, channel, budget, publication date | Campaign planning and spend tracking |
| Sales operations | Client name, deal value, stage, close date | Pipeline management inside project boards |
| Construction | Permit number, inspection date, site location | Regulatory compliance and site coordination |
| Legal | Case number, filing deadline, jurisdiction | Case management and deadline tracking |
| HR | Candidate name, interview stage, salary range | Recruitment pipeline tracking |
| Product management | Priority score, customer request count, revenue impact | Feature prioritization and roadmap planning |
Without custom fields, each of these teams either shoehorns their data into the "Description" text field (making it unsearchable and unstructured) or maintains a parallel system.
A 2023 survey by Wellingtone found that 54% of project managers reported spending time on manual status reporting and data consolidation across tools. Custom fields that capture structured data directly in the PM tool reduce this overhead.
Source: Wellingtone - The State of Project Management
Agile teams need fields that map to their sprint and backlog workflow:
| Field | Type | Validation | Used For |
|---|---|---|---|
| Story Points | Number | Options: 1, 2, 3, 5, 8, 13, 21 | Effort estimation and velocity |
| Sprint | Select | Dynamic options per team | Sprint assignment and planning |
| Epic | Select | Options from project's epic list | Feature grouping and roadmap |
| Priority Level | Select | Options: Critical, High, Medium, Low | Triage and sprint planning |
| Component | Multiselect | Frontend, Backend, API, Database, Infra | Code ownership and routing |
| PR Link | URL | Valid URL format | Code review cross-reference |
| Acceptance Criteria | Textarea | Required for stories | Definition of done |
| Bug Severity | Select | Options: P0, P1, P2, P3 | Incident response and SLA |
Agencies manage multiple client projects simultaneously and need fields for billing, approvals, and client communication:
| Field | Type | Validation | Used For |
|---|---|---|---|
| Client Name | Select | Options from client list | Billing and reporting by client |
| Budget Allocated | Number | Min: 0, currency format | Project profitability tracking |
| Approval Status | Select | Draft, In Review, Client Approved, Published | Approval workflow |
| Billable | Boolean | Default: true | Time tracking and invoicing |
| External Deadline | Date | Required for client milestones | Client SLA management |
| Deliverable Type | Select | Design, Copy, Development, Strategy | Resource planning by skill |
Monday.com treats every column on a board as essentially a custom field. When a user adds a column, they choose from roughly 30 column types (Status, People, Date, Numbers, Text, Formula, Link, etc.). Each board has its own set of columns, and users add or remove them freely.
| Aspect | Monday.com Approach |
|---|---|
| Field definition scope | Per-board (each board has its own columns) |
| Who can add fields | Any board member (by default) |
| Field type variety | ~30 column types including formula, mirror, dependency |
| Cross-board consistency | Not enforced (same field must be recreated per board) |
| API access | Full GraphQL API |
Source: Monday.com Developer Docs
Jira defines custom fields at the instance level (or project level in Jira Cloud). A custom field defined once can appear on issues across multiple projects. Administrators configure which fields appear on which issue types through "screens" and "screen schemes."
| Aspect | Jira Approach |
|---|---|
| Field definition scope | Instance-wide or project-scoped |
| Who can add fields | Jira administrators only |
| Field type variety | ~20 built-in types plus Marketplace add-ons |
| Cross-project consistency | Enforced through screen schemes |
| Field limits | Recommended: under ~1,200 fields per instance |
Atlassian explicitly warns about field proliferation: "Too many custom fields can compromise the performance of Jira instances." Performance degradation becomes noticeable above approximately 1,200 custom fields.
Source: Atlassian
| Lesson | Implication for Your PM Tool |
|---|---|
| Users expect to add fields without engineering help | Self-service field creation is table stakes |
| Field types must cover common PM metadata | At minimum: text, number, date, select, multiselect, URL, boolean |
| Cross-project field consistency matters for reporting | Support both project-scoped and shared field definitions |
| Performance degrades with too many fields | Implement field limits and monitor query performance |
| API access is required | Custom field values must be readable and writable via API |
When building custom fields for a multi-tenant PM tool, there is a fundamental design distinction: fields that you (the vendor) define and control, versus fields that your customers define for themselves.
Global fields are field definitions created by you, the PM tool vendor. They appear for all tenants (or for all tenants on a specific plan tier). Tenants cannot modify or delete them.
| Global Field | Type | Why It's Global |
|---|---|---|
| Priority | Select (Critical, High, Medium, Low) | Every team needs priority. Standardizing it enables cross-project reporting. |
| Due Date | Date | Universal project management concept. |
| Estimated Hours | Number | Used in resource planning and capacity reports. |
| Status Category | Select (To Do, In Progress, Done) | Standardized for Kanban views and velocity metrics. |
Tenant fields are created by your customers' administrators. They appear only for that tenant's users. Different tenants have different tenant fields.
| Tenant | Field They Created | Type | Why |
|---|---|---|---|
| Crestline Design | Client Name | Select | Track which client each task belongs to |
| HealthCo | HIPAA Review Required | Boolean | Regulatory compliance workflow |
| TechStart | Sprint | Select | They use sprints but other tenants do not |
| BuildRight | Permit Number | Text | Construction regulatory requirement |
| Characteristic | Global Fields | Tenant Fields |
|---|---|---|
| Created by | You (the vendor) | The tenant's administrator |
| Visible to | All tenants | Only the creating tenant |
| Used in cross-tenant reporting | Yes | No (tenant-scoped) |
| Field limits | No limit (your schema) | Tied to pricing plan |
This distinction maps directly to a monetization strategy. This is the same model HubSpot uses. Their free plan allows 10 custom properties. Paid plans allow 1,000.
Source: HubSpot Docs
| Component | Estimate | What It Involves |
|---|---|---|
| Database schema and storage | 2-4 weeks | Choose EAV, JSONB, or extension tables. Multi-tenant isolation. |
| Validation engine | 1-2 weeks | Type coercion, required fields, min/max, option constraints. |
| Field management UI | 2-4 weeks | Admin panel for creating, editing, and deleting fields. |
| Field editor UI | 2-4 weeks | Dynamic form rendering, input type mapping, layout, validation. |
| REST API | 1-2 weeks | CRUD endpoints for definitions and values. Search, pagination. |
| Testing | 2-4 weeks | Unit, integration, E2E, and performance tests. |
| Total | 11-22 weeks |
The actual cost is typically 3-4x the estimate. That puts the realistic timeline at 33-66 weeks of engineering time.
Source: Appinventiv - Build vs Buy
71% of tech teams choose off-the-shelf solutions to accelerate time-to-value. For infrastructure like custom fields, where the engineering cost is high but the competitive differentiation is low, the build case is hard to justify.
Source: Chameleon - Build vs Buy
Kopra provides the complete infrastructure for multi-tenant custom fields: storage, validation, multi-tenant isolation, field configuration UI, field editor UI, REST API, and webhooks. You integrate with the SDK and ship custom fields in an afternoon.
# Create a field group for tasks
curl -X POST "https://your-kopra-instance.com/api/field-groups" \
-H "X-API-Key: kp_your_key" \
-H "Content-Type: application/json" \
-d '{"name": "Task Fields", "key": "task", "description": "Custom fields for tasks and issues"}'
# Create a field group for projects
curl -X POST "https://your-kopra-instance.com/api/field-groups" \
-H "X-API-Key: kp_your_key" \
-H "Content-Type: application/json" \
-d '{"name": "Project Fields", "key": "project", "description": "Custom fields for projects"}'# Add a "Priority" dropdown to all tasks
curl -X POST "https://your-kopra-instance.com/api/global-fields" \
-H "X-API-Key: kp_your_key" \
-H "Content-Type: application/json" \
-d '{
"key": "priority",
"label": "Priority",
"schema": {
"type": "select",
"validation": {
"required": true,
"options": ["Critical", "High", "Medium", "Low"]
}
},
"fieldGroupIds": ["TASK_FIELD_GROUP_ID"]
}'import { KopraSDK } from '@kopra-dev/sdk';
const sdk = new KopraSDK({
currentTenant: tenantId,
getToken: async (req) => {
const res = await fetch('/api/kopra-token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(req),
});
return res.json();
},
onFieldsSaved: (values) => {
console.log('Task custom fields saved:', values);
},
autosave: {
enabled: true,
debounceMs: 2000,
},
});
await sdk.loadCustomFields('task-custom-fields', {
fieldGroupKey: 'task',
entityId: 'task-1234',
});await sdk.loadFieldConfiguration('field-settings', {
fieldGroupKey: 'task',
fieldLimit: 15, // Based on their plan
});Now the agency can add "Client Name" and "Billable" fields. The construction company can add "Permit Number." The software team can add "Story Points." Each tenant configures their own fields without contacting your support team.
| What | Without Kopra | With Kopra |
|---|---|---|
| Time to ship | 3-6 months | 1 day |
| Tenant self-service | Must build field management UI | Built-in configuration panel |
| Field types | Must implement each one | Text, number, date, select, multiselect, boolean, URL, email, textarea |
| Multi-tenant isolation | Must implement and audit | Built-in (clientId-based, JWT-scoped) |
| API access | Must build endpoints | 26 REST endpoints included |
| Maintenance | 15-20% of build cost annually | Managed |
Your PM tool's competitive advantage is the workflow engine, the Gantt charts, the resource planning, the integrations. Not the custom field infrastructure underneath. Offloading that layer lets your team focus on what makes your product unique.
Free tier available at kopra.dev. No credit card required.