<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://kevinfox.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://kevinfox.dev/" rel="alternate" type="text/html" /><updated>2026-01-22T18:31:00+00:00</updated><id>https://kevinfox.dev/feed.xml</id><title type="html">Kevin Fox</title><entry><title type="html">The meta skill: orchestrating agents, not writing code</title><link href="https://kevinfox.dev/exploring-agentic-ideas.html" rel="alternate" type="text/html" title="The meta skill: orchestrating agents, not writing code" /><published>2026-01-20T00:00:00+00:00</published><updated>2026-01-20T00:00:00+00:00</updated><id>https://kevinfox.dev/exploring-agentic-ideas</id><content type="html" xml:base="https://kevinfox.dev/exploring-agentic-ideas.html">&lt;p&gt;I didn’t write a single line of code.&lt;/p&gt;

&lt;p&gt;Over the last two days, I added real features to my OCaml UDP multicast project—sequence number parsing, a shared binary protocol module with tests, a GitHub Actions CI workflow, and issue tracking—without touching a keyboard for anything but prompts and reviews.&lt;/p&gt;

&lt;p&gt;The experiments are heavily inspired by &lt;a href=&quot;https://github.com/obra/superpowers/tree/main&quot;&gt;Superpowers&lt;/a&gt;, &lt;a href=&quot;https://github.com/steveyegge/beads&quot;&gt;Beads&lt;/a&gt;, &lt;a href=&quot;https://github.com/steveyegge/gastown&quot;&gt;Gas Town&lt;/a&gt;, and &lt;a href=&quot;https://ghuntley.com/ralph/&quot;&gt;Ralph&lt;/a&gt;. The playground is &lt;a href=&quot;https://github.com/KFoxder/udp_multicast_examples&quot;&gt;KFoxder/udp_multicast_examples&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What got built:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Sequence number parsing in all three receivers to detect out-of-order or missing packets&lt;/li&gt;
  &lt;li&gt;A shared binary protocol module (20-byte messages with header + payload) wired into sender/receivers, plus unit tests for encode/decode&lt;/li&gt;
  &lt;li&gt;A GitHub Actions CI workflow that builds on push/PR, with an integration test plan adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--count&lt;/code&gt; flags for testable multicast runs&lt;/li&gt;
  &lt;li&gt;Beads metadata and issues tracking for logging agentic tasks and decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The meta skill of the future isn’t writing code—it’s guiding and orchestrating agents. Knowing what to ask for, how to break down problems, when to push back on a proposed approach, and how to verify the output. The code still matters, but the leverage comes from steering rather than typing.&lt;/p&gt;

&lt;p&gt;I’m still figuring out which tasks feel best for agents. But this was a fun, low-risk place to explore what it means to be a developer who mostly doesn’t write code.&lt;/p&gt;</content><author><name></name></author><category term="posts" /><category term="professional" /><summary type="html">I didn’t write a single line of code.</summary></entry><entry><title type="html">Jane Street Puzzle: Altered States 2</title><link href="https://kevinfox.dev/jane-street-altered-states-2.html" rel="alternate" type="text/html" title="Jane Street Puzzle: Altered States 2" /><published>2024-07-14T00:00:00+00:00</published><updated>2024-07-14T00:00:00+00:00</updated><id>https://kevinfox.dev/jane-street-altered-states-2</id><content type="html" xml:base="https://kevinfox.dev/jane-street-altered-states-2.html">&lt;p&gt;We are back with another Jane Street puzzle solution. This one was for &lt;a href=&quot;https://www.janestreet.com/puzzles/altered-states-2-solution/#:~:text=Shruti%20Sharad%20Patil-,Kevin%20Fox,-(20S%2C%20PA%2C%20NOCAL&quot;&gt;Altered States 2&lt;/a&gt; I have to say this one felt easier than the last two I solved. That being said, racking up awards was the real challenge here. I could only manage to get 3 awards on my solution where as some people got a whopping 6 awards!&lt;/p&gt;

&lt;p&gt;You can see my code here: &lt;a href=&quot;https://github.com/KFoxder/jane_street_puzzle&quot;&gt;Github Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/js_altered_states_2_solution.png&quot; alt=&quot;Altered States 2 Solution&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;solution&quot;&gt;Solution&lt;/h3&gt;

&lt;p&gt;The general solution I took was pretty straightforward and involved two major concepts.&lt;/p&gt;

&lt;p&gt;The first thing I built was a &lt;a href=&quot;https://github.com/KFoxder/jane_street_puzzle/blob/master/altered_states_2/state_trie.py&quot;&gt;specialized trie&lt;/a&gt; that was that held an entry for every transformation of a state and is able to validate teh existence of a state if a letter is missing in any place. For example ohio would take up 5 entries in the trie (ohio, *hio, o*io, oh*o, ohi*). It contains &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;462&lt;/code&gt; inputs which is not many.&lt;/p&gt;

&lt;p&gt;The second concept was to randomly walk the matrix and backtrack while inserting a state name when possible. The randomization proved to be an important step since the possible combinations are massive. Overall this proved to solve the puzzle pretty quickly however I played around with a couple different strategies to try and get the most awards like removing california as an option so I could attain the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(NOCAL)&lt;/code&gt; award and being from Pennsylvania I was only going to submit a solution if I was able to get my home state in there which I did.&lt;/p&gt;</content><author><name></name></author><category term="posts" /><category term="professional" /><summary type="html">We are back with another Jane Street puzzle solution. This one was for Altered States 2 I have to say this one felt easier than the last two I solved. That being said, racking up awards was the real challenge here. I could only manage to get 3 awards on my solution where as some people got a whopping 6 awards!</summary></entry><entry><title type="html">Jane Street Puzzle: Numbers 4</title><link href="https://kevinfox.dev/jane-street-numbers-4.html" rel="alternate" type="text/html" title="Jane Street Puzzle: Numbers 4" /><published>2024-06-01T00:00:00+00:00</published><updated>2024-06-01T00:00:00+00:00</updated><id>https://kevinfox.dev/jane-street-numbers-4</id><content type="html" xml:base="https://kevinfox.dev/jane-street-numbers-4.html">&lt;p&gt;Puzzles are fun! I hope I can continue to carve out time to solve them in the future…&lt;/p&gt;

&lt;p&gt;You can see my code here: &lt;a href=&quot;https://github.com/KFoxder/jane_street_puzzle&quot;&gt;Github Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/js_numbers_4_solution.png&quot; alt=&quot;Numbers 4 Solution&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;solution&quot;&gt;Solution&lt;/h3&gt;

&lt;p&gt;The general solution I took was in 2 parts.&lt;/p&gt;

&lt;h4 id=&quot;part-1-find-all-possible-solutions-for-each-row&quot;&gt;Part 1: Find all possible solutions for each row&lt;/h4&gt;

&lt;p&gt;The bulk of the time is spent finding all possible solutions for each row taking into consideration possible shading, groups of cells, and validity of the clue. For example, if we look at row 4 in the 5 x 5 example we know we are looking for a cube. The number 12,167 is a cube however it would break the rules of groupings (columns 1 &amp;amp; 2 are in the same group and thus need to have the same number). Therefore we can exclude 12,167 as a valid solution for row 4.&lt;/p&gt;

&lt;p&gt;✅ Shading is valid &lt;br /&gt;
✅ Clue is valid (12,167 is a cube)&lt;br /&gt;
❌ Grouping is not valid (must be the same number)&lt;br /&gt;
&lt;img src=&quot;/assets/js_numbers_4_example_1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;✅ Shading is valid &lt;br /&gt;
✅ Clue is valid (27 and 64 are cubes)&lt;br /&gt;
✅ Grouping is valid &lt;br /&gt;
&lt;img src=&quot;/assets/js_numbers_4_example_2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For certain rows, this can be very time-consuming because the validation function is expensive and because there are so many distinct groups that we can form many different numbers. The rows that take the longest in the 11 x 11 puzzle are row 5 and row 3 which take 90% of the time.&lt;/p&gt;

&lt;p&gt;I did consider looking at rows relative to their ancestor above and backtracking but because it worked I didn’t have a ton of time to optimize I left it as is.&lt;/p&gt;

&lt;h4 id=&quot;part-2-find-a-valid-matrix&quot;&gt;Part 2: Find a valid matrix&lt;/h4&gt;

&lt;p&gt;Once we have all possible solutions to each row we “stitch” them together row by row to get a valid matrix that satisfies all the constraints. We start with one valid row and loop through the next row until we find a valid one and proceed down the tree of possibilities backtracking as we go. This is fast because we know the rows in isolation are valid but just check if the shaded cells are valid relative to each other and that groupings are valid relative to each row.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Row 1:            X 3 4 3 X
                      |
                    /  \
Row 1:      X 3 4 3 X   X 3 4 3 X
Row 2:      2 1 X 5 5   1 3 X 5 5
            (Invalid)    (Valid)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h5 id=&quot;notes--improvements&quot;&gt;Notes &amp;amp; Improvements&lt;/h5&gt;

&lt;ol&gt;
  &lt;li&gt;Codifying the groups for the 11 x 11 matrix was exhausting. I tried to get ChatGPT to help me with it but sadly it failed over and over to be able to turn the matrix into grouped coordinates… ugh.&lt;/li&gt;
  &lt;li&gt;My first attempt was to try and create all permutations of shaded regions and then fill in each row but that proved to be impossible so my final solution here was a realization that the hints could greatly narrow down the search space for each row based on groupings.&lt;/li&gt;
  &lt;li&gt;My gut tells me there are faster ways to do this by not pre-computing each row which I thought about implementing but I didn’t want to put too much more time into this puzzle so I left it as is.&lt;/li&gt;
&lt;/ol&gt;</content><author><name></name></author><category term="posts" /><category term="professional" /><summary type="html">Puzzles are fun! I hope I can continue to carve out time to solve them in the future…</summary></entry><entry><title type="html">UDP Multicast in OCaml</title><link href="https://kevinfox.dev/udp-multicast.html" rel="alternate" type="text/html" title="UDP Multicast in OCaml" /><published>2024-05-21T00:00:00+00:00</published><updated>2024-05-21T00:00:00+00:00</updated><id>https://kevinfox.dev/udp-multicast</id><content type="html" xml:base="https://kevinfox.dev/udp-multicast.html">&lt;p&gt;Github Project: &lt;a href=&quot;https://github.com/KFoxder/udp_multicast_examples&quot;&gt;KFoxder/udp_multicast_examples&lt;/a&gt;
OCaml and UDP multicast have been two recent focuses of mine as I prepare for my new role at Jane Street. As I was doing research on them I kept googling things like “OCaml Multicast Example” and realized I couldn’t find any good examples of UDP multicast in OCaml. Either they don’t exist or I am not capable of finding them.&lt;/p&gt;

&lt;p&gt;So I went about creating my own examples for the next person who is interested in implementing UDP multicast in OCaml.&lt;/p&gt;

&lt;p&gt;I decided I would implement it in 3 different ways. First, I did it without any concurrency. Then I used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lwt&lt;/code&gt;, which is the most popular library in OCaml as well as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;async&lt;/code&gt; which is less popular but used by Jane Street so for me made sense to include and understand.&lt;/p&gt;

&lt;p&gt;While I assume I will be working with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;async&lt;/code&gt; at JS (who knows, I haven’t started yet!) the lack of examples and in depth documentation besides RWO did make it harder to implement than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lwt&lt;/code&gt;. This echos some of what I have read in the &lt;a href=&quot;https://discuss.ocaml.org/t/its-hard-to-find-docs-and-examples-of-async-lib/2190&quot;&gt;community discussions&lt;/a&gt;, I am sure there are more examples internally which will make it easier.&lt;/p&gt;

&lt;p&gt;The most helpful resources I found while doing this were the following:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://tldp.org/HOWTO/Multicast-HOWTO.html&quot;&gt;Linux Documentation - Multicast&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dev.realworldocaml.org/concurrent-programming.html&quot;&gt;Real World Ocaml - Concurrent Programming&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/@aryangodara_19887/udp-client-and-server-in-ocaml-e203116a997c&quot;&gt;UDP Client and Server in OCaml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/hostilefork/f7cae3dc33e7416f2dd25a402857b6c6&quot;&gt;UDP Multicast in C&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><category term="posts" /><category term="professional" /><summary type="html">Github Project: KFoxder/udp_multicast_examples OCaml and UDP multicast have been two recent focuses of mine as I prepare for my new role at Jane Street. As I was doing research on them I kept googling things like “OCaml Multicast Example” and realized I couldn’t find any good examples of UDP multicast in OCaml. Either they don’t exist or I am not capable of finding them.</summary></entry><entry><title type="html">Jane Street Puzzle: Hooks 10</title><link href="https://kevinfox.dev/jane-street-puzzle-hooks-10.html" rel="alternate" type="text/html" title="Jane Street Puzzle: Hooks 10" /><published>2024-04-01T00:00:00+00:00</published><updated>2024-04-01T00:00:00+00:00</updated><id>https://kevinfox.dev/jane-street-puzzle-hooks-10</id><content type="html" xml:base="https://kevinfox.dev/jane-street-puzzle-hooks-10.html">&lt;p&gt;I recently tried to solve my first Jane Street Puzzle.&lt;/p&gt;

&lt;p&gt;You can see my solution here: https://github.com/KFoxder/jane_street_puzzle&lt;/p&gt;

&lt;p&gt;I am curious to see how others solved, most certainly more efficiently than I did. I found it to be the right mix of challenging and fun.&lt;/p&gt;

&lt;p&gt;I improved my original solution from 20 minutes down to 20 seconds thanks to &lt;a href=&quot;https://github.com/AveryLevin&quot;&gt;Avery Levin’s&lt;/a&gt; advice on narrowing the search space.&lt;/p&gt;</content><author><name></name></author><category term="posts" /><category term="professional" /><summary type="html">I recently tried to solve my first Jane Street Puzzle.</summary></entry><entry><title type="html">BikeErg: 4K PR</title><link href="https://kevinfox.dev/bikeerg-4k.html" rel="alternate" type="text/html" title="BikeErg: 4K PR" /><published>2023-12-23T00:00:00+00:00</published><updated>2023-12-23T00:00:00+00:00</updated><id>https://kevinfox.dev/bikeerg-4k</id><content type="html" xml:base="https://kevinfox.dev/bikeerg-4k.html">&lt;p&gt;Over the last 3 months I have been working with my good friend &lt;a href=&quot;https://www.instagram.com/boymeetserg/&quot;&gt;Jesse Biddle&lt;/a&gt; on a BikeErg 4000m training plan. After missing the first round of the &lt;a href=&quot;https://comp.erg.zone/leaderboard/lkFaVlspSE2cjo_K1Fo_Ag?genders=M&amp;amp;utm_source=ergzone&quot;&gt;2023 ErgWars competition&lt;/a&gt; and coming in 27th in the male division I wanted to test out the 4k time trial.&lt;/p&gt;

&lt;p&gt;Result: I beat my previous 4K time by about 8 seconds.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/bikerg_4k_pr.jpeg&quot; alt=&quot;4K PR Image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We will probably test this again in Dec 2024 and see if I can improve it.&lt;/p&gt;

&lt;p&gt;If you are on strava come say hi: &lt;a href=&quot;https://www.strava.com/athletes/kfoxder&quot;&gt;@KFoxder&lt;/a&gt;&lt;/p&gt;</content><author><name></name></author><category term="posts" /><category term="personal" /><category term="fitness" /><summary type="html">Over the last 3 months I have been working with my good friend Jesse Biddle on a BikeErg 4000m training plan. After missing the first round of the 2023 ErgWars competition and coming in 27th in the male division I wanted to test out the 4k time trial.</summary></entry><entry><title type="html">Checking References</title><link href="https://kevinfox.dev/checking-references.html" rel="alternate" type="text/html" title="Checking References" /><published>2023-10-30T00:00:00+00:00</published><updated>2023-10-30T00:00:00+00:00</updated><id>https://kevinfox.dev/checking-references</id><content type="html" xml:base="https://kevinfox.dev/checking-references.html">&lt;p&gt;Over the years, I have done many reference checks as part of the YCharts engineering interview process, and I have been called by others who are doing a reference check on someone I worked with or managed.&lt;/p&gt;

&lt;p&gt;I haven’t seen many people write about them, so I thought I would share my thoughts on them. Not all interview processes check references. I think it is a good practice, but I understand why some companies don’t do it.&lt;/p&gt;

&lt;h3 id=&quot;normal-reference-checks-can-be-useless&quot;&gt;Normal reference checks can be useless&lt;/h3&gt;
&lt;p&gt;You are usually talking to someone that a candidate has given you and prepped to say nice things about them. In addition, a person you are calling is human and may have a relationship with the candidate that they don’t want to betray. If you have ever been asked to give a reference, you probably would feel guilty if you said anything that would jeopardize their shot at the job!&lt;/p&gt;

&lt;p&gt;Incentives are not always aligned here for the person responding to a reference check supplied by the candidate. I have always thought of it as my job to try to get the reference to say something of substance without feeling guilty about the person.&lt;/p&gt;

&lt;h3 id=&quot;favorite-two-reference-questions-to-ask&quot;&gt;Favorite two reference questions to ask&lt;/h3&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you were going to pair &lt;em&gt;__&lt;/em&gt; with someone on a project, what type of person would you pair them with and why?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;If I called you in 6 months and told you that it didn’t work out, what would you assume was the reason?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A little wordy, sure. Can you come up with a better way to phrase them? I am sure you can. You get the gist, though.&lt;/p&gt;

&lt;p&gt;The questions force the person in the end to really answer the question many people ask: “What are the candidate’s strengths and weaknesses?” No one has ever honestly told me someone’s weaknesses when I ask them directly; however, with this, they are indirectly telling you what this person could be lacking without feeling guilty.&lt;/p&gt;

&lt;p&gt;You might hear someone say: “They are really productive but sometimes have a hard time organizing all of their work, so I would pair them with someone who is pretty organized and detail-oriented.” In that one sentence, you can learn a lot about the person.&lt;/p&gt;

&lt;hr data-content=&quot; &quot; /&gt;

&lt;p&gt;Thoughts / comments / edits / concerns? Email me: kevin_fox at me dot com&lt;/p&gt;</content><author><name></name></author><category term="posts" /><category term="professional" /><summary type="html">Over the years, I have done many reference checks as part of the YCharts engineering interview process, and I have been called by others who are doing a reference check on someone I worked with or managed.</summary></entry></feed>