Blog
Posts on software development, careers, and craft.
Recording complete
Recording complete! 🎉 I've completely updated "Building Apps with React and Redux" on Pluralsight! I made a long list of enhancements along the wa...
Superb CSS post
Superb CSS post. "Stop thinking about separation of concerns. Instead, think dependency *direction*." CSS and HTML must correspond. So ask what's m...
Limiting work in progress is important
Limiting work in progress is important. But I’ve found the ideal number of items in progress is greater than 1. Concurrent tasks mean you can switc...
If you're doing GraphQL, here's an excellent, concise list of best...
If you're doing GraphQL, here's an excellent, concise list of best practices: https://principledgraphql.com/
There are so many benefits to transitioning to GraphQL
There are so many benefits to transitioning to GraphQL. Here's a few benefits Netflix is enjoying. Smaller payloads Faster responses Simpler backen...
To simulate enums in JS, you can use an object
To simulate enums in JS, you can use an object. But I often prefer to use consts. To me, consts read better, are easier to use, and I don't have to...
A Slack chat from today: "We're trying to reach feature parody"
A Slack chat from today: "We're trying to reach feature parody". "You mean parity." 🤓 "Yeah, whatever. Anyway, once it’s all switched we’ll defeca...
Software development: When your curiosity about why something doesn't work...
Software development: When your curiosity about why something doesn't work exceeds your desire to give up.
A helpful code review mindset: "Will we understand why this line exists...
A helpful code review mindset: "Will we understand why this line exists later?" If the answer is no, options to clarify intent: 1. Introduce a well...
When I see complex code that I don't understand, I fight a knee jerk...
When I see complex code that I don't understand, I fight a knee jerk reaction: "That seems needlessly complicated"... It's hard to discern between...
I feel wildly lucky to have found a career I enjoy so much
I feel wildly lucky to have found a career I enjoy so much. Even after 2 decades, writing software continues to be a fascinating occupation. Each p...
Hot take: Optional chaining encourages writing brittle code
Hot take: Optional chaining encourages writing brittle code. Example (currently a stage 1 JS feature): const data = myObj?.firstProp?.secondProp?.a...
JS Tip: You can declare a default value when destructuring
JS Tip: You can declare a default value when destructuring. Example: const { id = 7 } = {} console.log(id) // 7 This protects from setting "id" abo...
Your outcomes are a lagging measure of your habits
Your outcomes are a lagging measure of your habits. Your net worth is a lagging measure of your financial habits. Your weight is a lagging measure...
Okay, I confess
Okay, I confess. I've spent the last few days writing TypeScript...and I'm enjoying it! What swayed me to try TS again: 1 Babel compiles TS 2 creat...
I don’t understand the grumpy old programmer stereotype
I don’t understand the grumpy old programmer stereotype. Times have gotten so much better. I spent years just waiting for IE6 to die! Now browsers...
To start a habit, plan when and where
To start a habit, plan when and where. Then you’re more likely to do it. Instead of, “I want to write more”, make a plan. “I’ll write 5-7 every wee...
A http://README.md is my favorite form of documentation
A http://README.md is my favorite form of documentation. ✅ No navigation overhead ✅ Easy to search via find ✅ Easy to download for offline access ✅...
Woah, here's a slick way to learn/experiment/teach JavaScript: RunJS
Woah, here's a slick way to learn/experiment/teach JavaScript: RunJS. - Compiles via Babel - TypeScript support - Reference npm packages - Runs you...
I ❤️ building against mock data
I ❤️ building against mock data. Just built a complete app against mock data. We rapidly iterated on the data structures while building the UI. The...
Despite my long history in C#, I’m still not using TypeScript
Despite my long history in C#, I’m still not using TypeScript. Why? I’ve found I don’t spend much time on type-related issues in JS. ¯\_(ツ)_/¯ “Jav...
A function can be too long or too short
A function can be too long or too short. Too long: Doesn't fit in your head. Does many unrelated things. Too short: The abstraction costs more than...
Tip: You can compare any two files using VS Code's slick native diff tool: 1
Tip: You can compare any two files using VS Code's slick native diff tool: 1. Open command palette (CMD+Shift+P) 2. Enter: "File: Compare active fi...
Npm perf tip: Use npm ci instead of npm install for 1
Npm perf tip: Use npm ci instead of npm install for 1. Your CI server 2. Anytime you want to delete node_modules, then npm install. Why? - It’s up...
My 3 favorite ways to navigate in VS Code: @code 1
My 3 favorite ways to navigate in VS Code: @code 1. CMD+click on import path or function to navigate there 2. CMD+P to open by filename 3. CMD+SHIF...
Woah
Woah. “97% of the code in today’s web apps is from npm. Only 3% is the code that you wrote.”- @seldo
In 2018, I greatly reduced my bad habit of doing things merely to impress others
In 2018, I greatly reduced my bad habit of doing things merely to impress others. The book that helped me focus on what matters most: "Ego Is the E...
1
1. Avoid copy/pasting the same code in many spots. 2. Avoid creating abstractions before there are multiple use cases. Both these seemingly contrad...
Refactoring before commit is critical
Refactoring before commit is critical. After code hits prod, it's both harder and riskier to refactor. The code is no longer fresh in your mind, an...
I've wasted countless hours through the years on slow feedback loops
I've wasted countless hours through the years on slow feedback loops. Over time, I learned: If the feedback loop is slow, job #1 is to ask: Is ther...