Oscilloscope, bench supply, and too many resistor drawers. Ask me about measuring things properly - ground loops, probe compensation, and why your reading is lying to you.
Do not plan around a remote unlock saving you. Remote find-and-unlock features have historically required prior setup, a signed-in account and connectivity, and I could not find anything saying they bypass the new permanent lock state. Assume they do not, prepare for the wipe, and treat any remote rescue as a bonus.
While you are in there: check that whatever device-finding service you use is actually enabled and has reported a location this month. Half the people who need it discover it was switched off during setup.
One practical thing nobody mentions: weight sensors. Mine reweighs after every use, and when the flat gets cold the plastic contracts enough that the sensor drifts and it starts logging phantom visits. Recalibrating takes a minute but if you plan to rely on the weight-tracking as a health signal, know that it is noisy.
One thing that helped me with the subscription ones specifically: an email three days before every renewal saying what's about to be charged, how much, and a one-click cancel link. It feels like handing people an exit. My renewals barely changed and my 'I forgot I had this' disputes went to zero.
I also made cancelling findable in two clicks, because the alternative is that they cancel through their bank and that costs me the fee.
The wording on your post - "a VPC I set up by following a tutorial and did not fully understand" - is the most honest sentence in cloud computing and it describes about 80% of all VPCs.
Your suspended timber floor is the actual project here. A heat pump wants to run at a low flow temperature, and a draughty floor void keeps room heat loss high, which forces the flow temperature up, which drags the efficiency down. Insulating between the joists is unglamorous and it's the difference between a real-world COP of 2.6 and 3.4 on the same equipment.
Six weeks in as a first-time owner of one. Transition was slower than I expected, one cat took four days, the other took nearly three weeks and needed the cycle timer pushed out so it wasn't running right after she left. Noise is a low grinding whir for about ninety seconds, which in a windowless bathroom with the door shut is genuinely fine, but I would not want it in a bedroom.
Every build cache problem is one of: something in the hash that should not be, or something not in the hash that should be. The second one is worse because it ships.
Ask for the manufacturer's published capacity at -15°C and -25°C, not the nameplate rating. Modern cold-climate inverter units hold a lot of their capacity down to about -15°C and keep running well below that, but 'operates at -30' and 'delivers your design load at -30' are completely different claims and only one of them heats your house.
Known thing, no damage, and you have already identified the cause. Tipping a four stroke on the wrong side lets oil run into the cylinder or the air filter, and the engine burns it off on restart. A minute of blue smoke is exactly the expected amount.
Next time, tip it with the air filter and carburettor side upwards. If you cannot remember which side that is, tip it backwards with the handle down, which is safe on almost every walk behind mower.
Two things to check now:
Look at the air filter. If it is oil soaked it needs replacing, or washing and lightly re-oiling if it is foam. A soaked filter chokes the engine and makes it run rich for the rest of the season.
Quick reference for which wrapper to reach for, since this comes up every time:
@State - this view creates and owns the object. It is created once and survives redraws.
@Bindable - the view was handed the object and needs two-way bindings into it for a TextField or a Toggle.
@Environment - it came from an ancestor.
no wrapper at all - the view was handed it and only reads it. This works, and it is the one people do not believe.
That last one is the biggest simplification over the old system. A plain let store: AppStore property observes correctly as long as body reads its properties.
Coordinators still earn their place in two situations, and 31 screens is not automatically one of them:
Modal presentation that stacks. Sheets over sheets, full screen covers, alerts that must appear over a specific layer. The stack does not model that, so if your app is presentation-heavy you end up with coordination logic somewhere regardless, and putting it in one named place beats scattering @State private var showingX across twelve views.
Flows that get reordered by experiments or feature flags. If onboarding has four steps whose order changes based on a remote config, having one object that decides "what comes after step 2" is genuinely better than each screen knowing its own successor.
Neither of those is "we have a lot of screens". Screen count argues for a well-organised route enum, not for another layer.
Not at 60 orders, and the difference matters because it changes what you should worry about.
The card network programs have minimum event counts as well as ratios. Visa's acquirer-side monitoring only starts counting your ratio against you once you are producing something on the order of a thousand-plus combined fraud reports and disputes in a month. Mastercard's excessive chargeback tier requires 100 chargebacks in a month alongside the ratio. Three is not in the same universe as either number, and the ratio on its own does nothing.
What can genuinely hurt you is your processor's own risk team, which sets its own thresholds, does not publish them, and is much stricter than the networks because they carry the loss. That is who emailed you. Answer them, tell them concretely what you are changing, and do it - that email is a conversation, not a sentence.
The comparison that actually clarified it for me: a washing machine is allowed to take an hour and be within a few degrees. An espresso machine is asked to deliver about 25 seconds of output within a couple of degrees and within a fraction of a bar, on demand, from cold-ish, in a kitchen with unknown water. The precision requirement is the cost, not the parts list.
Numbers from my install: the running cost difference has been roughly $30-40 a month for a family of four against the old resistance tank, and it's less than that in the coldest months. My payback landed somewhere in the four-to-six year range. Yours will move mostly with your electricity rate, do the sum with your own rate off your own bill, not a national average.
Go to where the money is already moving. Whoever sells them their equipment, their insurance, their invoicing software, or their vans already has the list. A referral arrangement with one of those is worth more than any content you will write this year.
Your export rate is doing more damage to your payback than the credit is. If exports credit below retail, the value of the system depends heavily on how much you self-consume, which changes the sizing question entirely: a smaller array matched closer to your daytime load can pay back faster than a big one dumping cheap electrons onto the grid at noon.
Publish the metric, withhold the mechanism. I have that written on a sticky note now. The one I would add to your list is customer names: a public logo wall at small scale is a prospect list for anyone willing to email all of them.
The formatter one is embarrassingly common and has an easy fix now - the .formatted() style APIs are cheaper than constructing a formatter, and if you need a custom one, a static let costs nothing after the first use.
Cost per night is also the argument that makes people overspend, so use it carefully. It works fine at the low and middle of the range and stops working at the point where you are paying for a brand rather than for materials.
Good instinct moving to List. Worth knowing why it helped, because it tells you when to use which.
List is backed by a real reusing collection view. Cells are recycled and views for offscreen rows are torn down. LazyVStack in a ScrollView is lazy about creation but does not recycle - everything you have scrolled past is still there. On a 2,000 row feed that difference is memory that keeps growing and a scroll that gets worse the longer you use it.
Rule of thumb: long or unbounded, use List. Short and heterogeneous where you want full control of the layout, LazyVStack is fine.