I did the app route wrong by trusting the categorisation. Six months in I discovered every transfer between my own accounts was being counted as income, so my sheet said I was saving and the app said I was earning $1,800 a month more than I do.
Whatever you pick, reconcile against the actual bank balance once a month. Took me a while to learn that an automated feed is a claim, not a fact.
I've run both for about a year now, roughly an hour of AI voice a day and one human hour a week. The thing the machine does that a person never will is silently shrink itself to your level, it stops using tenses you fumble, it never asks you to repeat, and it never looks confused. So you get a beautifully calibrated conversation partner and zero information about whether you're actually comprehensible. My first proper conversation with a colleague from Medellín afterwards felt like a completely different language. I still use the AI daily, but I treat the human hour as the instrument that tells me the truth.
Numbers from my own meter, because the marketing pages talk in percentages. Mid winter we use somewhere around 35 to 45 kWh a day for heating and hot water at a measured seasonal performance of about 3.4. On a flat rate that is a simple multiplication. On a time of use tariff the same kWh cost between roughly half and one and a half times as much depending on when they land, so the question is only what fraction you can move.
We manage to put about 60 percent of the daily kWh into cheap windows without a battery. That was worth switching for. If you can only shift 25 percent because someone is cold at teatime, the peak penalty eats it.
Testing it manually first is exactly right. Set the schedule as if you were on the tariff for a fortnight and see whether the house is still comfortable at half six in the evening. If it is, switch. If you are reaching for the thermostat at five, do not.
Be careful with that one. I did it, missed the reminder while travelling, and a name I did care about expired. Getting it back was not a renewal, it was a redemption fee, and the quote I was given was around ninety dollars against a renewal of about twelve. Leave auto-renew on for anything you would be upset to lose and use the reminder only to decide about cancelling.
One rule that has served me well: never let hardware belonging to one employer touch a network path controlled by the other. No sharing a VPN, no tethering machine A through machine B, no shared cloud drive as a scratch space. Two separate stacks that never meet, even when it's inconvenient.
Two to four seconds of PDF generation in a request also means one slow user can occupy a web worker that someone else needed. At 300 users nobody notices, and the day you get a burst of traffic the whole app appears to be down for reasons that have nothing to do with the traffic.
The reclamation rule is exactly the kind of thing that's in the docs and never in the blog posts recommending it. A quiet hobby API is precisely what would get caught.
Check the Domain attribute too. If your backend is setting Domain=api.example.com explicitly and your app runs on app.example.com, the browser will store it but never send it to the app's requests. Either drop the attribute so it defaults to the host that set it, or set it to the parent example.com.
We do the opposite and I'd gently argue for it. Everything is visible to both of us, including the personal accounts, and it has been better for us than the walled version.
Not because of trust - because of arguments. When only the joint pot is shared, every disagreement becomes "you're not contributing enough" with no shared evidence. When it's all visible, the conversation is about numbers on a screen and it's over in five minutes. I understand why people don't want this. I'd just say the privacy version has its own cost and it took us a year to notice ours.
I made your mistake with money attached. Signed for a system partly because I treated the credit as a cash payment arriving in spring, then discovered my liability was small because most of my income that year was taxed at low rates. The carryforward is real and I will get there, but it made the first two years of the loan tighter than the salesperson's spreadsheet suggested. If a salesperson shows you a payback chart with the credit as a lump sum in year one, ask them what happens if your liability is small.
Add a step to your migration checklist: before you change anything, run a lookup for the A, AAAA, MX, TXT, CNAME and NS records and paste the output into the ticket. It takes two minutes and it means the rollback is copy and paste rather than archaeology.
Citations also move constantly. Mass digitisation of newspapers has pushed hundreds of first dates earlier in the last twenty years, and amateurs find a good share of them. If a date looks late to you, it might just be waiting for someone to search the right archive.
Referrals, mostly. The free ones make money when you take a product they suggest - a credit card, a savings account, a loan refinance, sometimes an insurance quote. That's why the free apps are so keen to tell you your credit score and so keen to show you a card with a better rate.
It's not sinister on its own, but it does shape the product. An app funded by card referrals will never say "you don't need another card." That's the thing I'd actually weigh, more than the data question.
The thing managed WordPress hosting actually sells you is a good day when something breaks: a one click restore to yesterday, a staging copy to test a plugin update, and support who know the platform. On a brochure site that might be twice a year. If your retainer means their emergency is your evening, that convenience is worth paying for out of the retainer, and if the client is buying direct on price then it is not.
My paid audit came from a firm that also sold insulation and air sealing, and every finding pointed neatly at their most profitable service while the ducts went unmentioned. The second opinion I got later, from someone who only did testing, found the duct problem in twenty minutes. If you can find an assessor who does not sell the remediation, pay them instead.
Watch out for the filter jug too. Softened or over-filtered water with almost nothing left in it extracts badly and tastes hollow, which reads as watery. If your jug filter cartridge is months overdue it is doing nothing, and if it is brand new and your tap water is very soft to start with you can end up under-extracting for a completely different reason.
The planner is walking backwards down the created_at index and throwing away every row that isn't your tenant until it collects 50. For a tenant with 40% of the table that's quick. For a tenant with 0.1% of the table it reads millions of rows to find fifty, which is why small tenants are slower. That inversion is the signature of this exact problem.
You want one composite index in the order the query needs:
create index concurrently on events (tenant_id, created_at desc);
Then the equality column narrows first and the sort comes free from the index order. Your two single-column indexes can't do that, the planner has to pick one and pay for the other half.
Drop the standalone tenant_id index afterwards, the composite covers everything it did.
Rule of thumb that gets you most of the way: equality columns first, then the range or sort column, then anything you're only selecting. And build them with concurrently on a live table unless you enjoy explaining a lock to your colleagues.