Twenty-three items reached Done this week and none went to Won't Do, against thirty-one the week before. Nine of the twenty-three closed on the Sunday the last entry was filed, after it had gone up — among them the last of the veterinary practice's paperwork, a link that keeps its price list one tap from the home page on a phone, three small pieces of a dog-training club's presence and the first two items of a new project — so they are counted here rather than there. A client's site went live this week and a page of our own went up, and in both the switch itself was the smallest part of the work.

The retained veterinary practice's new site went live on Saturday afternoon, once the practice had closed for the weekend. It had approved the date on Tuesday, and on Thursday the logins and recovery codes for the accounts the site runs on were handed over in person, so that the practice held its own keys before the site went in front of the public. Changing the nameservers took minutes. The days before were spent making sure the change could take nothing with it. Every record in the old zone was accounted for: the old host's control panel supplied the list, and because its list view cuts long values short, every value was read in full from the authoritative nameservers instead. Each record was then either replicated in the new zone or deliberately left behind as an artefact of the old hosting, until nothing on the list was unexplained. The new zone was compared with the old one record by record, against both of its nameservers, before anything moved. Mail mattered most, and every mail record matched.

One planned step was dropped. The usual advice is to shorten record lifetimes a couple of days before a move so that caches let go quickly, but the old host warned that editing those particular records would disconnect part of the old site, which had to go on serving anyone whose resolver had not yet moved. The benefit was small in any case: when nameservers change, it is the registry's own two-day delegation lifetime that decides how long propagation takes, not the records'. So nothing at the old host was touched, and undoing the switch stayed a single change at the registrar. It was not needed. Within half an hour, checks from outside found the major public resolvers already answering with the new nameservers, every mail record still matching, both hostnames carrying valid certificates, the old site's addresses redirecting to their new homes and the live pages byte-identical to the preview the practice had approved. Both forms were tested from a phone on the real domain that afternoon, and the post-launch checks begin on Monday.

N17 Time has a sibling, not yet named here. Built from its code for a second club further down the football pyramid, it took a Sunday afternoon and a Monday to write, went up on the platform's free hostname that Monday afternoon, and was then left alone for three days to see whether it would keep itself current. N17 Time's fixtures feed does not reach that far down, so the sibling merges two free sources: the club's own calendar, which knows kickoff times, grounds and the link to each match centre, and a sports-data source that knows the whole league, every round and every result. The club's calendar wins on time and venue, a match it has moved is followed to its new date, and anything only the club knows about becomes a cup tie. Two things were learned from the data rather than assumed about it. A rearranged match carries no status at all, only a date away from the rest of its round, so that is how one is recognised. And the source's own league table ran a result behind, so the page works the table out from the results instead.

The first hourly refresh on the live hostname was refused by the data source, while the same request from a laptop a few minutes later was answered. The obvious suspect was the hour itself, when every scheduled job in the world wakes up, so the refresh moved to fourteen minutes past. The next one was refused too — and four requests sent from the laptop at the turn of that hour, exactly when the suspect said they should fail, were all answered. The source limits requests by address, and a serverless function's outbound address is shared with every other function running in the same place, some of them evidently drawing on the same free allowance. No choice of minute makes a shared address quiet. So the schedule stopped expecting any single attempt to succeed. Every refresh now falls due at fourteen minutes past and is tried again on each two-minute tick until one run writes; a refused attempt costs a request or three and writes nothing, so the last good page stays up throughout. Of the first four attempts, three were refused; the fourth, two minutes after the third, got through. One night's full refresh took half an hour of ticks to get through. Three days on, unattended, the page was still writing itself afresh every hour.

— On first attempts —

Nothing this week had to work first time. It only had to fail safely.

New cover and profile pictures were made for a local dog-training club's social media page, from the site's own fonts, logo and photography, with page copy to go with them. The club's social preview card — the image a link carries when it is shared — now gives the national registering body its current name. All of them are drawn by a script, a page of HTML rendered in a headless browser, so the next change of wording is a re-run rather than a redraw. The club's age on its site is now worked out from the numbering of its own annual general meetings.

In progress across every project stands at nine, up one: the veterinary practice's sign-off closed, and two pieces of the dog-training club's new copy, written with its own trainers, opened and now wait on the preview for their read-through.

Neither switch this week was allowed to depend on a first attempt. The practice's old site was left running and untouched, so that the move could have been taken back with one change, and the fixtures page keeps its last good copy until a refresh gets through, however many tries that takes. In both cases the switching over took minutes. The rest of the week went on making it safe to get wrong.