Calendial-Concomitant Continuous Commenting

Derailments

  • meditate, last night. I stayed out too late! And definitely could have meditated before leaving. Alas!

Breaks

  • 2023W25: No breaks.
  • 2023W26: Catch-up break from the 26th until the 28th: one of my friends has had a couple birthday shenanigans in a row recently and I’ve been short on beem-time. If he’d planned enough ahead I’d’ve put breaks in, but he didn’t, so instead I’m adding a few days of break in a week’s time to recover.
  • 2023W27: July 1–4; we’ll be visiting my parents for a late Father’s Day celebration.

Changes and notes

  • Finding a gym is stressing me out so I gave it a week’s break.
  • Urgency load moving in the right direction! I put a little extra break time in my next couple breaks to help feel less panicked.
  • I’m starting to feel like I have too many bee-commitments at the moment, but I haven’t figured out what I want to sacrifice or at least track less closely… but probably expect some changes in that direction in the next couple calendials. Maybe.
1 Like

Breaks

2023W26: Catch-up break, as mentioned (over, by the time I publish this!).
2023W27: July 1–4, as mentioned.
2023W28: July 15–16 for my wife’s birthday party and recovery thereof.

Changes and notes

  • I tried to ratchet calendial down to actually be due on Sunday, but because of the break I wasn’t quite able to, so it’s a late calendial again this week. Maybe if I’m feeling motivated tomorrow I’ll graph-edit it into place.
  • The catch-up break was VERY welcome and I’m feeling much more at peace with my goals—also, I’ve been working very hard on them this past week. That “4” urgency-load badge is not a typo!
  • I still think there’s maybe a few too many goals, but not so urgently, so no movement here yet.
1 Like

Breaks

2023W27: July 1–4, as mentioned.
2023W28: July 15–16, as mentioned.
2023W29: No breaks.

Changes and notes

  • I’ve found dont-starve to be a good idea, but not a great execution—more annoying to record than actually effecting change in my eating habits, so I’ve just set it to archive.
  • I’ve been rather busy and haven’t written an update about my seasonal goals, though I have set them—I hereby declare that I can’t post my next calendial, and thus can’t get my next +1, until I first post that update.
1 Like

Breaks

  • 2023W28: July 15–16, as mentioned.
  • 2023W29: July 21–23: either I’ll be visiting my parents or they’ll be visiting me!
  • 2023W30: No breaks.

Changes and notes

  • cleandesk is back! Turns out it, like brushday, is one of those goals that needs only exist to be successful.
  • gym is on break for the rest of July: I’m getting lots of exercise doing house & yard tasks and specific gym work just isn’t a priority right now. cardio is sticking around.
  • I posted[forum] in the New Years’ Resolutions thread, so I’m allowed to post this calendial update and get my +1. Thanks, Last Week Me, for making me do that.
1 Like

Breaks

  • 2023W29: July 21–23, as mentioned.
  • 2023W30: No breaks.
  • 2023W31: Aug 3–6: my little brother is visiting!

Changes and notes

  • Ratcheted brushdark and brushday to 7d.
  • Steepened bottlefill to 2.5/d and ratcheted to 7d.
  • dont-starve has finished archiving.
1 Like

Breaks

  • 2023W30: No breaks.
  • 2023W31: Aug 3–6, as mentioned.
  • 2023W32: No breaks yet. My brother will still be in town, so I might add a break next calendial.

Changes and notes

  • I spent all day out yesterday for a friend’s birthday, so calendial is coming in a day late this week. Thanks, Orange!
  • It’s hot as heck, so I’m ramping bottlefill up from 2.5/day to 3/day.
  • Now that we have a nice dishwasher, it’s not so arduous to keep up with cleandish, so it’s creeping up from 3.5/wk to 4/wk.
  • Old coffee grounds are gross and I’ve been good about avoiding that, so I’m ramping up cleanspresso from 0.85/day to 0.9/day.
  • My gym break has 14 days left and it fills me with dread to have to schedule it in so I’m kicking it another week down the road and ramping it down to 1/wk once it comes back.
  • Between shifting my schedule earlier and getting fractional points for slightly late bedtimes, I’ve a ridiculous 25 days of safety buffer on sleepyhead. I don’t really want to not sleep properly for a month, so i’ve ratcheted down to just a week of buffer and ramped up from 0.53/day to 0.65/day.
  • I have a little side project I’ve been working on that’s been satisfying my coding time, and I want to separate those out, so I’m changing the rules of that project to no longer count towards recreational coding, but realizing that it’s taking a bunch of time, so sloping down from 1.64hr/wk to an autodialed max of 0.5/wk, and reducing my buffer from 79 days (!) to 14.
  • Since moving to the new house, we’ve added a bunch of slow-cleaning tasks, but not adjusted any rates… so I did some scripting to pull together stats on how often I actually complete each task and used that data to inform moving a bunch of my tasks around, mostly to less-frequent cadences, and adding a “Semiannual” cadence. Then I did some math to figure out my “break-even” task rate, and found that rate was 1.4/day. My current rate is 1.07/day, so especially considering that breaks are a thing, no wonder I’ve been falling way behind. The new rate is 1.75/day, so I can catch up for a while, and in a couple calendials I’ll probably turn that down to 1.5/day or all the way to 1.4/day. Of course I’ll have to keep a careful eye on to make sure that I have enough tasks available to complete, but that shouldn’t be a problem for months at least—I’ll have plenty of time to notice.
1 Like

Breaks

  • 2023W31: Aug 3–6, as mentioned.
  • 2023W32: Cautiously continuing to err on the side of “no breaks”.
  • 2023W33: No breaks.

Changes and notes

  • Squeezing this calendial in—my goal deadlines are 01:00, so this still counts as Sunday!
  • Slow-cleaning updates have been very good so far. I actually got my whole fortnight done for the first time in approximately forever! If anyone is using my slow-cleaning lists (or a similar trello board) and wants my script, I can tidy it up a little and post it.
  • With the break coming up soon, that’s about it! Nice comfy week.
1 Like

I would be interested in your script

1 Like

Breaks

  • 2023W32: No breaks.
  • 2023W33: Aug 14–19 for a surprisingly viable last-minute-planned trip to Cancún!
  • 2023W34: No breaks.

Changes and notes

  • My brother is visiting my parents so I am also visiting my parents so this calendial is coming in on red rather than orange. No stress!
  • No changes! Comfy week.
1 Like

Here ya go! The board ID is hardcoded and it makes assumptions about the way you store your beeminder token, but you can adjust those as desired, of course. Wrote it against Ruby 3, dunno if i’m using any lang-version-specific features. Holler if you’ve got any questions!

#!/usr/bin/env ruby
require 'json'
require 'net/http'
require 'optparse'

TRELLO_CACHE="/tmp/slow-cleaning-check-trello"
BEE_CACHE="/tmp/slow-cleaning-check-bee"

options = {
  before: Time.now,
  after: Time.new(2022, 06, 14),
  frequencies: %w(Fortnightly Monthly Seasonally Semiannually Yearly),
}
OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options]"
  opts.on("-h", "--help", "Prints this help and exits") do
    puts opts
    exit
  end

  opts.on("-T", "--fetch-trello", "Delete cached data from trello and refetch") do
    File.delete(TRELLO_CACHE) if File.exist? TRELLO_CACHE
  end

  opts.on("-B", "--fetch-beeminder", "Delete cached data from beeminder and refetch") do
    File.delete(BEE_CACHE) if File.exist? BEE_CACHE
  end

  opts.on("-q", "--quiet", "Suppress some output") do
    options[:quiet] = true
  end

  opts.on('-iTASK', '--inspect TASK', "Get deep details about a specific task") do |t|
    options[:details] = t
  end

  opts.on('-bDATE', '--before DATE', "Latest date to consider (default: now)") do |d|
    options[:before] = Time.new(d)
  end

  opts.on('-aDATE', '--after DATE', "Earliest date to consider (default: 2022-06-14)") do |d|
    options[:after] = Time.new(d)
  end

  opts.on('-fFREQ', '--frequencies FREQ', "Comma-separated list of frequencies to check") do |f|
    options[:frequencies] = f.split(',').map{|f| f.strip}
  end

  opts.on('-s', '--summary', 'Print a stats summary of required counts') do
    options[:summary] = true
  end
end.parse!

class Array
  def median
    return Float::INFINITY if self.length == 0
    sorted = self.sort
    mid = (sorted.length - 1) / 2.0
    (sorted[mid.floor] + sorted[mid.ceil]) / 2.0
  end
end

class String
  def red;        "\e[31m#{self}\e[0m" end
  def green;      "\e[32m#{self}\e[0m" end
end

########################
# slurp data from trello
def trello(path)
  "https://api.trello.com/1/boards/GMfBhGCV#{path}"
end

def json(url)
  JSON.parse(Net::HTTP.get_response(URI.parse(url)).body)
end

unless File.exist? TRELLO_CACHE then
  puts "Fetching data from Trello..." unless options[:quiet]
  File.open(TRELLO_CACHE, 'wb') { |f| f.write(Marshal.dump({
    lists: json(trello '/lists'),
    cards: json(trello '/cards')
  }))}
end
trello_data = Marshal.load(File.binread(TRELLO_CACHE))
lists = trello_data[:lists]
  .select{|list| %w(Fortnightly Monthly Seasonally Semiannually Yearly Inactive).include? list["name"] }
  .map{|list| [list["id"], list["name"]]}
  .to_h

@cards = trello_data[:cards]
  .select{|card| lists.has_key? card["idList"]}
  .map do |card|
    { name: card["name"],
      task: [card["name"], card["desc"]].join(' '),
      frequency: lists[card["idList"]]
    }
  end

@tasks = @cards.map{|card| card[:task]}
# slurp data from trello
########################


########################
# slurp data from beeminder
unless File.exist? BEE_CACHE then
  puts "Fetching data from Beeminder..." unless options[:quiet]
  File.open(BEE_CACHE, 'wb') { |f| f.write(Marshal.dump(
    JSON.parse(`beemapi datapoints slow-cleaning`)
  )) }
end
@datapoints = Marshal.load(File.binread(BEE_CACHE)).map do |point|
  { when: Time.at(point["timestamp"].to_i),
    regex: Regexp.new(point["comment"].strip.gsub('; ', '|'), Regexp::IGNORECASE),
    value: point["value"].to_f,
    text: point["comment"],
  }
end.reject do |point|
  point[:regex].to_s =~ /RECOMMIT|IGNORE_METRICS/
end.filter do |point|
  options[:after] <= point[:when] && point[:when] <= options[:before]
end
# slurp data from beeminder
########################

########################
# validate beedata
validation_failures = @datapoints.each_with_object({}) do |point, hash|
  key = point[:regex].to_s
  unless hash.has_key? key
    hash[key] = {
      tasks: @tasks.filter{|task| task =~ point[:regex] },
      points: []
    }
  end
  hash[key][:points].push point if point[:value] != hash[key][:tasks].length
end.reject do |_key, entry|
  entry[:points].empty?
end

unless validation_failures.nil?
  validation_failures.entries.each do |regex, entry|
    fails = entry[:points].map{|point| "(#{point[:when].strftime('%F')}, #{point[:value]})" }.join(', ')
    tasks = entry[:tasks]
    puts "[#{entry[:points].length}] Point #{regex} matches #{tasks.length} tasks. #{fails}"
    if tasks.length > 1
      tasks.each{|t| puts "  -> #{t.gsub(/\n/, '\\n')}"}
    end
  end
end
# validate beedata
########################

def daygap(freq)
  case freq
    when 'Fortnightly' then 14.0
    when 'Monthly' then 30.436875
    when 'Seasonally' then 91.310625
    when 'Semiannually' then 182.62125
    when 'Yearly'then 365.2425
    else raise "bogus frequency '#{freq}'"
  end
end

def details(card)
  points = @datapoints
    .filter{|p| card[:task] =~ p[:regex]}
    .sort_by{|p| p[:when]}
  deltas = points
    .map{|p| p[:when]}
    .each_cons(2)
    .map {|(a, b)| (b - a) / 60 / 60 / 24}
  daygap = daygap(card[:frequency])
  average = if deltas.length > 0 then
              (deltas.sum / deltas.length)
            else
              Float::INFINITY
            end
  avg_percent = (average - daygap) / daygap
  median = deltas.median
  med_percent = (median - daygap) / daygap
  {points:, deltas:, daygap:, average:, median:, avg_percent:, med_percent:}
end

def print_table(headers, rows)
  cols = headers.map{|(col, _)| col}
  table = headers.each_with_object({}) do |(col, label), hash|
    hash[col] = { label:, width: [rows.map{|r| r[col].to_s.size}.max, label.size].max }
  end
  print_row = lambda do |row|
    cells = cols.map do |c|
      cell = row[c].to_s.ljust(table[c][:width])
      cell = cell.send(row[:color]) unless row[:color].nil?
      cell
    end
    puts "| #{cells.join(" | ")} |"
  end
  print_row.call headers
  puts "+-#{cols.map{|c| '-' * table[c][:width]}.join('-+-')}-+"
  rows.each{|row| print_row.call row}
end

########################
# summary
if options[:summary] then
  headers = {
    freq: 'Frequency',
    count: '#',
    cumulative: 'Total',
    pweek: 'Tasks per week',
    pday: 'Tasks per day'
  }
  rows = options[:frequencies].each_with_object([]) do |freq, r|
    if r.empty?
      last = 0
    else
      prev_per_this = daygap(freq) / daygap(r.last[:freq])
      last = r.last[:cumulative] * prev_per_this
    end
    count = @cards.filter{|c| c[:frequency] == freq}.length
    cumulative = (last + count).round(2)
    pday = (cumulative / daygap(freq)).round(2)
    pweek = (pday * 7).round(2)
    r.push({ freq:, count:, cumulative:, pweek:, pday:, })
  end
  print_table(headers, rows)
  exit
end
# summary
########################

########################
# inspect
if options[:details] then
  card = @cards.filter{|c| c[:name] == options[:details]}
  if card.length != 1
    puts "Error: specified task does not match exactly one card"
    exit 1
  end
  card = card[0]
  puts "# #{card[:name]}"
  puts "List: #{card[:frequency]}"
  expected = daygap(card[:frequency])
  puts "Expected: #{expected}"

  details(card) => {points:, deltas:, median:, med_percent:}
  percent = ''
  unless med_percent == Float::INFINITY
    direction = if med_percent.positive? then 'above' else 'below' end
    percent = " (#{(med_percent.abs * 100).round}% #{direction} expected)"
  end
  puts "Median: #{median}#{percent}"
  puts "Completed: #{points.length} times"
  puts "Matching datapoints:"
  points.reverse.zip(deltas.reverse).each do |point, delta|
    puts " - #{delta&.round(2).to_s.ljust(6)} :: #{point[:when].strftime('%F')} #{point[:value]} #{point[:text]}"
  end

  exit
end
# inspect
########################

########################
# stats
options[:frequencies].each do |freq|
  daygap = daygap(freq)
  puts "# #{freq} (Expected daygap: #{daygap})"
  print_table(
    {task: 'Task', times: '✓', med: 'Median (%err)', avg: 'Avg (%err)'},
    @cards.select{|c| c[:frequency] == freq}.map do |card|
      task = card[:name].gsub(/\n/, '\\n')
      details(card) => {points:, deltas:, average:, median:, avg_percent:, med_percent:}

      times = points.length
      raw_percent = [avg_percent, med_percent].min
      avg = average.round(1).to_s.gsub(/Infinity/, '—')
      avg += " (#{(avg_percent * 100).round(1)}%)" if average < Float::INFINITY
      med = median.round(1).to_s.gsub(/Infinity/, '—')
      med += " (#{(med_percent * 100).round(1)}%)" if median < Float::INFINITY


      color = if med_percent.abs < 0.2
                'green'
              elsif (med_percent < Float::INFINITY && 0.5 < med_percent.abs) || times == 0
                'red'
              end

      row = { task:, avg:, med:, times:, raw_percent:, color: }
    end.sort_by{|c| c[:raw_percent]}
  )
  puts
end
# stats
########################
1 Like

Derailments

  • fiber-arts, due to poor time management in the days leading up to my vacation. No biggie, but a very avoidable one, so I’m coloring the badge orange.

Breaks

  • 2023W34–37: No breaks.

Changes and notes

  • I’ve just gotten back from vacation (hence, no calendial last week), so not many changes to note.
  • I don’t think the derail of fiber-arts means it needs to be lessened: it was more of a “I will pay money to not think about how to put this in my schedule today as a result of poor planning” problem, not a “I am so overwhelmed by this in general” problem. If I derail again in the near future of course I’ll revisit that opinion!
1 Like

Breaks

  • 2023W35–38: No breaks.

Changes and notes

I’ve felt, this past week, just barely on the wrong side of the “this is a lot to do, better get cracking” / “this is a lot to do, AHHHHHH” line (see also: the urgency load badge above), so I’m dialing back some of my goals. At the same time, some of easy “maintenance” goals could use a bit steeper line to accrue less silly amounts of safety buffer.

  • fiber-arts have been a bit frustrating and slow recently, so I’m pulling back a hair from 1.75hr/wk to 1.5.
  • hamstrings is still worth having, but also recently annoying, so its rate is dropping a little.
  • cleanspresso is on the “too easy” side: increasing from 0.85/d to 0.9.
  • anki-zero, on the flip side, I’ve been very unmotivated by recently, no longer enjoying particularly the card review, and the only decks I have right now are for trivia, not anything I actually need, so I’ve scheduled a two-month break and will re-evaluate how I feel about it in late October or early November, depending on how the rate shakes out.
  • I’d felt like piano was still really high, even after dropping it down… and discovered that I had not correctly actually dropped it down a few a weeks back when I said I did. Oops! It’s down now.
  • Also on the “simple maintenance, ramp 'em up” list: flossing, madebed.
  • My starred “actual action required” email folder has stopped draining, so I’m very slightly ramping up the rate on email-control to gently nudge it in the zero direction.
2 Likes

urgency load - 60 derailments - 0 total goals - 36

Breaks

  • 2023W36–38: No breaks.

Changes and notes

On a meta note, I’ve noticed that my badges have been a bit flaky to load, and I’m not sure if it’s discord or the provider I’m linking to, so I’m trying out a badge service with slightly different colors—if you think it looks slightly weird, you’re not wrong!

The dialing-back looks like it was good, but there’s a few more tweaks yet to do.

  • The weather is cooling down a bit, so bottlefill is going back down to 2/day from 3/day.
  • gratitude’s slope is staying the same, but the Fine Print (which I think is a name that should go away[forum]) is changing a little-specifically, I get points now for gratitude journalling privately, instead of just in the forum thread[forum]. I’ll still post in the forum sometimes! I just have more options now.
  • I was going to turn on the autodialler for lichess-training, but it doesn’t support odometer goals, so instead I’ve manually scaled up from 1.5/day to 1.75/day, ratcheted it, then did some puzzles.
  • Due to me mistakenly not actually decreasing piano’s rate, music is ridiculously overbuffered, so I’ve pseudoratcheted it down by actually just using graph.beeminder.com to remove a bunch of its old breaks.
1 Like

urgency load - 61 derailments - 0 total goals - 36

Breaks

  • 2023W37–39: No breaks.

Changes and notes

The tweaks from the last two calendials are landed and pleasant, and I’ve got nothing to change this week! How strange. The urgency load still being high is largely a function of beenary goals that are hard to push safewards, being limited to one point per day, I think, with a side of “ignored cleaning and slow-cleaning for several days” :stuck_out_tongue:

1 Like

urgency load - 85 derailments - 0 total goals - 36

Breaks

  • 2023W39–41: No breaks.

Changes and notes

  • I was sick last week so didn’t calendial, which is also why my urgency load is so high today. I emailed support for a break, and got it, but I haven’t really been working ahead, so an urgency load of high 80s to mid 90s is pretty realistic for “just staying on top of OitNR” for me. I haven’t really struggled too much to tread water here, so I’m not overly concerned.
  • I’ve stayed well on top of sleepyhead and I want to push that bedtime a little harder, so I’m ramping it from 0.4 bedtime points per day to 0.5.
  • I’m taking a little break from my side project so its goal has a week-long break coming up, no ramp changes though.

I feel like I’ve finally found good steady-state rates for “maintenance beenaries” like brushday, madebed, etc. It’s nice!

1 Like

urgency load - 96 derailments - 0 total goals - 36

Breaks

  • 2023W40–42: No breaks.

Changes and notes

  • anki-zero is set to archive fully - it’s got a fair bit of break left, but I already feel relief that it’s gone and am not looking forward to picking back up. I still have great respect for anki as a tool in general, and once I need to study flashcards for something again I’ll probably bring the goal back.
  • I’ve been thinking about ramping chess study back up now that I’m spending less study on geography in anki, so to dip my toe in the water there I’ve dialed lichess-training from 1.75 to 3 puzzles/day. Which still isn’t that many, but will require frequent enough chess interaction in general that I think it’ll be a good indicator. I’ve done this by graph-editing a higher rate starting immediately and lasting for a week, so the “no decision” case collapses to “return to status quo”.
  • Entered a few weeks of missing data on sleepyhead down to a week of safety, then ratcheted it back down to a week of buffer. Adding the missing data caused it to autodial steeper a little bit, just what I wanted.
2 Likes

urgency load - 118 derailments - 0 total goals - 36

Breaks

  • 2023W41: 10-15 through 10-18. No plans, just thought it sounded nice.
  • 2023W42–43: No breaks.

Changes and notes

  • My wife’s nursing school courseload has ramped up, so I’m struggling to keep up with the pace of house cleaning we enjoyed when we were both available, so I’m dropping cleaning from 5.25/wk to 4 while that’s true and slow-cleaning from 1.75 to 1.
  • I finished a big mending project, so I’m cooling fiber-arts down from 1.5hr/wk to 1.
  • I’m taking a small step back from one of my side projects, from 0.5hr/day to 0.3.
  • Questionable achievement: I’ve unlocked a new urgency load badge color for “above 100” :sweat_smile: Some part of it is that I’m calendialing before doing other evening beenaries instead of the other way around, but still, yeesh.
1 Like

urgency load - 68 derailments - 3 total goals - 35

Derailments

Hoo boy!

  • 10-17, inbox-zero, $5. I was so grumpy when I saw this come in, opened my email to fire off the not-legit call, and… saw the email sitting there I’d read and not archived. Phooey!
  • 10-17, calendial, $10. You may’ve been wondering why it’s been so long since a calendial: I forgot it! Along with that unread email, apparently.
  • 10-20, journal, $5. I told myself “yeah, I’ll journal right after this chapter”, for several hours and many chapters in a row, and then it was too late.

Distracted, sloppy week for me! I was visiting parents and got some excellent book read, so I can tell myself I had lots going on and it was worth it.

Breaks

The break in W41 was indeed, as I thought it might be, nice! Even though I followed it up with a bunch of derailments.

  • 2023W43: No breaks.
  • 2023W44: 11-04 through…
  • 2023W45: 11-07. My birthday is on the 5th! This break covers Sunday so I’ll probably just skip next week’s calendial, this time on purpose though.

Changes and notes

  • email-control is getting back under control, so I’ve ramped it down slightly to 0.2/d from 0.25/d.
  • pages probably needs a ratchet soon after my reading binge that resulted in that journal derailment, but… I’ll let it cook for a little while.
  • sleepyhead ramped up from minimum 0.4/d to 0.5/d. Still using the fractional bedtimes, but I’ve noticed I oscillate between going to bed like 20 minutes early and an hour late, so I’m hoping to ramp this up slowly over the next couple calendials to break that cycle.
  • coding is set to archive in a few days, for some reason. I don’t remember doing that, but it is one of my earliest goals, so maybe it’s just coming to a natural end — I intend to let it! I have a bunch of projects that are really fun and energizing and have good community around them, so I don’t anticipate struggling to find time to work on fun projects for a good while. Of course, if I never see it dropping off again, I’ll just bring it right back… but in the meantime, it’s one fewer thing I have to track!

Meta note: the new badge provider seems stabler, so I’ll stick with this one!

3 Likes

urgency load - 44 derailments - 0 total goals - 34

Breaks

  • 2023W46–48: No breaks.

Changes and notes

Just came off the W45 break mentioned in the last post and things are doing good!

  • coding archive has landed.
  • I think pages and sleepyhead need ramped up but it’s a bit hard to tell with the break I just finished so I’ll wait until next week to commit to that.
1 Like

urgency load - 56 derailments - 0 total goals - 34

Breaks

  • 2023W47: 11-24 through…
  • 2023W48: … 12-01, for Thanksgiving & adjacent travel
  • 2023W49: 12-03 through 12-07, for trying to go to PAX Unplugged. I’m not totally locked in yet, but I’m shootin’ for it!

Changes and notes

I’m not entirely sure how calendial has found itself being due on a Friday, but I’ve decided to not care too much about that.

  • I’ve scheduled an archive for gtd: it was extremely useful for getting me in the habit of using the systems I set up, but I’m now very thoroughly in the habit and the goal is merely a data-recording annoyance. Thank you for your service and farewell!
  • hamstrings is getting doubled from 3min/day to 6. Such increase, wow.
  • sleepyhead is also ramping up from 0.5 points to 0.6.
  • pages is getting a more substantial increase, from 30 pages/day to 45. The length of my to-read list is growing, but the derivative of length is also positive: I got some of my booky friends on storygraph and now they’re generating more recommendations for me than they used to :smiley:
  • I’m considering tweaking cleaning and slow-cleaning upwards… but I’l probably wait until after the holidays to commit, since it’ll be so hard to tell with all the breaks, travel, visitors, &c coming up.

I’m doing this calendialling much earlier in the day than normal, so I’ll keep updating the urgency load (83 at post-time) above as I work down my dashboard. Aiming for <50!

(Edit: didn’t quite make it, but put in a solid effort!)

1 Like