All articles

Software

Custom Software Development in Ankara: Scope and Acceptance Criteria

Many disagreements in custom software projects arise when people interpret the same feature differently. Define scope through business tasks and observable acceptance criteria to reduce uncertainty. Examples show how to make decisions about data, permissions, integrations and releases concrete.

16 October 2026·91 Ajans·8 min read

An ambiguous feature generates different expectations

The phrase “we need quote management” can start a software project, but it is not enough to finish it. The sales team may want to see price history, the manager may want to approve, the finance team may want to monitor collections. Everyone may be thinking of another function when using the same expression. The primary goal in custom software development is not to fix all the details forever; it is to agree, in a shared language, which tasks the first release will complete and which rules it will follow. This language should consist of understandable tasks.

Consider a technical service company in Ankara that works on a project basis. The request comes by email, the team carries out a site assessment, the cost is prepared and the manager approves the offer. The sentence “CRM will be developed” does not explain this flow. It should be stated who opened the request, when the discovery information was added, and which fields can be changed after approval. These details from the actual workflow determine both the screens and the data model. The scope of the software depends on the way the business works.

Describe each need through the user, task and purpose

In each requirement, specify who will do what and why. A statement like “As a sales representative, I want to see previous quotes so I can evaluate the history of the current quote prepared for the same customer” provides more context than the screen title. GOV.UK guide to user stories explains how to define user, need and purpose together. This format is not a mandatory template; it is a study tool that helps identify missing questions.

If the purpose of the story cannot be written, re-evaluate the necessity of the feature. For example, showing every field in the report may not make it easier to make decisions. What decision will the manager make and what information will they need for this decision? Likewise, a notification is not useful just because it is sent. The content, timing and link should be determined according to the action the person receiving the notification will take. Discussing the requirement at this level helps reduce unnecessary screens and constantly postponed details.

Define acceptance criteria through observable behavior

Acceptance criteria describe how you will know when a job is completed. Instead of “make it easy to use,” write something like “an authorized user can add a new interaction note in the customer record and view the note when the record is reopened.” Not every criterion needs an automated test; it can also be checked through a demonstration. The important thing is that different people expect the same behavior. The criteria should be relevant to the purpose of the feature and free of unnecessary technical details.

Expand examples for a quote approval. The draft quote can be edited, the quote awaiting approval can be reviewed by the designated person, and the rejected quote can be returned with an explanation. If the approved price changes, is re-approval required? Can the old version be viewed? These are business rules; they should not be left to the guesswork of the software team. When the error and authorization conditions are written in addition to the normal path, the test plan becomes concrete by itself. The team knows from the beginning which examples to show during acceptance.

Examine data and permissions separately

Even if the feature list is ready, data questions may remain incomplete. Does a customer have more than one branch, can the same person be associated with different institutions, should the old record be deleted or inactive? These decisions affect reports and record history. Check the meaning of the fields before moving existing tables directly to the new system. If different parts of the business use the same word in different meanings, a common definition should be made. A data dictionary can be prepared for this purpose.

The distinction between "administrator" and "user" in the authorization system is not always sufficient. While one person may see their own proposal, the team leader may want to see the entire team's records. Some fields may only need to be edited by finance. Consider viewing, creating, modifying, and deleting operations separately in the role table. Discuss the need for individual access rather than shared account use. The role-based authorization and common data approach at Workhub CRM provides a concrete product context for this discussion.

Document the boundaries of integration and migration

If external system connection is required, determine which data is the primary source. If the product price comes from the accounting system, but the sales team can enter a customer-specific price, the relationship between the two information must be defined. It is also a business decision whether the process should stop or be put on hold when the connection is lost. It is not enough to write the successful status of each integration; Acceptance samples should also be prepared for conditions such as delay, missing data and retransmission. Thus, responsibilities lost between systems are reduced.

Perform a sample transfer to migrate old data. Total number of records is not the only control; Customer relations, date information and file links should also be examined. It should be agreed in advance who will correct missing data and which records will be excluded during transfer. If data entry into the old system will continue on the day of transition, it should also be planned how the latest changes will be received. This may not be as simple as uploading a few files after development is finished and may require separate acceptance checks.

Explain the boundaries of the first release

Trying to solve all needs in the same version may delay seeing the first benefit. Instead of simply listing priorities with “must-have” labels, discuss which task serves which outcome. If a feature is required for another job to run, save it as a dependency. Tasks that are rarely used and can be temporarily carried out manually can be postponed for later. However, the responsible person and the limit of the manual work should be clear. Invisible temporary jobs can become permanent burdens over time.

The approach in the MVP development guide helps determine the learning and usage intent of the first release. Postponing a feature does not mean dismissing the need as unimportant. The reason for the postponement, the situation in which it will be re-evaluated and the necessary data can be recorded. Thus, the project list is no longer an ever-growing wish list. The conditions under which the first release will be considered successful are also known to the team. These conditions should cover both technical work and business preparation.

Maintain a change log

It is normal to learn new information during development. The problem is that new decisions quietly replace the agreed scope. The change record should include the reason for the request, the tasks affected, duration, and testing impact. Not every change may require a heavy meeting; the important thing is that the decision is traceable. When the business rule changes, the acceptance criteria must also be updated. Otherwise, while the developer produces the new expectation, the testing team may check the old expectation and an unnecessary conflict may occur.

You do not need to have a completed technical specification when interviewing for custom software service. Sharing real tasks, sample records and steps you are having difficulty with may be a useful starting point. At the end of the project, the scope should be explained through business tasks, acceptance with observable behaviors, and responsibilities with named roles. A well-defined project file does not prevent change; it allows you to see which decision the change affects. The delivery of the software can also be evaluated against that clarity.

Let's work together

Thanks for reading.
Let's make something.

Tell us about your project