An hour of efficiency gained per day can save one month per year. This article provides tips on how to optimize your software engineering workflow. The tips include optimizing everyday tasks, making aliases and autocompletions for commands, and using tools to help remember things.
It’s important to not always be on the cutting edge of technology for the sake of it. Using proven technologies has many advantages, like reliability and support. Innovative technology should only be used when it fundamentally improves the chances of solving a specific problem.
The OpenAPI Stack is a collection of open source libraries and tools for full stack software development using OpenAPI specification with an API Design First philosophy. It unlocks a great developer experience and full stack type safety for software teams using REST.
Contour is a fast virtual terminal emulator for everyday use. It’s built with C++ and available on all major platforms. Contour comes with a host of features, such as color schemes, profiles, key bindings, font styles, and more.
Developers using GitHub Copilot Chat experienced better code quality, with 85% of participants in a study reporting increased confidence in their code. Code reviews were also more efficient, taking 15% less time with GitHub Copilot Chat. The tool helped developers maintain a state of flow and enjoy coding more, with 88% of participants feeling less frustrated.
It’s a challenge to balance speed and precision in startups before they’ve reached product-market fit (PMF). Pre-PMF startups should move fast to try to gain real-world feedback as fast as possible. At the same time, they should make sure to learn from failures. Software engineers working in a pre-PMF startup can expect to wear lots of hats and do more than just write code. They will have to understand the customer and conduct minimum viable tests.
An overview of notification types (snack bar, toast, alerts, and modals) and the top libraries for each type. It comes with a comparison table of the performance, size, customizability, and accessibility of each library to help you find the right notification framework for your project.
Today, companies like Microsoft are selling GitHub Copilot ($10/month) at a loss. However, the costs of LLM inference will go down over time, making LLMs (and AI coding tools) cheaper, more widespread, and increasingly useful.
With APIs becoming ever more central to software development, now is a great time to brush up on API security best practices. Download this 101 guide from Nylas
Slack manages many tasks asynchronously, including push notifications and billing. It previously used Redis for task queuing, but as Slack scaled, it faced limitations such as memory constraints and coupling between workers and Redis instances. To address these issues, Slack integrated Apache Kafka, added Kafkagate as a new scheduler, and used JQRelay to relay jobs from Kafka to Redis. This improved Slack’s scalability and durability and reduced complexity in managing job queues.
Barrel files are files that only export other files. They are used to reduce the number of import statements in a project. Barrel files are a common cause of performance issues in JavaScript projects, especially large ones. Importing many files through a web of barrel files can significantly increase module loading times, affect test runners' performance, and cause linting times to increase dramatically. Getting rid of barrel files can make many tasks run 60-80% faster.
Slack sends millions of messages daily across millions of channels in real-time across the world. This post explores Slack’s real-time messaging architecture with a discussion on the architectural and system design concepts they leverage to scale and keep the latency low. Slack's Channel Servers are stateful and in-memory, aiding in quick message delivery to clients. The post also touches on how consistent hashing routes traffic to different Channel Server nodes. It discusses the trade-off between low latency and scalability challenges which can be mitigated using the right cloud instance for memory-intensive operations.
In this article, the author, who has been programming for forty years, reflects on their learnings. They discuss their evolution in terms of ergonomics and health, noting the shift from standard setups to ergonomic choices like a vertical mouse and the Magic Trackpad from Apple. They also detail their keyboard journey, highlighting customizable, wrist-friendly keyboards. The author recommends VIM-based editors, standing desks, stretching exercises, and rock climbing as ways to maintain health and productivity in a programming career.
The author of this article reflects on significant changes in their C coding style and habits over the past year. They highlight various modifications, including the use of short names for primitive types, the adoption of a standardized set of macros, the elimination of null-terminated strings in favor of a custom string type, and the preference for structure returns over out parameters. Overall, the changes they highlight have improved productivity and code readability.
Open-source project maintainers face many challenges, including the burden of managing user expectations, answering questions, fixing bugs, and reviewing pull requests. Possible solutions for managing open-source projects include clearly stating the project's status, converting all open issues to discussions, blocking the creation of new issues, and unsubscribing from all notifications to reduce the mental and emotional toll on the maintainer. This author encourages sharing code without committing one's time and mental capacity to the entire project.
Trusted by the web’s biggest creators, Memberful is the easiest way to build a membership business. Memberful seamlessly integrates with the tools your clients already use like - WordPress, Mailchimp, Discord, and more - plus it includes a full-featured GraphQL API, webhooks, and OAuth Single Sign On. Your client's membership program should allow them to launch a new revenue stream without rebuilding their entire tech stack — Memberful makes that happen. Create your client's customized membership website now (free trial, no credit card required)
Fetchbook is a command-line tool designed to help you manage your collections of HTTP requests. It is based on the standard RequestInit object and runs in TypeScript with bun.sh.
A technical lead on a streaming solution discusses the use of technologies like Kubernetes, RabbitMQ, and load balancers in managing the process of video streaming. They detail how videos are processed asynchronously, scaled using Kubernetes, and cached using a Content Delivery Network () to ensure smooth playback for users. Costs are optimized using on-demand instances called preemptible nodes.
Achieving accessibility is difficult. To create accessible software, engineers need to take the time to learn how assistive technologies actually work. This article addresses a specific proposal related to focus behavior in UI elements and the potential issues it may bring. It underscores the complexity of accessibility and the need for careful consideration in implementing accessibility features.
Many people think that incremental static regeneration can only be applied to static sites like blogs. However, it’s possible to use incremental static regeneration in other types of websites, such as Nuxt e-commerce websites.
Economic uncertainty and workplace issues continue to weigh on workers and managers on a global scale, causing tremendous anxiety. In addition, career trajectories are inherently full of unknowns. We can’t always know future outcomes. This article offers 7 ways to deal with uncertainty in the workplace in a healthy way.
High-performing engineering teams love DORA metrics. But it’s not always easy for leaders to access up-to-date data about their teams. With a free LinearB account
This article discusses the importance of Low-Quality Image Placeholders (LQIPs) in creating a better experience for users waiting for the images to load. LQIPs can even enhance core web vitals like Largest Contentful Paint (LCP) if you make it meet the requirements for consideration of LCP. The article goes into any nuances to be aware of when using LQIP, along with how best to implement a solution.
LinkedIn deals with billions of daily requests, so the data serialization protocol it chooses can be very impactful. This post dives into how LinkedIn switched from using the JSON serialization format to Protocol Buffers, reducing p99 latency by 60% for big payloads and throughput by 6.25%. This is mainly because JSON uses a textual format, which requires more network bandwidth and more compute to compress data. One downside of protocol buffers is that they can be hard to debug and update.
2023.10.09·
newsletter.systemdesign.one·5 min read·TLDR Web Dev
Choosing the right cloud development environment for your team is an extremely important and difficult decision to make. This article lists and discusses the considerations software development teams should be making in order to choose the best option for them.
Successful engineering-led growth can only happen if the engineering teams can focus on building and the teams are doing work that aligns with company goals. There are many existing metrics and playbooks to measure a team’s efficiency, but team and company alignment tend to be more subjective and hard to measure. This blog introduces 4 business metrics that attempt to measure this alignment by showing how teams allocate time across initiatives. The 2,000 engineering teams studied tended to spend 55% of their time on New Value initiatives, 20% on Feature Enhancements, 15% on Developer Experience, and 10% on maintenance tasks.
2023.10.09·
devinterrupted.substack.com·6 min read·TLDR Web Dev
Strong static typing is not just a good idea, but also almost always the right choice. It leads to fewer bugs, a better development experience, and clearer contracts between different pieces of code. Strongly typed projects are typically developed slower due to a higher learning curve and more boilerplate code. Not using types often leads to more time spent documenting and testing. Strong static typing lets you catch more errors at compile time rather than run time, which prevents bugs from ending up in the hands of customers.
Navigating a career in software development can be tough. This article outlines 10 tried and true lessons on what to do to advance in a technical career based on technical expertise valued by the industry.
Yalc simplifies the process of publishing yarn/npm packages locally. Users can try packages before publishing to a remote and potentially public registry.
An AutoGPT agent that controls Chrome on your desktop. With the ability to interactively scroll, click, and input text on web pages, the AutoGPT agent can navigate and manipulate web content.
Jean Yang, CEO of Akita and an ex-Carnegie Mellon professor in programming languages, shares her thoughts on the challenges faced by startups in the programming languages domain. Yang emphasizes the disconnect between what developers desire and their actual needs. Some key challenges include the slow adoption of deep tech from research to industry and the importance of tools integrating seamlessly into existing workflows. Yang calls for tools that prioritize real-world developer needs over complete technological innovation.
7 lessons learned by Turbot in managing 200+ open-source repositories. Some key lessons are to keep project milestones transparent since contributors’ ideas might not align with project goals, use age reports to keep track of old PRs because long standing issues and PRs can create bottlenecks, maintain consistency in technical practice and high-quality documentation across all repos, and treat contributors like your team members!
NodeJS and GraphQL are popular technologies for building web applications but they come with certain scaling and performance tradeoffs to be aware of. GraphQL's modular structure generally leads to code that instantiates excessive promises, which degrades request performance. Benchmarks show a 2-3x latency increase.
Google has a process called “readability” that allows it to maintain certain coding standards and best practices in its monolithic codebase. It has published its style guides online and has described the readability process in its book “Software Engineering at Google”. Readability helps Google increase knowledge sharing, maintain its codebase's health, enforce best practices, and sustain a culture of mentorship. However, readability results in slower code velocity. The article goes through some examples of clean TypeScript code using Google’s style guide.
2023.10.06·
engineercodex.substack.com·5 min read·TLDR Web Dev
This article provides fifteen best practices for securing Node.js applications in production. These include setting secure HTTP headers, implementing rate limiting, and enforcing strong authentication policies. The article goes through each best practice with short code examples and images.
GitHub is a remote-first company, so its communication approach is rooted in asynchronous communication. The team uses GitHub not just for code hosting, but also for planning, discussing, and documenting work. To manage communication effectively, they created the "How we communicate" guidance, with rules such as preferring asynchronous communication and embracing collaboration. GitHub also uses AI to reduce notification fatigue and summarize discussion posts, making it easy for people to catch up on conversations they missed quickly.
This is a detailed comparison between Next.js 13 and Remix Run for building an example Twitter-like app. Next.js 13 and Remix both have adopted similar layout approaches. While Remix uses loaders for data fetching, Next.js 13 introduces React Server Components, offers a superior developer experience. Both support Streaming with Suspense to enhance user experience.
Craft.js is a React framework for building extensible drag and drop page editors. It modularizes the building blocks of a page editor and ships with a drag-and-drop system.
Envalid is a small library for validating and accessing environment variables in Node.js programs. It provides developers with documentation about a program’s expected environment and ensures that a program only runs when its environmental dependencies are met.