Code quality

Why front-end rewrites are more common than refactors

Why do engineering teams keep rewriting frontends? Let’s explore the leadership bias and tech churn that makes refactors feel harder—yet ultimately more sustainable.

Another early-stage SaaS founders dilemma: buy a pre-built app or build one from scratch

Should SaaS founders buy or build their MVP? We compare pre-built apps vs custom development across cost, time, scalability, and code quality — so you can choose the right foundation for your product.

🌶️ SaaS startups should never use microservices. Like, never-ever.

Many SaaS startups over-engineer their architecture with microservices. Here's why that's usually a costly mistake—and what to do instead.

The hidden cost of API migrations

Forced API migrations without a rollback plan? That’s how businesses lose trust—and money.

Taming a Python: don't let the snake bite

Adapting to a new tech stack is all about mindset. Switching from PHP to Python was an eye-opener. Package management confusion, unexpected paradigms, and a lack of encapsulation made for an interesting challenge. Embracing constraints is the secret to growth.

Learning from OSS: legacyBehaviour property on Next.js 's Link component

Ever introduced a breaking change and instantly regretted it? Components evolve, but forcing users into painful refactors isn’t ideal. Next.js tackled this with a legacyBehaviour flag—letting devs opt out of the new behavior while they migrate at their own pace.

Making an existing Laravel application multi-tenant with Tenancy for Laravel

Transforming a legacy application into a multi-tenant powerhouse is no small feat. Learn how we tackled the challenges of adding multi-tenancy to a Laravel app, from infrastructure planning to custom bootstrappers, and discover practical tips to future-proof your applications.

Accessibility in mobile apps: considerations for startups

Accessibility isn’t just ethical—it’s essential for reaching a wider audience and creating loyalty. Designing apps with inclusivity in mind boosts engagement, ensures compliance, and sets your product apart in a competitive market.

Introducing URL: The Zero-Dependency, Framework-Agnostic State Manager

Say hello to URL 🚀 We’re excited to introduce URL, a zero-dependency, framework-agnostic solution that simplifies state management for modern web development. No installs. No complex tools. Just pure simplicity.

How to manage technical debt as part of your agile process

How to manage technical debt effectively to keep startups agile with strategies for documenting and prioritising technical debt, integrating it into your roadmap, and creating a culture of continuous improvement. Keep your codebase healthy and your team productive with these actionable tips.

How to minimise the impact of developer onboarding

Discover strategies to optimise developer onboarding, minimise costs, and improve time-to-market. Learn how to tackle challenges like code complexity, technical stack adaptation, knowledge transfer, and team integration while fostering a supportive and productive environment for new hires.

Caching routes, components and functions with "use cache" in Next.js 15 (canary)

"use cache" is an experimental Next.js 15 Canary feature and may change. In this tutorial, we explore "use cache" for caching, covering fetching and inserting comments with Drizzle to reduce database calls and improve performance while maintaining control.

Instant feedback using the useOptimistic hook in React

Implement optimistic updates in React with the useOptimistic hook for instant UI feedback. This technique enhances user experience by updating the interface immediately while the server processes actions in the background, creating a faster and more responsive app.

Crossing boundaries: Handling data mutations in client components

Discover how to efficiently mutate data in client components using server actions in Next.js. Learn to handle form submissions with React’s evolving hooks like useActionState, eliminate the need for API endpoints, and streamline client-server interactions for faster, more responsive applications.

Crossing boundaries: Passing server data to client components in React

Learn how to optimize performance by fetching data server-side without blocking the page render. This guide explores passing promises to React client components and resolving them asynchronously using Suspense, ensuring a smoother, faster user experience.

Subscribe