996 Work Culture: A Debate on Efficiency vs. Well-being

2025-09-06
996 Work Culture: A Debate on Efficiency vs. Well-being

This article reflects on the prevalent "996" work culture (9 AM to 9 PM, 6 days a week) in the tech industry. The author uses personal experience to argue that while loving work and occasional late nights are fine, this shouldn't be the foundation of company culture. Long hours negatively impact personal life and don't guarantee efficiency, often leading to burnout and reduced productivity. The author advocates for prioritizing employee well-being and avoiding the use of "996" as a measure of success.

Read more
Startup

Passkeys: Convenience vs. Control – A Growing Concern

2025-09-02
Passkeys: Convenience vs. Control – A Growing Concern

The shift towards passkeys as a replacement for usernames and passwords, while aiming for enhanced security, presents underlying issues. The attestation system allows websites to gather detailed device information, enabling governments to restrict users to specific hardware authenticators. Interoperability between password managers is limited, creating vendor lock-in. Sneaky auto-enrollment tactics by services subtly bind users to their ecosystems. The author expresses concern over increasing reliance on tech giants and complex systems, potentially leading to restricted data access, heightened authentication complexity, and ultimately, a loss of user agency.

Read more
Tech

Your MCP Doesn't Need 30 Tools: Code Is Enough

2025-08-18
Your MCP Doesn't Need 30 Tools: Code Is Enough

This article explores a novel approach using a single-tool MCP server that accepts programming code as input. The author points out challenges with CLI tools, such as platform dependency, version dependency, and lack of documentation, making them difficult for agent tools to use. In contrast, an MCP server can maintain state and expose a single tool (e.g., a Python interpreter running eval()), allowing agent tools to better manage sessions and compose tools. The author demonstrates the effectiveness of this approach with pexpect-mcp, which transforms the MCP server into a stateful Python interpreter, simplifying debugging and improving efficiency. Furthermore, the author explores replacing Playwright's MCP with one exposing the Playwright API via JavaScript, reducing tool definitions and improving data transfer efficiency. While security concerns exist, the author argues this approach has significant potential and warrants further exploration.

Read more
Development Agent Tools

Code Is All You Need: The Limitations of Multi-Component Pipelines (MCPs)

2025-07-03
Code Is All You Need: The Limitations of Multi-Component Pipelines (MCPs)

This article challenges the practicality of Multi-Component Pipelines (MCPs) for many tasks, arguing that their heavy reliance on inference makes them inefficient and difficult to scale. The author uses a personal example – converting reStructuredText to Markdown – to demonstrate a superior approach: using LLMs to generate code that performs the task, followed by LLM-based validation. This method reduces inference dependency, enhances reliability, and scales well, especially for repetitive tasks. While acknowledging MCP's strengths in niche scenarios, the author concludes that its inherent limitations hinder large-scale automation. The future, they suggest, lies in developing more effective code generation techniques coupled with LLM validation and explanation to improve usability and applicability.

Read more
Development

Programming Agents: A New Way to Measure Developer Experience

2025-06-19
Programming Agents: A New Way to Measure Developer Experience

A 24-hour coding sprint highlighted the poor developer experience caused by inadequate tools and processes, including missing documentation and flawed APIs. However, programming agents offer a solution. The author used agents to objectively evaluate different languages and tools, quantifying developer experience factors such as test coverage, error reporting quality, and ecosystem stability. Agent feedback closely mirrored human developer experiences, offering a new approach to improving code quality and development workflows.

Read more
Development

Agentic Coding: Practical Tips and Tricks

2025-06-12
Agentic Coding: Practical Tips and Tricks

This post details the author's experience with agentic coding using Claude Code, focusing on maximizing efficiency. Key strategies include using the cheaper Sonnet model, disabling permission checks, optimizing tool usage, and choosing Go for its simplicity and efficient testing. The author emphasizes writing simple, stable, and parallelizable code, and refactoring strategically. While the field is rapidly evolving, core principles like simplicity, stability, observability, and smart parallelization remain crucial for success.

Read more
Development agentic coding

AI: The Irreversible Shift

2025-06-04
AI: The Irreversible Shift

This blog post details how AI, specifically Claude Code, has revolutionized the author's programming workflow, boosting efficiency and freeing up significant time. The author argues that AI's impact is irreversible, reshaping how we live and work, despite initial challenges. The rapid adoption of AI across various sectors is highlighted, showcasing its transformative power in communication, learning, and daily tasks. The author encourages embracing AI's potential with curiosity and responsibility, rather than fear and resistance.

Read more

Rust's `Any` Trait Finally Supports Upcasting

2025-03-30
Rust's `Any` Trait Finally Supports Upcasting

Rust 1.86 has finally fixed a long-standing issue with the `Any` trait: the inability to upcast `dyn Any`. This means developers can now use methods from the `Any` trait, such as `downcast_ref`, on traits inheriting from `Any`. This fix eliminates the need for hacks previously required to achieve this functionality, improving code readability and maintainability. This is welcome news for Rust developers who have relied on these workarounds for years.

Read more
Development upcasting

Rust's rand Crate: A Dependency Nightmare for Random Number Generation

2025-02-08
Rust's rand Crate: A Dependency Nightmare for Random Number Generation

This article delves into the dependency issues of Rust's `rand` crate, used for random number generation. The author highlights the surprisingly large number of dependencies, leading to excessive compile times and bloated code size. `rand`'s dependency tree includes numerous crates like `libc`, `zerocopy`, and `ppv-lite86`, contributing significantly to the line count and compilation overhead. Potential solutions are suggested, including integrating some functionality into the standard library or improving `rand`'s dependency management. This sparks a discussion on the completeness of Rust's standard library and external crate dependency management.

Read more
Development

The Case for Fewer Dependencies in Rust

2025-01-24
The Case for Fewer Dependencies in Rust

Armin Ronacher, a renowned developer, laments the over-reliance on external crates in the Rust ecosystem in a recent blog post. He argues that excessive dependencies lead to constant updates, patches, and security audits, burdening developers and often introducing unnecessary code bloat. He advocates a "build it yourself" philosophy, encouraging developers to write their own code when appropriate instead of blindly relying on external libraries. He uses the `terminal_size` crate as an example, illustrating how a simple function depends on multiple crates and has undergone numerous updates, highlighting the drawbacks of over-dependency. The post calls for a shift in the Rust community's perspective, prioritizing fewer dependencies and celebrating developers who create low-dependency libraries.

Read more
Development