JimmyVanVeen.com
Don't Do Things The Hard Way, Just Do Hard Things: A Developer's Philosophy (March 25, 2025)
This blog post explores the crucial distinction for developers between "doing hard things" and "doing things the hard way." It argues for a pragmatic approach grounded in values, emphasizing that while tackling genuinely challenging problems is essential for growth and delivering value ("doing hard things"), there's no inherent virtue in choosing unnecessarily complex or difficult methods ("doing things the hard way"). Instead, developers should prioritize efficiency, leverage sensible shortcuts, and focus on user needs, strategically applying their efforts to solve real problems and build robust, user-centric software. The ultimate goal is to achieve meaningful outcomes and build resilience by tackling necessary complexities effectively, rather than creating artificial difficulty for its own sake.
Replacing TSDX with TSUP and TSC (February 15, 2023)
TSDX is a popular development tool that provides many useful features, including hot reloading, testing, and bundling. However, as of September 2021, the TSDX project is no longer being actively maintained, which means that users will not receive updates or bug fixes. As a result, it may be necessary to find alternatives for developing and building TypeScript libraries. In this blog post, we will cover how to replace TSDX with `tsc` for type definitions and `tsup` for code transpilation in TypeScript libraries.
Applying Types to createAsyncThunk (January 21, 2023)
This blog post explains how to apply types to the createAsyncThunk function from Redux Toolkit. It covers the understanding of the arguments that the function takes and creating types for the payload, meta, and error of the async thunk. By applying types to the `createAsyncThunk` function, it ensures type safety and better intellisense when working with async actions in your Redux store.
Conditional Prop Types (May 14, 2020)
In React, props are the lifeblood of an application. PropTypes are an industry standard way to enforce types within those props. What should you do when a given prop is required in order to use a sibling prop? Well, conditional Prop Types of course! I'll explain how I solved this problem at work in this blog post.