March 2023 Summaries
3 posts from Aviator
Filter
Month:
Year:
Post Summaries
Back to Blog
We built Aviator, a developer productivity platform that solves common scaling challenges faced by engineering teams as they grow their team size and code complexity. We love GitHub but have a love/hate relationship with its limitations when building at scale. Our app uses GitHub APIs to manage pull requests, continuous integration test runs, and handle flaky tests while maintaining security compliance. However, we've encountered issues such as missing API capabilities like rebasing, network issues, managing unknown/unexpected behaviors, rate limits, and race conditions. To mitigate these challenges, we've implemented various workarounds, such as using the git CLI tool natively, caching information locally, retrying events, and employing locks to avoid inconsistencies and race conditions. We're also exploring ways to improve our error handling, rate limit management, and caching mechanisms to further optimize our performance. Aviator automates tedious developer workflows by managing PRs and CI runs to help teams avoid broken builds, streamline cumbersome merge processes, manage cross-PR dependencies, and handle flaky tests while maintaining security compliance.
Mar 17, 2023
2,332 words in the original blog post.
Git submodules are a powerful tool for managing dependencies in codebases, allowing developers to include external Git repositories within their own repository, making it easy to keep track of and update those dependencies. They offer benefits such as easily managing dependencies, branching out, and working on submodules independently of the main repository, but also have drawbacks like requiring separate tracking of changes, being tricky to work with if not familiar with the command line, and potentially increasing the size of the repository. Compared to monorepos and package distribution systems, Git submodules offer a cleaner commit history, better security, and are more suitable for apps using multiple languages or tools that don't support monorepo or package distribution. They can be used in CI/CD to manage dependencies, automate cumbersome merge processes, and streamline workflows, but should be used with caution and with an understanding of their drawbacks.
Mar 14, 2023
1,697 words in the original blog post.
The ACID transactions ensure that database transactions are reliable and consistent, even in the face of errors, power failures, or other problems. Atomicity ensures that all operations within a transaction are treated as a single unit of work, preventing inconsistencies by rolling back the entire transaction if any operation fails. Consistency ensures that the transaction brings the database from one valid state to another, following all rules and constraints defined in the database schema. Isolation ensures that concurrent transactions do not interfere with each other, executing as if it were the only transaction in the system. Durability ensures that committed changes are permanent and survive any subsequent failures by writing or persisting changes to disk or non-volatile storage. Optimistic locking allows multiple transactions to execute concurrently while verifying that data has not been modified by other transactions before committing changes. Eventual consistency allows data to be temporarily inconsistent while ensuring it will become consistent eventually through updates and distributed transactions. PostgreSQL supports ACID transactions, providing a reliable and widely used technique for database operations. To implement ACID transactions in PostgreSQL, one can use raw SQL or an Object-Relational Mapping (ORM) library like Sequelize, which provides a higher-level API for managing transactions. However, while ACID transactions ensure consistency and reliability, they can also have a performance impact, requiring careful management to minimize their effects.
Mar 08, 2023
3,332 words in the original blog post.