12 years of experience. 15+ apps delivered. One dedicated point of contact.
In short: I build iOS and Android apps for clients in San Francisco (873,965 residents) and across California. One single point of contact, 12 years of experience, delivery from concept to publication in 8 to 16 weeks.
I will tell you the truth, even when it's uncomfortable. That is the promise I make to all my clients from Cannes.
Creating an iOS or Android app takes time and money. So, no sugarcoating between us. With 12 years of experience under my belt, if your requirements are all over the place, I will pull the brakes.
The most important factor: I am here to make sure your investment actually serves your users. That is how we build great applications.
Publishing an app is most the work. Maintaining it is the remaining a large share.
Most businesses in San Francisco celebrate their app launch on the stores.
And then? Nothing.
The code slowly rots. Nobody watches the crash reports. Nobody anticipates when a new version of iOS or Android changes the rules.
The app that was supposed to scale your business becomes a massive liability.
Let's look at reality.
You just bought a brand new car. If you never change the oil, the engine will seize in two years. For a mobile application, it is exactly the same concept.
The hidden cost of inaction is invisible at first, but it hits hard. Users hate broken software.
There is no single type of maintenance, but three distinct pillars. Each plays a crucial role in the survival of your project in San Francisco.
If you ignore these three pillars, the punishment from the market is immediate.
The key point: without corrective maintenance, you lose user trust (a large uninstall after a technical bug). Without adaptive maintenance, your app eventually disappears from the stores. And without evolutive maintenance, your competitors in San Francisco simply overtake you.
A mobile application is a living digital product. The moment you stop taking care of it, technical debt accumulates. It is like termites in a wooden house. At first, you see nothing. Eventually, everything collapses.
San Francisco is the one place where I am usually not the first developer someone has spoken to, and often not the first to have written code for the idea. Inheriting a half-finished app is a different job from starting one — the first week goes on reading what exists and telling you honestly which parts are worth keeping.
That week is not billable padding, it is the most valuable week of the project. There are really only three verdicts. The code is sound and undocumented, in which case we keep it and I write down how it works. The code is unsound but the data model is right, in which case we keep the database and rebuild above it, which is far cheaper than it sounds. Or the foundations are wrong, in which case the honest answer is to start again, and hearing that early costs you a week instead of a quarter.
The hardest part of that conversation is usually not technical. Someone has already paid for the existing work, and "start again" sounds like admitting the money was wasted. It usually was not: the existing version taught you what the product should be, which is exactly what a first attempt is for. But sunk cost is a poor reason to keep an architecture that will slow every future change, and I would rather have that argument in week one than deliver a build that stays fragile forever.
The nine-hour gap is real and shapes how we work. Our days barely overlap — your early morning is my evening. That suits a project with defined weekly deliverables you review at your desk and I act on the next day. It suits badly a project that needs live discussion to make progress. I will tell you which of the two yours is before we start, because getting that wrong wastes a month for both of us.
The number one fear when starting an app project is losing control: you sign an estimate, hand over your idea, and hear nothing for three months. The way of working described here exists so that does not happen.
Three rules, the same on every project:
You test the app on your own phone every two weeks.
With Invent Better you get an installable build every two weeks, even when it is incomplete. That is the difference between following a project and waiting for one. You have access to the code repository from day one, and every decision is written down rather than remembered. A disagreement surfaces after two weeks, not at final delivery.
Software development is far too often treated as a terrifying black box.
In many traditional projects, you sign a massive specification document, you pay a hefty deposit, and then you just wait. For months, you receive nothing but vague updates. A few reassuring emails. A lot of "trust us, it is coming along great."
And then the day of the final big reveal in San Francisco arrives... and your heart sinks. The product looks and feels nothing like what you envisioned. But it is entirely too late, and your budget is completely gone.
The most important factor: when you work with me, that black box simply does not exist. Everything is entirely transparent.
The most common scenario in San Francisco is code takeover. You had an application built by another developer or agency, and today, you are left alone with an unstable product.
I do not judge the past; I secure the future. Here is the takeover methodology:
The Audit: It is like a doctor examining a patient for the very first time. I comb through the code, verify the architecture, analyze the crash data, and read the store reviews.
The Triage: We do not rewrite everything immediately. We prioritize. Security flaws and major crashes come first. Then performance bottlenecks. Finally, the minor interface glitches.
The Stabilization Sprint (2 to 4 weeks): This is the emergency surgery room. I fix the top 10 most critical issues. I install monitoring probes. I add automated tests to the most fragile parts of your application for your customers in California.
Cruising Altitude: Once stabilized, the app enters a standard monthly rhythm. You finally stop stressing out every time your phone rings because of a complaining customer.
That morning, Apple pushed a major iOS system update. It is the exact event that unprepared developers fear the most.
For a highly active e-commerce client in San Francisco, the punishment was immediate: the application's checkout flow broke completely. Not a single purchase could go through. Mobile revenue dropped to zero in a matter of minutes.
Fortunately, we had an active maintenance contract with real-time monitoring in place.
Just two hours after the issue began, Crashlytics sent me a red alert. I was able to identify the precise root cause within minutes: Apple had abruptly deprecated an older form validation API without providing full backward compatibility.
I built the fix, tested the solution thoroughly on the staging environment, and submitted the critical update to Apple, utilizing their expedited review channel for major bugs.
I do not quote maintenance without looking at the app first, because technical debt and traffic differ in every case. So I work in levels. The essential level covers monitoring, critical bug fixes, and keeping the app compatible with each new iOS and Android release. Higher levels add feature work on a predictable monthly basis.
I do not provide cookie-cutter quotes without seeing the patient first. Every app in San Francisco is unique, has different technical debt, and handles different traffic volumes. But here is how I structure my service levels.
The Essential level: This is life support. I provide 24/7 monitoring, fix critical blocking bugs, and ensure ongoing compatibility with new iOS and Android versions. Your app stays alive, functional, and compliant with store rules. It is your basic insurance policy.
Every industry has its own technical emergencies. Maintaining an e-commerce app requires completely different reflexes than maintaining a medical platform in San Francisco.
There is absolutely no room for error. GDPR and HIPAA compliance audits must be constantly anticipated. Patient data security requires regular penetration testing to ensure the backend architecture remains bulletproof. I also actively maintain vital features like offline modes, which are essential for rural practitioners traveling across California.
The rhythm is highly seasonal. The goal is to have a flawless, stress-tested application ready right before the summer or winter peaks in San Francisco. Maintenance focuses heavily on offline mode reliability (for foreign tourists without cellular data) and the real-time synchronization of booking databases. A crashing app in the middle of August is disastrous.
Not always, which is good news for the budget. An app that only handles its own user's data — a list, a tracker, a calculation — can keep everything on the phone and cost nothing to run. As soon as data has to be shared between people, synced across two devices, or seen by you on your side, a server is needed, and that is a cost that comes back every month.
It depends entirely on what was decided at the start, and it is one of the few choices that cannot be postponed. An app can keep its data on the device, let people work, then sync as soon as the network returns — with nobody pressing anything. It is essential the moment work happens in a warehouse, a basement, or on the road. Added afterwards, it often means rewriting half the app.
We pick a floor, and that choice has a price. Supporting older OS versions means more testing and giving up some capabilities. We look at who your users are: a consumer app and an internal tool deployed on a known fleet do not get the same answer. The floor can be raised later, when usage data shows nobody is left behind it.
It matters more than people think, because a heavy app is the first uninstalled when storage runs short. The weight rarely comes from the code: it is the bundled images and fonts. Loading images from the server rather than shipping them, and serving them at the right size, often halves it. That is invisible work, and it is the work that keeps the app installed.
Technically, sending costs almost nothing. What costs is everything around it: a server to decide what to send to whom and when, and enough care not to become intrusive. It is also the easiest mechanism to waste — a useless notification is the first cause of uninstalls, and an uninstalled app does not come back. Send few and make them useful, or send none.
Yes, with the user's permission, and how you ask matters as much as the feature. A permission demanded on first launch, with no context, is refused most of the time — and once refused it is painful to recover. Asked at the moment the person understands why, it is granted. Apple also requires a written explanation for every permission, and a vague one gets the app rejected.
Through the stores, and not instantly: Apple and Google review every version before it is published, and phones update at the pace of their own settings. So expect a share of your users to stay on an older version for weeks. That is why the server has to keep talking to previous versions, and why we avoid changes that break everything at once.
Often yes, and it all hangs on one thing: does your vendor provide a documented API. If they do, it is ordinary work. If they do not, or bill it per module, or refuse to open it to a third party, no app will work around that cleanly — workarounds exist and break at the vendor's next update. It is a question to put to your supplier before you put yours to me.
A website can be installed on the home screen, work offline and launch full-screen, with no store involved. It is a real third answer, and it is under-recommended because it earns less for whoever recommends it. Its limits: notifications stay restricted on iPhone, sensor access is partial, and you are not present in the stores — which matters if your customers look for you there.
Only if you have an audience in another language — and then it has to be designed in, not added on. Translation is not what costs; room is. German makes labels half again as long and overflows buttons drawn for English. Leaving room from the start costs nothing; redoing the screens afterwards costs days. The legal texts and the store listing count too.
While you hesitate, your competitors in San Francisco are moving forward.
The mobile world moves fast. Very fast. Today, most global web traffic comes from mobile devices. If you keep pushing back the creation of your app, someone else will happily take your spot in California.
But be careful, do not confuse speed with haste. Launching an unstable application is the worst possible strategy.
In short: you have to act fast, but above all, you have to do it right. ⏳

30 minutes to start
Book →Most of my projects run remotely, and in practice that changes very little. We talk over video whenever you need to, not only at major milestones, and you can reach me with questions at any point during the project — I always answer.
Once we are working together, travelling to meet you on site can absolutely be arranged if your project calls for it. Travel costs are quoted separately, upfront and with no surprises.