When I started Sojago, I thought the hardest part would be modelling rental management correctly.
That part is hard. A rental agency has to connect properties, tenants, leases, rent, partial payments, unpaid balances, receipts, expenses, commissions, and the money owed to each owner.
But a correct data model is only one part of a useful product. Sojago keeps teaching me that the software also has to fit existing habits, explain its numbers, and earn a place in the agency’s monthly routine.
Every number needs a history
A rent payment looks simple on screen: choose a tenant, enter an amount, save, and issue a receipt.
Behind that action are several questions. Which month does the payment cover? Is there an older balance? What happens if the amount is short? How much commission does the agency keep? Which expenses affect the owner’s account?
If the product records the payment but cannot explain the final balance, the user still needs a notebook or spreadsheet to check the answer.
That has changed how I think about financial correctness. Getting the total right is necessary. Keeping enough history to explain the total is just as important. Corrections should be visible. Partial payments need a clear destination. The receipt, tenant balance, and owner report should agree.
When somebody asks, “Why do we owe the owner this amount?”, the answer should be in the product.
Simple does not mean empty
People often ask for simple software. It is easy to hear that as a request for fewer fields and cleaner screens.
Usually, they are asking for fewer doubts.
Will this payment cover the oldest debt? Can I fix a mistake? Did the action go through? What will the owner see? Who else can change this record?
A short form can still be confusing if none of those answers are clear. A slightly longer flow can feel simple when the defaults make sense and the consequences are visible.
This matters even more on a phone. Someone may be standing in front of a tenant, moving between properties, or switching to WhatsApp during the same task. The interface has to be calm, direct, and forgiving.
Existing habits are part of the product problem
An agency does not begin using Sojago with clean data and an empty history. It already has paper records, spreadsheets, messages, and its own way of settling disagreements.
Those tools are imperfect, but they are familiar. Asking a team to leave them behind is asking for trust.
That means onboarding is not a side task. Importing data, checking balances, teaching the workflow, and supporting the first month are part of the product experience. They also cost time, so the price has to support them.
I used to think better design could remove most of this work. Better design helps, but some trust is earned only by being present when the new process meets a real problem.
AI comes after reliable records
There are useful places for AI in Sojago. It can help clean an imported spreadsheet, spot an unusual entry, draft a plain-language explanation, or reduce repetitive support work.
None of that works well if the underlying records are unreliable.
An assistant can summarize a tenant’s history only if the payments and balances are correct. It can suggest a follow-up only if it knows what actually happened. The unglamorous work of building a trustworthy record still comes first.
A good product is not yet a good business
This may be the hardest lesson.
Sojago can model the domain well and still fail as a company. Agencies may not feel enough urgency. They may like the product but keep the old spreadsheet. The onboarding cost may be higher than the price they will pay.
Compliments do not answer those questions.
The answers I need are ordinary: real agency data, people using the product every week, a completed month-end, owner information the team trusts, continued use, and payment.
I am learning to judge progress by those signs instead of by how complete the roadmap looks.
Sojago has made me a better product engineer. More importantly, it is pushing me to become less comfortable with building in isolation. The next useful lesson will come from an agency using the product when the month gets messy—not from one more feature added in private.