At the end of your app building project, you probably expect that you can take your app and do what you want with it. Not so fast.
While you might be given the app binary (the program that actually runs), it is very possible that the development firm you worked with will retain ownership of the underlying source code.
But who cares, right? What do you need with the source code? You have your app! Slap it on the app store for 99c and wait for the money to pour in.
Sounds great... until you realize the size of the hole you've dug yourself into.
Want to add a new feature? Nope.
Found a bug you need to fix? Nope.
Security breach you need to resolve? Nope.
Want to review the quality of the code? Nope.
Want to test how secure your application is? Nope.
Imagine you want to grow a plant from seeds. You aren't a horticulturist, and have no idea how to grow plants. You source a gardener to help you. You pay the gardener to plant the seeds, and pay all the maintenance costs for cultivation. All goes well and your plant grows, but your plant is on the gardener's property. The gardener gets busy with other clients, and neglects your plant. Maybe they forget to water your plant, or accidentally poison it. As much as you want to keep your plant alive, the gardener has all the power.
Your software application is like the plant. Without regular upkeep and attention, it will die. The owner of an application's source code ultimately holds the reigns.
What if you can't afford to invest any more money into development? What if the development firm goes out of business? What if the development firm is super busy and doesn't have time to make your critical changes for another 6 months? What if the development firm changes their internal processes and they "no longer support" your app's tech stack?
When you don't own your source code, you are 100% at the mercy of the development firm that built your app.