Custom Software Projects

Software project handover: What belongs with the source code?

Transfer setup instructions, account ownership, data knowledge and release procedures with the code. Verify a software handover through practical exercises.

A close-up of software source code displayed on a screen

The incoming team opens the repository, runs the setup command and immediately has a question: which database version does this application require? Later, someone discovers that the daily reports depend on a scheduled task on another server. The administration screen works, but the reports never arrive. The business has received the source code without receiving enough information to operate the software. A software project handover should close this gap. Its practical test is whether the authorised receiving team can maintain the system under understood conditions.

Consider a hypothetical service company transferring its custom application to a different maintenance team. The software collects customer requests, assigns work and produces daily reports. This example is an editorial scenario, not a customer case study. The same approach can support an ecommerce application or a corporate portal, with acceptance conditions adapted to payment processing, personal data and external connections. The business owner, outgoing developer and incoming team need a shared transfer plan that describes both the assets and the responsibilities involved.

Define the boundary of the handover

We will deliver the software is too broad to serve as an acceptance condition. List the modules, environments and externally supplied services. A customer portal may live in another repository, while reporting belongs to a separate account. A mobile product may also require control of its distribution account. For each asset, record its technical location, business owner, access contact and verification date. Keep actual passwords out of this inventory. Document the approved route for obtaining access rather than scattering credentials through a shared spreadsheet.

Draw a separate boundary around unfinished development. Identify the version being transferred, the defects that remain open and the features awaiting acceptance. A visible screen does not prove that the underlying business rules are complete. Record the present behaviour and the planned behaviour separately, with an owner for each unresolved question. Otherwise, the receiving team may estimate maintenance work against an imagined finished product. A clear inventory helps the business understand what it can operate today and what still needs a development decision.

Connect the repository to the running release

An archive containing code is a starting point. The incoming team also needs to know which recorded change corresponds to production. Include repository history, release labels and the instructions used to create the deployed build. Explain any difference between files on the server and files in the repository. A manually repaired reporting query may never have been committed. Without that information, the next deployment could quietly restore the defect. Handover review is a useful occasion to find these differences before a new team inherits them.

Separate generated output from editable source. Compressed browser assets do not replace the source files and build configuration needed to change them. Document the command that produces each deployable output, the relevant tool versions and the dependency lock files. Remove the need to guess which temporary directory contains the latest work. Someone taking over should be able to build a clean copy and compare the result with the intended release. This reduces reliance on a particular developer’s laptop and makes future maintenance easier to review.

Ask another person to perform a clean installation

The useful test of a setup guide is whether someone other than its author can follow it. Let the receiving team use a controlled environment to obtain the code and complete the documented steps. Specify the runtime, database, cache and file storage components. An example environment file should show variable names without real secrets. Explain which values are required and which change between environments. If an installation step still depends on an improvised verbal explanation, add that explanation to the maintained guide before repeating the test.

Initial administrator creation and reference data belong in the same exercise. Keep demonstration customers distinguishable from production records and explain how test data is removed. In the service company example, the application may open successfully while refusing to move a request forward because the task statuses were never created. Seeing a login screen is therefore insufficient. Create a request, assign it and find its outcome in the report. This small workflow gives the business a concrete description of what a successful installation actually enables.

Distinguish ownership from day-to-day permission

The business should know who owns the domain, hosting, repository, notification service and backup account. A developer managing these resources does not make dependence on a personal email address necessary. Verify that authorised business-controlled accounts can maintain access. What happens if a colleague leaves? Who receives renewal and billing notices? Administrative continuity includes payment responsibility and account recovery, as well as the ability to open a dashboard. Test the access that will actually be used rather than accepting an unverified list of account names.

Giving everyone administrator privileges may appear convenient during a transition, but it creates another problem to resolve later. Provide the permissions needed for the incoming team’s work and review outgoing access at the agreed milestone. Plan secret rotation around service dependencies. Replacing an integration key before updating the scheduled tasks that use it can cause an avoidable interruption. Record who receives each access route and when temporary permissions end. A transfer should clarify control while keeping the application’s business workflow usable.

Explain the data and prove the recovery route

A database schema does not explain every business meaning. Provide a short data dictionary for important states, deletion behaviour, time fields and relationships. Describe the difference between archiving a customer and deleting one. Show where identifiers from external systems are stored. An unfamiliar field can look redundant while supporting an essential report or matching process. Good data documentation concentrates on information that would be costly to misinterpret. It should help the new team understand the consequences of a change instead of merely repeating column names.

Do more than point to the backup directory. Perform a controlled restoration and record the database version, attachment locations and required order of operations. Consider how records created after the selected backup would be handled. Do not assume the business’s acceptable data loss or recovery time. Agree on those expectations, then compare them with the exercise. Record the observed duration and any obstacles. The existence of a backup file and the existence of a usable recovery process are different facts; acceptance should reflect the process actually demonstrated.

Document work that happens outside the interface

The daily reporting task in our example operates independently of the customer-facing screens. Queue workers, file conversions and external notifications may do the same. For each background job, record its trigger, expected outcome, failure contact and safe retry method. What happens if the job runs twice? Could it create duplicate messages or repeat a financial operation? Investigate these behaviours with controlled test conditions rather than real customer transactions. The resulting operating note should describe how to recognise a problem and what an authorised operator can safely do next.

For integrations, an endpoint address is only one part of the handover. Explain the permission scope, test account, timeout behaviour and route for inspecting failed records. If the external service is unavailable, what does the user see and where does the pending work remain? The receiving team should be able to answer these questions from the documentation and confirm them with an example flow. An old success screenshot does not prove that the current connection works. Provide a dated record of dependencies and known restrictions at transfer time.

Rehearse deployment, rollback and incident notification

Have the incoming team release a small, low-risk change to the test environment. They should see the required approval, the database update process and the signal used to judge success. Rollback may involve more than copying earlier files when a data structure has changed. Write down the order of operations and the conditions that stop a release. Choose the scale of the exercise according to the application’s risk. The aim is to avoid a situation where a new maintainer discovers the effect of an unfamiliar command in production.

Check monitoring access in the same session. The incoming team needs to inspect relevant errors and receive the appropriate notifications. If every alert still goes to the outgoing developer, operational responsibility has only changed on paper. Explain who receives an outage report, what the first response is and how the business is informed. Avoid unnecessarily sharing logs containing personal data or secrets. Monitoring should provide an actionable route from an observed problem to a responsible person, rather than an attractive dashboard nobody knows how to interpret.

Make acceptance a working session

During the final session, let the receiving team demonstrate installation, the basic customer workflow, a test deployment and a restoration. The outgoing team can explain unfamiliar details, but performing every step on its behalf would hide the knowledge gaps. Record unanswered questions with owners and dates. Include known defects and accepted restrictions in the handover record. If a transition support period is needed, agree on its duration, access boundary and contact route. Everyone should understand which responsibilities have transferred and which temporary support arrangement remains available.

For a new product, planning these conditions from the beginning is easier than reconstructing them at the end. BiKreatif’s custom software project service can bring requirements, development, testing and sustainable delivery into the same discussion. For an existing application, begin with a focused technical review. Missing documentation items do not all carry the same urgency. Installation blockers, unclear ownership and an unproven recovery route deserve early attention. A useful handover does not promise that questions will disappear; it makes the information and authorised people needed to answer them accessible.

Frequently asked questions

Does source code delivery automatically transfer every right?

No. Receiving files does not by itself explain the scope of use or modification rights. The parties’ agreement and the licences of included components require separate consideration. Distinguish business-specific development from external dependencies in the inventory. Clarify the intended rights with the authorised parties rather than expecting the technical team to infer them. Obtain appropriate specialist advice where the agreement requires it.

Is the handover complete if installation still needs the outgoing developer?

That situation reveals a knowledge dependency worth resolving. Identify the missing step, document it and ask another authorised person to repeat the installation. Some details require restricted access and should remain outside public documentation. The receiving team must still have a secure route to the necessary information. Repeatable setup is a practical acceptance condition, not a demand that every operational detail become public.

Should the test team receive production customer data?

Define the test requirement before copying live records. Suitable example data or appropriately anonymised information can support many workflow checks. If sensitive data is necessary, agree on access, retention and disposal conditions separately. Convenience during a handover does not justify unnecessary disclosure. Keep the setup guide and customer data exports under access arrangements suited to their different sensitivity.

Should every password be changed immediately during the transfer?

Review access promptly, but sequence changes around the services that rely on it. An integration secret may be used by several background jobs. Securely configuring the replacement, testing the connection and removing old access belong in one coordinated plan. Record which permissions remain and who has authority to use them. Unplanned rotation can interrupt a service without completing the ownership transfer.

Does a small application need all of this documentation?

The documentation can be shorter when the system is simpler. A concise installation guide, account inventory and deployment note may provide a useful beginning. The running version, ownership of access and recovery route still need clear explanations. Judge the handover by whether the receiving team can perform necessary work independently and safely, rather than by the number of documents or pages produced.

All articles