Modeling how the company actually worked. The hardest part was not creating tables for projects, workers, vehicles, materials, or costs. It was figuring out how all of those things related to each other in practice. A vehicle could move between projects, costs could be split, materials could be recorded in different units, and different sites often worked slightly differently.
Getting people to actually use it. The system could not feel like traditional ERP software. People on site needed to enter information quickly, while management still needed enough detail for reports and cost tracking. If entering data took too long, people would simply go back to messages, spreadsheets, or paper.
Making the numbers trustworthy. Cost and project data was not always entered in a perfectly consistent way. Invoices could arrive later, quantities could use different units, and some costs belonged to more than one project. A lot of work went into making sure reports and totals still reflected what was really happening.
Requirements changed once the system was being used. A lot of useful requirements only became obvious after the client started working with real data. Reports changed, new relationships appeared, and workflows that looked fine on paper needed to be adjusted. The system had to keep evolving without breaking what was already in use.