Y Combinator urges founders to build startups based on internal tools. However, developer culture and career incentives often push founders towards building internal tools instead of buying as they value the "built it myself" badge over purchased solutions.
2024.02.15·philosophicalhacker.substack.com·1 min read·TLDR Web Dev It’s crucial to measure a component's actual impact on the whole system when making optimizations.
A humorous website that plays one of GitLab’s internal remote meetings. It allows users to pretend to be working by displaying video on the screen.
UI tests have traditionally been conducted through either unit testing or end-to-end (E2E) tests. Both approaches have tradeoffs. With unit tests, you have control over what to render and how the underlying services and imports should behave. However, you lose the ability to interact with an actual page. With E2E tests, you have control over the page but deal with pain points like the inability to make assertions on mocks and test segments of the app. SafeTest aims to address these issues by having a snippet of code in the application bootstrapping stage that injects hooks to run tests. It uses Playwright to run regular tests, thereby achieving ideal browser control. SafeTest also provides reports on when and how any failures occurred which include playback videos or steps to reproduce the failure.
'How to center a div in CSS' is one of the most common questions developers google. There are various methods to center a div with CSS, such as by using text-align, flexbox, CSS Grid, positioned layout with auto margins, or a flow layout with auto margins. To choose the right method, a developer should decide if the centering is horizontal, vertical, or both, think about the number of elements being centered, and consider the layout context (flow, positioned, or grid). Flexbox is a good default choice for centering divs.
Turborepo, a fast JavaScript build system, was ported from Go to Rust. This porting process involved several challenges, such as ensuring hash stability and maintaining compatibility with the Go version. This post discusses lessons learned from the porting process, such as the importance of using a single serialization format from the start and shipping each porting strategy faster.
Hacker News commenters recommend building projects for yourself to solve your own problems rather than trying to go looking for ideas. They recommend working on something that makes you personally happy so that you can return to work on it often organically without forcing yourself to. Building things and taking action often leads to better things, even if the “better thing” is not clear from the start.
An in-depth guide to what on-calls are, their benefits and downsides, and how they work in practice. It also has some interesting perspectives on whether on-calls should be mandatory and compensated. The guide offers many useful tips on how to maintain on-call runbooks, escalation processes, and creating effective on-call practices such as establishing feedback mechanisms for on-call members to share experiences and suggest feedback. It advocates for EM to join the on-call and explains why.
ChatGPT is being updated with the ability to remember information from past conversations, which will make it more personalized in future interactions. Users will have control over what information is remembered and can tell the chatbot to forget things if they want. This feature is currently being tested with a small group of users and will be rolled out more broadly soon.
Unlazy is a lazy loading library that leverages native browser APIs. It's intended for use with the loading="lazy" attribute alongside (blurry) placeholder images.
Linen is a real-time thread-first messaging platform. It’s designed for deep work first, with organized channels, a centralized inbox, and personalized notifications.
This blog post explores the traffic trends from Super Bowl ads. It also looks at local traffic trends seen during the game, as well as email threat volume across related categories in the weeks ahead of the game. Some interesting conclusions: most Super Bowl ads no longer drive traffic to associated websites by including a URL in their ad. However, the DNS traffic analysis in the post shows that viewers don’t seem to have much trouble finding these sites. In-game events had a mixed impact on traffic across domains associated with multiple types of apps, as well as traffic for the websites associated with the teams playing in the Super Bowl.
It’s important to have automated testing, refactoring of prompts, and defending against adversarial attacks to ensure the reliability and security of LLM applications. This article demonstrates the necessity of thoughtful prompt design, ethical considerations, and incorporating feedback early in the development process through examples and discussions. Like with all development, a lot of core software principles still apply to LLM applications.
FoundationDB is the underpinning of Apple’s current cloud infrastructure. The creators of FoundationDB have created Antithesis, a deterministic autonomous testing platform designed to find bugs in software. When developing FoundationDB, their testing infrastructure was renowned for its effectiveness. Antithesis performs deterministic simulations to test software and find bugs.
Andrej Karpathy, previously the director of artificial intelligence and Autopilot Vision at Tesla and most recently an employee at OpenAI, has left OpenAI.
A web-based, real-time log viewer for Kubernetes clusters.
A short history of IBM over its 100 years.
Some languages have tools that let you manipulate program states across time. General relativity theory suggests time can move in both directions, so it is theoretically possible that one day, programming languages may implement some form of time travel using ideas like time-loop logic.
Various online commenters have left software to become lawyers, teachers, and researchers.
Sponsored
If you’re dealing with complex front-end frameworks and single-page applications, your approach to monitoring needs to evolve. This free developer kit [5] is packed with helpful resources to adopt a user-centric approach.
As databases grow, query optimization becomes more important to combat slow data retrieval and loading times. There are various strategies to optimize queries, including index creation, analyzing query execution plans, and understanding specific database engine optimization techniques. This article uses a real-world example to show how to optimize a query from start to finish.
While logs and queues share temporal ordering, they differ fundamentally. Queues adhere to a First-In-First-Out (FIFO) principle, allowing for sequential consumption from the head or tail. In contrast, logs require readers to maintain a pointer and read by position rather than by order of arrival. This distinction leads to advantages in scalability when implementing logs as queues, particularly in enabling parallel consumption and efficient load distribution among multiple consumers without necessitating knowledge of the internal structure. Additionally, queues offer benefits such as replay and durability, explored in detail in the article.
This article compares Rust's memory safety with C++ by illustrating a scenario involving an internal library written in Rust. Initially, the author used Rust's “Rc” type for reference counting but encountered thread safety issues. Upon switching to Rust's “Arc” type, which provides atomic reference counting, the compiler enforced thread safety, ensuring data race conditions were prevented at compile time. C++ lacks such safety features, relying on developers to manually handle thread safety, which can lead to subtle bugs and undefined behavior. Rust's borrow checker and type system statically prevents data races, making it unique among programming languages.
Small diffs facilitate faster and more thorough code reviews, reduce the likelihood of introducing bugs, minimize merge conflicts, and make it easier to roll back changes if needed. While there may be exceptions for large diffs, such as when adding boilerplate or auto-generated code, the general rule is to aim for small, focused changes to codebases.
Elixir is a great language for simplified web app development as it allows developers to collapse the tech stack through features like Phoenix LiveView, built-in concurrency and fault tolerance, and integration with familiar tools. The language also has a fairly stable ecosystem with mature tooling to speed up development, making it ideal for bootstrapped startups.
An infrastructure lead had to make various infrastructure decisions for a startup over the past four years. He endorses choosing AWS, RDS, and Redis ElastiCache, but regrets opting for other things, like AWS’s premium support. He also recommends considering dependency management and identity platforms earlier rather than later in order to save the company from a painful migration later on.
Sponsored
QA Wolf [12] offers a cost-effective approach to getting 80% test
They build and maintain your test suite in Playwright + include unlimited parallel test runs on their infrastructure.
Stract is an open-source web search engine targeted towards tinkerers and developers. It features keyword search, advanced query syntax, a Wikipedia and StackOverflow sidebar, priority of personally-selected trusted websites, and more.
Sapling is a code editor that prioritizes editing speed, allowing users to edit code at the pace of their thoughts. It is similar to editors like Vim and supports editing in any language through plugins.
Sweep Assistant, a locally operating developer tool, collaborates with you while coding. It prioritizes your security by exclusively transmitting code to your OpenAI endpoint. When using Azure OpenAI, all your code remains within the confines of your network.
A Google engineer named Eric Lehman warned in 2018 that AI posed a serious threat to Google's search dominance. This concern stemmed from Google's BERT project, which achieved impressive results in web answers (featured snippets). Lehman urged proactive measures to avoid being blindsided by a potential competitor, even a startup, using a similar approach. While Google acknowledged the threat, Lehman eventually left the company in 2022. This internal email highlights Google's early concerns about AI disruption and foretells the rise of alternative search engines like Perplexity, which capitalize on unsupervised learning from raw text.
European app developers are expressing discontent with Apple's new App Store rules, criticizing Apple's fees and restrictions. Despite the potential for alternative app stores and payment systems, developers feel pressured to adhere to Apple's terms to avoid warnings and fees. Apple is defending its changes as compliant with regulations and necessary for user security.
Design engineers are crucial for creating interactive features in web interfaces. They can design and code at the same time, ensuring that the final product feels intentional and well-designed.
A group of volunteers led by a former Safari developer embarked on building SerenityOS and Ladybird browser from scratch to understand complexity. After encountering a crash while testing, the author of this article delved into the code, identified a CSS compliance issue, and collaborated with the developers to resolve it. The lesson for developers is that if you are motivated and skilled, you can single-handedly get very far. No complexity is too much to be understood.
Big Tech is losing its luster compared to the past due to layoffs, disillusionment among employees, and stagnant career growth.
A Reddit user had to take a personality test for FedEx’s software engineering role that had them pick whether characters in displayed images represented them or not.
Aha! transitioned JavaScript code into a monorepo to streamline development. Initially, the company used private npm packages for code reuse, but the process required them to make changes to private npm packages, which quickly slowed them down. Its team evaluated several tools to do the repo migration efficiently, ultimately choosing Turborepo in conjunction with pnpm. This setup maintained git history, simplified its codebase, and enhanced the development workflow without adding unnecessary complexity. The transition has led to significant time savings and reduced frustration for its engineering team.
A team was looking to optimize GraphQL query time and explored several options like pagination, reducing the number of nested queries, caching, filtering, and more. However, one approach was the most effective and reduced large GraphQL query time from 20 seconds to 1 second. They did this by optimizing SQL queries against the database and it’s very simple - instead of using SELECT *, specify the columns you want. This will reduce payload size and reduce database overfetching.
This article covers in-depth service testing, optimizing startup and shutdown, avoiding global state, handling common request types, and controlling the environment through flags, and environment variables. When writing HTTP services in Go, the author only uses one HTTP handler per service and relies on HTTP routes to divert traffic to the right handlers within each service. Functions are used as handlers and dependencies are passed as arguments.
The excessive complexity and size of modern software leads to vulnerabilities and security breaches. Okta, Microsoft, and Apple users have been hacked multiple times over the past few years due to the amount of code surface area available for hackers to exploit. A return to minimalistic yet functional software development practices can help reduce security issues in modern software.
After being laid off, this author had trouble finding a new job. He detailed all the ways he made himself open to new opportunities, utilizing LinkedIn, job ads, and specialized platforms. Throughout the process, he maintained meticulous tracking of applications and learned to navigate salary negotiations and technical assessments. The author details his entire journey from start to finish, with transparency and tips along the way.
Agile methodologies in corporate environments ("Corporate Agile") commonly have bloated processes and misplaced priorities, shown by excessive meetings and too many middle managers. A return to "Basic Agile," with an emphasis on principles over rigid processes, will allow teams to self-organize and adapt under uncertainty. Basic Agile done right has a focused, quick daily meeting to discuss potential blockers, short sprint planning sessions, and immediate issue resolution.
React Native is now available for developing applications for the Apple Vision Pro.