I once joined Everphone for a focused engagement on a Rails application employees used in their everyday operational work. They needed a faster way to find information inside the existing tool, so I added Typesense and implemented the application search logic around it. The useful result came from improving a workflow people already relied on, with the search behaviour kept close to the application the team would continue maintaining.
That project captures the central decision in custom internal tools development. The interface matters because employees need to complete their work, while the lasting engineering questions concern data ownership, permissions, integrations, exceptions, deployment, and support. A small internal tool becomes valuable when it completes one operational workflow and remains understandable after the first developer leaves.
Define the operational result before the interface
Internal-tool ideas often arrive as interface requests: build a dashboard, replace a spreadsheet, add an admin panel, or put search across several systems. Those descriptions identify a possible surface without defining the work it must complete. Start with the operational result and the person responsible for producing it.
Map the workflow from trigger to outcome. Include the systems and people involved in the current process. This simple sequence provides the first scope boundary:
1A person needs to complete a task
2 |
3Required data enters from people or systems
4 |
5Rules and permissions shape the available actions
6 |
7The person makes or confirms a decision
8 |
9Systems are updated
10 |
11The result becomes visible to the next owner
For an approval tool, the result may be a request with a recorded decision, visible status, and audit history. For operational search, the result is an employee finding the correct record from the partial information available during real work. For an admin panel, the result may be correcting customer state safely without direct database access.
The workflow should name its users, data, decisions, exceptions, and owner. This provides a boundary for scope and exposes places where the current process depends on undocumented knowledge. It also gives the team a way to evaluate whether a feature helps complete the work.
Decide whether the workflow needs a tool
A documented manual process can be enough when volume is low and the cost of an error is limited. A spreadsheet works well for structured data shared by a small group when permissions, concurrent changes, and integrations remain simple. SaaS configuration may cover the whole workflow once the team understands which settings are available.
Automation is useful when a clear trigger and predictable rules can move information without requiring a new interface. Low-code platforms can provide forms, tables, authentication, and connectors quickly for common administrative workflows. Custom code becomes reasonable when the workflow creates meaningful business value and requires control, integration, or behaviour the higher options cannot provide economically.
The build-versus-buy internal tools framework helps compare initial implementation with ongoing ownership. That ownership includes support questions, changing business rules, vendor updates, security, data recovery, and the opportunity cost of future engineering work. AI-assisted development may reduce implementation time without removing those responsibilities.
The decision can follow a simple ladder. Stop when one option covers the workflow at an acceptable ownership cost. Move down only when the higher option has a concrete limitation:
- Clarify and document the process.
- Improve the existing spreadsheet or system configuration.
- Automate the narrow transfer or calculation creating friction.
- Use an existing internal-tool platform when its constraints fit.
- Build custom software when the workflow justifies owning it.
This sequence keeps the implementation proportional to the problem. It also leaves room for a small solution to prove the value before the company creates another application to operate. Evidence from that smaller solution can guide the next investment.
Build one complete workflow
The first release should let one user complete one useful path with real data. A collection of screens that ends before the business action moves the risk into manual work and support. Completing the path exposes the permissions, validation, integration, and failure behaviour required for actual use.
For a hypothetical customer-refund tool, the visible form is only one part of the workflow. The system needs to identify the customer and transaction, determine which refunds the employee may request, validate the amount, call the payment provider, record the result, and explain failures. Sensitive or high-value refunds may require approval immediately before execution.
The workflow should account for the areas below. Their depth should match the data and consequences involved. Recording them early prevents the visible interface from hiding operational requirements:
- Authentication and role-based access
- Required inputs and validation
- Business rules and approval thresholds
- Reads and writes across existing systems
- Duplicate requests and retries
- Partial failures
- Audit history
- User-visible status
- Manual correction and escalation
A focused application or the existing system that owns the relevant rules can provide these behaviours. Keeping them close to their data and business logic often reduces duplicated knowledge. The team can add a broader platform when several proven workflows create a concrete reason for one.
Connect to existing systems without duplicating them
An internal tool usually sits between people and existing systems. It may read customer data from a CRM, write approval status to an operational database, search an index, send a message, and store an audit record. The design should identify which system owns each piece of data and which system merely presents or transforms it.
At Everphone, I treated search as a product workflow inside the existing Rails application. Typesense provided the search capability, while the Rails codebase remained responsible for the application behaviour employees used. This kept the integration aligned with the existing product and avoided creating a separate destination for the same operational work.
The Candy.io marketplace search project required a similar concern across different layers. OpenSearch handled retrieval, a GraphQL API exposed the product contract, and a Next.js frontend consumed it. Search-engine details stayed behind the API, and the consuming interface depended on the GraphQL contract.
A small system-context diagram helps make these boundaries visible. Label each connection with the data or action crossing it. The diagram should also identify the system that owns the final state:
1Employee
2 |
3Internal tool
4 |---- reads customer data ----> CRM
5 |---- requests business action -> Application API
6 |---- searches records --------> Search index
7 |---- records decision --------> Audit store
Direct database access can feel efficient during an early build. It also bypasses application rules and couples the tool to storage details, so an existing API or service should be reused when it expresses the required operation. A new narrow endpoint can provide a controlled boundary when no suitable interface exists.
Set the minimum production floor
Employee-only software still handles real business data and actions. The production floor should match the consequence of those actions and the sensitivity of the information involved. An internal reporting view needs different controls from a tool that changes account permissions or issues refunds.
Before launch, decide how the tool will handle the following areas. Assign an owner to each decision and record any accepted limitation. The answers form the minimum production floor:
| Area | Practical question |
|---|---|
| Identity | How are employees authenticated and removed? |
| Permissions | Which records and actions can each role access? |
| Validation | Which invalid or unsafe requests must be rejected? |
| Audit history | Which decisions and changes must be traceable? |
| Reliability | What happens when a dependency is unavailable? |
| Recovery | Can failed or duplicate actions be corrected safely? |
| Deployment | Can another engineer release a change predictably? |
| Monitoring | How does the owner learn that the workflow is failing? |
| Support | Who answers users and resolves exceptional cases? |
| Data lifecycle | Where is sensitive data stored, retained, and deleted? |
This floor is deliberately specific to the workflow. Infrastructure designed for millions of public users would be wasteful for a five-person approval tool. Reliable permissions and an audit trail remain necessary when its decisions carry financial or organisational consequences.
Pilot with real users and preserve the fallback
Start with the people who already understand the process and feel its friction. Their usage will reveal missing states, unofficial workarounds, ambiguous labels, and exceptions that process diagrams failed to capture. A small pilot makes those discoveries manageable.
Keep the previous process available while the team establishes reliability. The fallback might be a manual queue, an export, or a clear escalation path. Users need to know when to use it and how actions completed outside the tool return to a consistent system state.
Measure workflow outcomes alongside interface activity. Time to complete the task, error and exception volume, support requests, adoption by the intended users, and the quality of the final result provide useful signals. Login counts provide too little evidence about operational improvement.
The pilot should also test ownership. Another engineer should be able to deploy it, the process owner should be able to explain the rules, and support staff should know where failures appear. These checks show whether the software can continue without its original builder.
When the internal tool has earned another phase
Expansion becomes reasonable when the first workflow is used, its value is visible, and the team understands its operating cost. New roles, integrations, reports, and workflows can then be assessed against evidence from real use. The tool grows through concrete operational demand.
The next phase may also be removal. If the pilot shows low usage, weak value, or a SaaS product has become a better fit, the team should be able to export necessary data and retire the tool. A small focused architecture makes that decision easier.
MBV Labs builds internal tools, backend systems, integrations, and automation for focused business workflows. If an important operation has outgrown spreadsheets or disconnected systems, you can share the workflow and its current bottleneck. We can decide whether configuration, automation, a platform, or custom software is the shortest durable path.
