Chess prodigy Josh Waitzkin developed a process to achieve peak performance in any craft or career. He’s applied it to the world of investing, professional sports, science and more. The MIQ Process. It is not a quick fix, but rather a rewiring of your default settings.
I’ve noticed a pattern with some AI startups that are producing flashy demos with very low customer engagement.
They are usually solving occasional problems.
An example is “use natural language to query a database”.
Most employees at a tech company don’t actually write SQL queries every day. They might want to write a query once a month and struggle with the syntax. This is an occasional problem.
Data scientists, on the other hand, write SQL queries every day, but the solution they’d want is a power tool for data scientists. It would probably have version control, performance monitoring and collaboration features. Not a chatGPT style interface for hobbyists and beginners.
LLMs are really shining right now where they are applied to repetitive work that’s done by teams of human for 8+ hours a day.
@greenliteai is automating KYB for banks
@SolveIntel is automating the production of legal patents
@markprompt and @Senso_AI are making customer service agents more effective.
If you’re a #Rails developer, buying Campfire 🔥 is the best investment you can make in your professional development.
Forget the books and courses — it’s so fucking cool to see how the people who build Rails build Rails apps.
(And makes me want to work at @37signals!)
𝗪𝗵𝘆 𝗱𝗼𝗲𝘀 𝗚𝗼𝗼𝗴𝗹𝗲 𝗿𝗲𝗰𝗼𝗺𝗺𝗲𝗻𝗱 𝗠𝗼𝗱𝘂𝗹𝗮𝗿 𝗠𝗼𝗻𝗼𝗹𝗶𝘁𝗵𝘀 𝗶𝗻𝘀𝘁𝗲𝗮𝗱 𝗼𝗳 𝗠𝗶𝗰𝗿𝗼𝘀𝗲𝗿𝘃𝗶𝗰𝗲𝘀?
In the last decade, we have seen a massive trend of using microservices everywhere. We were building systems for a few hundred or thousand users and wanted to know how to make a system for millions of users. This was over-engineering and needed to be corrected. Why it was wrong? Because the development lasted long and we created incredibly complex systems, hard to maintain. This is especially true for startups that must go fast and stay simple.
A recent paper by authors from Google found that most of their developers split binaries for one of the following reasons: it improves performance, fault tolerance, and abstraction boundaries and allows for flexible rollouts.
Yet, splitting applications into microservices has its challenges:
🔸 𝗜𝘁 𝗵𝘂𝗿𝘁𝘀 𝗽𝗲𝗿𝗳𝗼𝗿𝗺𝗮𝗻𝗰𝗲. The overhead of serializing data and sending it across the network is increasingly becoming a bottleneck
🔸 𝗜𝘁 𝗵𝘂𝗿𝘁𝘀 𝗰𝗼𝗿𝗿𝗲𝗰𝘁𝗻𝗲𝘀𝘀. It is incredibly challenging to reason about the interactions between every deployed version of every microservice.
🔸 𝗜𝘁 𝘁𝗮𝗸𝗲𝘀 𝘄𝗼𝗿𝗸 𝘁𝗼 𝗺𝗮𝗻𝗮𝗴𝗲. Rather than having a single bi-nary to build, test, and deploy, developers must manage 𝑛 different binaries, each on their release schedule.
🔸 𝗜𝘁 𝗳𝗿𝗲𝗲𝘇𝗲𝘀 𝗔𝗣𝗜𝘀. Once a microservice establishes an API, it becomes easier to change by breaking the other services that consume the API.
So, they proposed the following approach:
𝟭. 𝗪𝗿𝗶𝘁𝗲 𝗺𝗼𝗻𝗼𝗹𝗶𝘁𝗵𝗶𝗰 𝗮𝗽𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀 that are modularized into logically distinct components. A component is a long-lived agent, similar to an actor.
𝟮. 𝗟𝗲𝘃𝗲𝗿𝗮𝗴𝗲 𝗮 𝗿𝘂𝗻𝘁𝗶𝗺𝗲 𝘁𝗼 𝗱𝘆𝗻𝗮𝗺𝗶𝗰𝗮𝗹𝗹𝘆 and automatically assign logistical components to physical processes based on execution characteristics. So, if both components are in the same OS process, they are called regular method calls, but if they are co-located, calls are executed as RPCs over the network. Runtime decides whether these modules should be collocated or moved to different machines (and scaled, etc.).
𝟯. 𝗗𝗲𝗽𝗹𝗼𝘆 𝗮����𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀 𝗮𝘁𝗼𝗺𝗶𝗰𝗮𝗹𝗹𝘆, preventing different versions of an application from interacting.
This approach consists of two main parts: a programming model with abstraction that allows developers to write modularized applications and a runtime for building, deploying, and optimizing these applications. They claim that it reduces application latency by up to 15x and costs by up to 9x by simplifying application management and deployment.
If you want to check the framework implementing the approach from the paper, check https:// serviceweaver. dev/.
What do you think about this approach? Does it look like EJBs or CORBA?
#microservices
quick crazy personal health story:
Four years ago this week I went to an ENT doctor for a partially deviated septum. I'd broken my nose twice playing sports and always had trouble breathing through it. Plus i'd get frequent sinus infections.
The doc said it needed a surgical fix, including a Turbinoplasty where they shave off some of the structure in the nasal passages (that helps filter air) to open up space. They scheduled me for the procedure two months later in late march 2020.
When the time came, it was during the first surge of Covid and the hospital canceled my appointment along with all non-urgent surgeries.
So I started looking into any ways to improve the situation without surgery and stumbled into the world of breathwork. In May, James Nestor released his book "Breath" and it provided a bunch of tactical ideas i could implement.
It also mentioned a rare but terrifying potential side effect to the exact surgery i was supposed to have called Empty nose syndrome:
"If surgeons drill out or remove too much tissue, especially the turbinates, the nose can’t effectively filter, humidify, clean, or even sense inhaled air." then "each breath comes in too quickly" and "it feels like constantly drowning in air". Yikes!
So now I was extra motivated to do whatever I needed to avoid the surgery. I tried to tape my mouth at night but would wake up gasping for breath. Practicing alternate nostril breathing helped a bit. But the real unlock came from discovering Patrick Mckeown's nose unblocking drill of nasal breath holds while walking and jogging. Like this:
At first, this was brutal (my nose would drip like crazy), but within a few weeks, I could feel the passageways opening. Within a month, I could sleep through the night with mouth tape. Now breathing through my nose is effortless and I haven't had a single sinus infection since.
Another reminder that the human body is remarkably adaptive. Just by creating intentional breathing pressure on my nose, I was able to cue it into magically fixing itself. And that it's often worth exploring alternatives before surgery!
Why most engineers don't make it to Staff:
They have the wrong behaviors and mindsets.
I went from Junior to Staff in 3 years largely because of the way I worked.
3 behaviors that helped me (feel free to copy):
I used to do this stupid dumb thing in college where I'd get throw-up levels of drunk, stumble back to my apartment at 5 AM, then see how many Vagrant GitHub issues I could close before I fell asleep at my desk. Having a newborn and remaining productive kind of feels like this.
The average public SaaS company spends about 50% of its revenue on sales and marketing and 20% on engineering and product
I know you want that to be the other way around
It just doesn't work that way
Story Points don't work.
Even Ron Jeffries, who invented them, said he was sorry years ago.
And not only did he apologize, but he called the whole estimation idea "Evil."
Unfortunately, too many teams still use these points to estimate their work.
Story Points is a made-up metric to estimate work effort, not time. The goal was to prevent management from misusing estimates.
But it didn't work.
Every team I've ever met keeps a conversion table to translate back and forth between points and time. Some will never admit it, but go and talk to the folks doing the work.
Look at me and tell me I'm wrong.
But it gets worse:
Teams use points to decide how much work they can finish. But how can they do that without talking about time?
The effort to do something is not the same as the time it will take to finish it. This is especially true when planning an iteration with many people and tasks.
It's clear now: Story Points don't work.
What's the alternative?
I'll let the people who manage projects for a living offer their alternatives, but I can tell you what I've done.
As I got older and wiser, I stopped with the estimation charade altogether. I had my teams focus on short iterations with constant feedback from stakeholders.
From the "scope, budget, and time" triangle, I always tried to keep two of them variable and fix the third one.
If the customer was looking for a specific scope, we had a variable timeline and budget to finish it. We kept the scope and time flexible if the budget was non-negotiable. And if we had to deliver by a specific date, the scope and budget were on the table.
Every company is different, and this doesn't work for everyone. But if it does, I hope you stop the charade.
I'd love to hear about your experience estimating software. What crazy things does your company make you do?
2023 is on track to be the hottest year on record, but we still have Republicans claiming the climate crisis is a "hoax." What planet are they living on?
Myth: Using UUID as the primary key will slow down inserts.
Fact: Not in Postgres.
I often recommend using UUIDs instead of integer sequences as primary keys. I was surprised to discover that many developers are uncomfortable with them and believe they will slow down inserts.
I was about to record a video explaining why UUIDs are awesome and showing that they do not slow down Postgres. But @hnasr saved me the trouble:
https://t.co/Nqgtfdv64l