About:

Charles Chen is a software architect and developer with interests in cloud computing and teaching. He has 15 years of experience in regulated industries and enjoys building innovative solutions.

Website:

Specializations:

Interests:

System architecture Cloud computing Software engineering Learning Teaching Writing

Outgoing Links:

Subscribe to RSS:
The post critiques the hype around Model Context Protocol (MCP) while highlighting its importance for enterprise applications compared to Command Line Interfaces (CLIs).
The text discusses the use of TypeScript conditional types for type safety without assertions. It explains how to use property values to discriminate types without casting the type, and how to create type-safe call paths at build ...
The text discusses the negative impact of complexity in software development, differentiating between essential and accidental complexity. It highlights the challenges of dealing with accidental complexity and the need to prioriti...
The text discusses the inverted model of reactivity in React compared to other front-end frameworks. It explains how React's model of reactivity is different from Vue and Vanilla JS, and how understanding this difference is import...
The text provides a collection of lessons learned from working at various startups, including insights on competitors, non-technical co-founders, MVPs, product market fit, startup culture, tech selection, and early engineering hir...
The text discusses the misconception of AI startups being simple wrappers around third party models and APIs, emphasizing the importance of understanding and preparing the input data for LLMs. It compares AI startups to bakers, hi...
The text discusses the concept of 'bandwidth' in content production and distribution, and how generative AI has the potential to create 'infinite bandwidth' for content. It explains the historical pattern of advancement in content...
The text discusses the use of Google Cloud Storage Object Composition for merging multiple objects into one. It explains the process of getting set up, creating the fragments, probing the limits, refactoring for chunking, deleting...
.NET channels are an easy way to achieve high throughput, concurrent/parallel processing of information without the need to manage common challenges with thread synchronization. Discriminated unions pair nicely with .NET channels ...
The text discusses the limitations of OpenAI's GPT-4 in terms of throughput and latency, and explores alternatives such as Groq.com and Fireworks.ai. It also provides a practical example of building an app with .NET 8, System.Thre...
The text discusses the challenges of managing state and component boundaries in modern frontend web development. It introduces the defineModel macro released with Vue 3.4, which simplifies the implementation of components that sup...
The text discusses the pitfalls of microservices architecture and the benefits of modular monoliths with .NET. It highlights the complexities and unnecessary friction that comes with microservices, especially for startups, and sug...
The text discusses the inefficiency of long, complex interview processes in the tech industry, and suggests a more streamlined approach to identify the best candidates. It emphasizes the importance of identifying candidates with a...
The text provides a guide on how to set up TypeScript frontend solutions with a .NET backend, including generating OpenAPI TypeScript client generation with .NET 7. It explains the process of setting up the frontend and backend, a...
The text discusses the usage of Task Parallel Library (TPL) and ConcurrentBag in some .NET code, and compares it with .NET’s System.Threading.Channels (STC). It provides a test design, results, caveats, and conclusion, highlightin...
The text discusses Server Sent Events (SSE) as a mechanism for a server to stream data to the browser and surface those messages as events. It explains how to create the API, implement the client, and provides special consideratio...
The text discusses how to programmatically invoke Cloud Run Jobs with runtime overrides. It explains the limitations of Cloud Run Services and the benefits of using Cloud Run Jobs. It provides a step-by-step guide on creating the ...
The post discusses the misconception that TypeScript is simply statically typed JavaScript, emphasizing that it is not a statically typed programming language, but rather JavaScript with shape definitions. It explains that TypeScr...
The text discusses the shift in social media landscape and the benefits of using Mastodon and the Fediverse. It compares the experience of using Mastodon to the early days of Facebook and Twitter, highlighting the absence of algor...
The text provides 5 engineering lessons from early stage startups, including reducing complexity, picking platforms with low cognitive load, not optimizing prematurely, planning a route to grow, and not skimping on documentation. ...
The text provides a guide on how to scrape sites for LLM processing using Playwright. It explains how to extract text content from a page, deploy the code to AWS using Copilot, and deploy it to Google Cloud Run. It also includes i...
The text discusses .NET source generators, which provide a framework level utility to dynamically generate source code at dev time and build time. It explores how to incorporate source generators into projects to reduce tedious, b...
The text discusses the drawbacks of using leetcode exercises as an evaluation mechanism for technical candidates and proposes code reviews as a better way to evaluate software engineering candidates. It provides reasons for consid...