What a Work Item Really Is
When you manage hazardous waste disposal, every drum, every manifest, every inspection is a work item. But what makes that work item functional is not the form you fill out. It's the underlying model that defines what the item is, what data it carries, and how it moves through your facility.
Consider a simple request: when a waste container moves from "Pending Verification" to "Closed," require the operator to enter a verification result. Sounds easy. But swap "verification result" for "root cause," and the rule may not hold. Root cause often emerges during analysis, before closure. Low-risk waste might not need a full root cause investigation. Better design: require verification result on closure, but only require root cause when severity meets a threshold.
That single change reveals the core objects of any work item platform: the type defines what a waste container is; attributes define what data it stores; forms define what the user sees; workflow defines what transitions are legal; rules define conditions; and configuration scope defines where those rules apply.
Six Questions Every Work Item Must Answer
Before you design a single screen, answer six questions. They seem obvious, but most systems blur them together.
- What is this object? Type identity: stable ID, name, icon, lifecycle.
- What can it store? Attribute model: text, person, enum, hours, attachments, references, computed values.
- How do users fill and read it? Form and layout: create, detail, edit, transition, list, card.
- How can it change? Workflow: states, transitions, permissions, validations, post-actions.
- What can it connect to? Relationship model: parent-child, dependency, block, generic link.
- Where do these rules apply? Configuration scope: org, space, type, business context, version.
These layers must stay separate. If you merge them into one giant "type configuration table," you get a mess. Types change rarely, attributes change often, and workflows differ by team. A waste type might be renamed from "Hazardous" to "Chemical," but the API reference must not break. A "responsible person" attribute might appear on both tasks and defects, but the candidate list differs by location.
Types Define Identity, Not Ownership
Many tools let you create a type with just a name and icon. That's fine, but don't mistake a type for a category label. A type is the stable identity of a class of work objects. It's also the entry point for all other configurations.
One boundary matters: a type should not have a "default owner." Ownership is an attribute on the work item instance. The default value, the allowed candidates, whether it's required—these are attribute rules. If you bake them into the type, you get three problems.
First, the same "Inspection" type may need different owner rules in different teams. Second, a default value is a computed result at creation time, not part of identity. Third, candidate selection must intersect with permissions, space membership, and account status. So keep types lean. Let attributes answer who's responsible, and let rules compute the defaults.
From Fields to Attributes
The old term "custom fields" limited our thinking. A work item isn't just text boxes and dates. The responsible person is an object; attachments are resources with metadata; hours include estimates and logs; parent items and references are links to other objects. So call it an attribute model. Everything is an attribute, and attributes form forms.
This doesn't mean the database stores everything in one big table. Attachments and hour logs need separate tables. But the product and API contract should be unified. Each attribute must define its identity, type, value structure, cardinality, default rules, permissions, queryability, layout, and change history.
One benefit: create, detail, transition, and list pages all pull from the same attribute library. They just arrange differently. APIs, imports, exports, and automation all understand the same definition.
An attribute is more stable than a control. A "severity" field might appear as a radio button, but the platform also uses it for filtering, grouping, authorization, and automation. The control defines input; the attribute defines long-term meaning.
Scope: Global vs. Space Attributes
Historically, we talked about global and project fields. If you've renamed "project" to "space," don't add another layer of project fields. Instead, have two scopes: org-level for common attributes, and space-level for team-specific ones. A "migration batch" or "test group" is still a space attribute, just used within a specific version or iteration.
Governance rule: org defines common language, space defines local language, and work item instances store the current facts. Don't copy an attribute because of a one-off need. And don't promote every local concept to global. When querying across spaces, same-named fields may not mean the same thing. Only share an attribute ID if the values are truly comparable in a cross-space report.
Layouts Are Not Data Models
Page layout doesn't define data; it answers what the user should see and do in each context. For closing a waste container, the create form should not require verification result. After analysis, the form asks for root cause. On closure, the transition form requires verification result. If severity is "Critical" or "High," validate root cause exists. After closure, both fields are read-only to most users.
There are five layout types: create, detail, transition, list, and card. The create form should first establish the object: space, type, title, and necessary context. Then set initial responsibility and workflow routing. If "business line" determines workflow, it must be on the create form. If "root cause" isn't known yet, don't make it a create field.
The detail page should let the user judge first, then edit. Top: identity, status, legal actions. Main area: description, acceptance criteria, key attributes. Sidebar: owner, priority, iteration. Lower: sub-items, attachments, comments, history.
Workflow as Lifecycle, Not a Drawing
Workflow isn't a diagram. It's the definition of how an object changes. States are stable phases; transitions are legal moves. "Pending Verification" and "Closed" are states. "Verify and Close" is a transition that requires a role, opens a form, collects verification result, checks root cause if severity is high, updates close time, and writes an audit log.
A transition has: start and end states, action name, who can execute, attributes to display, pre-conditions and validations, post-actions like notifications and automation, and entry points for code or other systems. If you only configure states, users can change status arbitrarily. Transitions enforce conditions.
Multiple workflows for one type can be implemented in three ways. Jira maps a type to one workflow in a space. ONES uses a default workflow per type. Feishu uses a business-line field to route to different workflow templates. TAPD uses categories to select workflows, and workflows can be serial or parallel. Each approach has trade-offs. Fixed mapping is simple and auditable. Conditional routing adapts to multiple business lines but needs rule priority and conflict handling. Parallel nodes express cross-role collaboration but introduce node owners and merge conditions.
Producing a Work Item
Configuring types, attributes, layouts, and workflows isn't enough. The system must assemble them at runtime. An admin defines the type, attaches attributes, layouts, workflow mapping, relationships, and permissions. Before publishing, the system checks: initial state is unique, required attributes have a place to fill, default owner is in the candidate set, routing rules don't conflict.
When a user clicks create, the system resolves the unique config based on org, space, type, and business context. It computes defaults, matches the workflow version, and validates before creating the instance. After creation, every change goes through transition permissions, input validation, atomic updates, and audit. Layouts don't enforce rules; they just present them. Batch operations, imports, APIs, and automation must use the same server-side logic.
Relationships: Not Just Lines
Work items connect. A waste manifest might have sub-items for each container. A task might block another. A defect might link to a test case and a release. There are two kinds of relationships: hierarchical (parent-child) and associative (named business connections like dependency, block, precede).
Hierarchy isn't just a parent_id. You must define which types can be parents/children, whether an item can have multiple parents, max depth, cross-space allowance, how progress and hours roll up, and whether child completion triggers parent validation. Associations need names, direction, type ranges, cardinality, permissions, and effects. "Blocks" and "is blocked by" are the same directed relationship. "Similar" is undirected. "Precedes" may affect scheduling and critical path.
Configuration Scope: From Project to Space
In modern platforms, "space" is the long-term container, not a layer above project. In Jira Cloud, Space is just the new name for Project. The term "project" implies a start and end, but a space persists for years. A product team, a business line, or a compliance function can work in the same space for many cycles. Work item types, attributes, workflows, layouts, views, roles, and automation all live there.
Where does a one-time disposal campaign go? Not into a new "project" entity. You organize it within the space using goals, versions, iterations, milestones, tags, parent items, or saved views. For example, "Waste Audit Q3" could be a goal with two versions and a set of inspections. When it ends, archive them. The space continues.
So the scope hierarchy is three layers: organization, space, and delivery context (version, iteration, goal). Delivery context participates in filtering and routing but doesn't become a new config container. Otherwise you'll copy fields and workflows for each special project, leading to semantic drift.
Configuration Change Is a Dangerous Operation
Changing an attribute from optional to required might break batch closures. Deleting a status might orphan existing items. Changing a relationship cardinality alters rollup and permissions. So the meta-model needs its own lifecycle.
Every type, attribute, state, transition, layout, and relationship needs a stable ID. The config center should show reverse references: which spaces, filters, reports, automations, and instances use this item. Without that, impact analysis is guesswork.
High-risk changes should go through draft, publish, and versioning. Adding an optional attribute can propagate quickly. Deleting a status or changing an attribute type should create a new version and explicitly upgrade spaces. For deprecation, prefer deactivation over deletion. Type conversion, like turning a Task into a Bug, is a constrained data migration. You must map attributes, states, workflows, and relationships. It's not a free dropdown.
The Takeaway
A work item platform isn't about dragging fields on a canvas. It's about clear boundaries. Types define identity. Attributes store facts. Workflows constrain change. Relationships connect objects. Scope decides where rules apply. And versions protect running instances.
Back to the opening question: requiring verification result on closure isn't adding a required field to the detail page. It's adding an input to the "Close" transition. Requiring root cause for critical defects isn't making root cause globally required. It's a conditional server-side validation. They can appear on the same transition form, but they're different rules.
When your system can answer what an object is, what facts it holds, how it changes, what it connects to, and where rules apply, it becomes an enterprise-grade work item platform. That's what makes hazardous waste disposal manageable—not a pretty form, but a solid meta-model.
Comments (0)
Please sign in to post a comment.
Don't have an account? Create one
No comments yet. Be the first to comment!