Month: August 2024

Ticking Away The Moments

Ticking Away The Moments

Nine years ago today I started this blog with a post that laid out my intentions in creating it. It’s cliché, but true, that a lot has changed in the intervening (near) decade, but for the most part, I think I’ve hewn pretty closely to the original idea, even if my underlying motivations have shifted.

Like many things worth doing, it took some time to find a good rhythm. After two initial posts I went almost 2 years without writing anything. Had a great streak going in 2017, but sputtered out in 2018 and didn’t get going again until early 2020. Since then, though, I’ve been on a roll. Maybe it was turning 40? Maybe it was COVID? Can’t say for sure, but I’ve been happy with my consistency since then (and a growing readership is nice too).

In other wistful, “how time flies!” type subject matter, my youngest kid left for college this past weekend and my oldest starts her junior year with a new location and major. They’re both gonna crush it, I have no doubt.

Go With It

Go With It

Last week I finished The Principles of Product Development Flow, based on a recommendation from the article I wrote about in Fightin’ Words. To say it was relevant to my current line of work is an understatement; I immediately mailed a copy to our de facto development process person.

Luckily for us all, though, there’s an official TL;DR version online. It’s a plethora of pithy principles packed onto one page. Go check it out!

Story Time

Story Time

I’m hiring again, this time for a Director of Engineering. A requirement for application is submitting a cover letter, which apparently has fallen out of favor? Enough so that one candidate DM-ed me on the side to let me know our recruiting tool was misconfigured for having the field non-optional. Nope!

Personally, I enjoy reading cover letters, because they tell me something more than just what a resume can. It’s the same reason I want to hear real stories in interviews. They’re especially useful in revealing the “why” behind an application, which, in the line of work I do, is especially important.

Producing them does require some effort, which is a feature not a bug, but hopefully not too tough because you do document your work, right? And it’s getting even easier with AI, which I have no problem with a person using to get a cover letter started, given a thoughtful prompt that customizes the result to the job, the company to which you’re applying, and unique details about the applicant.

Speaking of “why” and AI, the other day I had a potential candidate ask me why I chose to join my current company. Great question! I put Claude to the test, again giving it my entire blog corpus as reference:

Based on the content of your blog, your reasons for leaving AWS to join RIPL as Chief Technology Officer can be summarized as follows:

1. Mission-driven work: You've expressed a strong interest in using technology to improve people's lives and promote human flourishing. RIPL's mission to work with governments to help them use data, science, and technology to improve policy and lives aligns well with this interest.

2. Intersection of technology and public policy: You mentioned that you've "doubled-down on situating myself at the intersection of tech and politics." RIPL's focus on working with governments to improve policy through technology is a perfect fit for this goal.

3. New challenges: You've indicated a desire for work that isn't a "solved problem." Moving to RIPL likely offers new and unique challenges that weren't present at AWS.

4. Leadership opportunity: The CTO role at RIPL allows you to have a more significant impact on the organization's direction and strategy, which aligns with your growing interest in leadership roles.

5. Building from the ground up: You've expressed enjoyment in creating and building things. A smaller, more focused organization like RIPL might offer more opportunities to build systems and processes from scratch.

6. Applying cloud expertise: Your extensive experience with AWS can be directly applied to help governments leverage cloud technologies for public good.

7. Ethical considerations: You've shown interest in the ethical implications of technology. RIPL's focus on improving government policies likely involves careful consideration of these ethical aspects.

8. Desire for meaningful impact: Your blog suggests a strong desire to make a significant positive impact. The role at RIPL seems to offer a more direct path to seeing the results of your work in terms of improved public policies and services.

While you didn't explicitly list these reasons in a single post, they can be inferred from your various writings about your interests, values, and career trajectory. The move appears to be a natural progression that combines your technical expertise with your interest in public service and desire for impactful work.

Like my request from the other day, that’s pretty accurate! I wonder what other uses I can find for an LLM whose context window is big enough for nearly 9 years of writing…

In A Nutshell

In A Nutshell

Of the various AI-powered chat tools out there, I’ve been leaning into Claude the most. I appreciate their stance on safety for one thing, and I also really like features like document uploads, shareable projects, and artifacts.

Yesterday I exported the entire contents of this blog, loaded it into Claude, and then asked it to summarize my career trajectory.

Based on your blog posts, your career trajectory can be summarized as follows:

1. Early Years (Ages 4-18):
   - Started programming at age 4 on a TI-99/4A computer
   - Self-taught BASIC, then learned C and Pascal
   - Developed various small projects and games

2. College Years (Ages 19-24):
   - Studied mathematics and computer science
   - Worked on academic projects, including computational mathematics

3. Early Career at Defense Contractor (Ages 22-34):
   - Started at TRW (later became Northrop Grumman) right after college
   - Worked primarily with Ada and C
   - Developed algorithms for terrain analysis and flight path optimization
   - Gained experience in mapping software and API design
   - Moved to San Diego and got first taste of technical leadership

4. Mid-Career Transition (Age 35):
   - After nearly 13 years at Northrop Grumman, moved to Everyone Counts
   - Transitioned to working with Java and Perl
   - Became technical lead for the company's voting application

5. Technical Growth Period (Ages 36-37):
   - Expanded skillset to include Angular, Node.js, and Docker
   - Focused on continuous learning and adapting to new technologies

6. AWS and Cloud Focus (Age 38 onwards):
   - Joined Amazon Web Services as a Senior Consultant in the public sector
   - Obtained multiple AWS certifications
   - Worked extensively with cloud technologies and services

7. Leadership Role (Recent):
   - Became a technical manager, leading a team of software engineers
   - Focused on both technical and people management aspects

8. Current Role (as of last blog post):
   - Chief Technology Officer at Research Improving People's Lives (RIPL)
   - Working at the intersection of technology and public policy

Throughout your career, you've consistently demonstrated a passion for learning new technologies, solving complex problems, and gradually taking on more leadership responsibilities. Your trajectory shows a progression from low-level programming to high-level system design and management, with a growing focus on cloud technologies and public sector applications in recent years.

That’s surprisingly accurate! Well done, Claude.

Failure To Communicate

Failure To Communicate

I’m a sucker for travel point programs (and gamification more broadly). I’ve achieved maximum status on American Airlines, and am almost there with Marriott. When you get to the upper tiers there are crossover benefits with other programs, but they require activation. Today I tried taking advantage linking my Marriott status to Hertz, but the website threw a delightful stack trace:

Error processing capillary request: Error converting value {null} to type 'System.DateTime'. Path 'profiles[0].fields.marriottstatusmatchd', line 1, position 792. - at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) at Brierley.HertzModules.Custom.CapillaryIntegration.CapillaryManager.d__8.MoveNext() in C:\devroot\htz-loyalty\code\Portals\CustomModules\CapillaryIntegration\CapillaryManager.cs:line 66 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Brierley.HertzModules.Custom.MemberStat.d__8.MoveNext() in C:\devroot\htz-loyalty\code\Portals\CustomModules\MemberStat.ascx.cs:line 305

Probably not a great thing to leak, because one can learn a lot from a stack trace. For example, I can see their webserver runs on Windows, that it’s based on C# and uses ASP.Net web user control files, and that it uses the Newtonsoft JSON framework. If I were nefarious, and hunting for vulnerabilities, that’s a treasure trove.

Also interesting is the namespace of the module: Brierley. A quick Google search tells me that The Brierley Group is “a recognized innovator in the design of Customer Loyalty programs” and is behind a number of the ones I use every time I travel. Who knew there were companies who specialize in this sort of thing? Learn something new every day I guess.