<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[antonyjones.org RSS Feed]]></title><description><![CDATA[Antony Jones is a frontend developer in London, sharing insights on development, technology, personal growth, and the creative process behind building and experimenting with ideas. Explore projects, tutorials, and reflections on problem-solving.]]></description><link>http://github.com/dylang/node-rss</link><generator>GatsbyJS</generator><lastBuildDate>Sat, 11 Apr 2026 11:54:57 GMT</lastBuildDate><item><title><![CDATA[What I Actually Use My uConsole For]]></title><link>https://www.antonyjones.org/blog/what-i-actually-use-my-uconsole-for</link><guid isPermaLink="false">https://www.antonyjones.org/blog/what-i-actually-use-my-uconsole-for</guid><pubDate>Wed, 24 Sep 2025 16:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;i&gt;&lt;b&gt;uConsole&lt;/b&gt;&lt;/i&gt; by &lt;b&gt;Clockwork&lt;/b&gt; is one of those gadgets you buy first and figure out later. At least, that’s how it went for me. The painfully long wait only gave me more time to imagine what I might use it for.&lt;/p&gt;&lt;p&gt;When it finally arrived, my plan was simple: a pocket-sized dev machine. Something I could code on anywhere. In reality? The tiny form factor works against that unless you start adding peripherals. And the more you add, the less &amp;quot;portable&amp;quot; the whole thing feels.&lt;/p&gt;&lt;p&gt;Sure, the uConsole shines as a retro gaming device—I’ve seen plenty of people use it that way. But with the handhelds I already own, I wasn’t looking for another emulation box. I wanted something different.&lt;/p&gt;&lt;p&gt;Portability was the big draw for me, but the built-in trackball was the first big letdown—clunky, inconsistent, and frustrating. So I plugged in my own pointing device, and suddenly it felt less like a couch-friendly handheld and more like a desk-bound setup. Add a keyboard, maybe a monitor, and before long you’re staring at something that looks suspiciously like… just another PC.&lt;/p&gt;&lt;p&gt;But here’s the thing: it isn’t.&lt;/p&gt;&lt;p&gt;The uConsole struggles with desktop tasks (even YouTube stutters with a second monitor), but that’s not where it shines. Once I stopped treating it like a mini PC, things started to click.&lt;/p&gt;&lt;p&gt;I’ve got a handful of Raspberry Pis running headless around the house, and this little box has turned out to be perfect for managing them.&lt;/p&gt;&lt;p&gt;When docked with the extra peripherals, it becomes a surprisingly capable &amp;quot;remote programming station&amp;quot;. Coding over SSH, network management, monitoring, tinkering—it all just works. In this setup, the uConsole is starting to feel like it’s finding its purpose.&lt;/p&gt;&lt;p&gt;It’s not the portable dev machine I first imagined. But it has carved out a niche: a quirky, flexible hub for coding and keeping my Pis in check. &lt;/p&gt;&lt;p&gt;Though, thinking about it, an old laptop with Ubuntu would’ve done the job. I might do that and stop overcomplicating my life.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Chasing Ergonomic Excellence... or Just New Toys? - Part 2: Keyboards and Beyond]]></title><description><![CDATA[A continuation of my ergonomics journey, diving into the transition from the Logitech Ergo K860 to the Corne GLP keyboard. Explore how these new tools are reshaping my comfort and productivity.]]></description><link>https://www.antonyjones.org/blog/chasing-ergonomic-excellence-or-just-new-toys-part-2-keyboards-and-beyond</link><guid isPermaLink="false">https://www.antonyjones.org/blog/chasing-ergonomic-excellence-or-just-new-toys-part-2-keyboards-and-beyond</guid><pubDate>Wed, 05 Feb 2025 17:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the &lt;a href=&quot;/blog/chasing-ergonomic-excellence-or-just-new-toys-part-1-trackballs/&quot;&gt;first part of this series&lt;/a&gt;, I shared my experiences with trackballs. This time, we’re shifting gears to keyboards.&lt;/p&gt;&lt;h2&gt;Let’s Get Some Controversies Out of the Way&lt;/h2&gt;&lt;p&gt;Before we dive in, let’s clear up a few things. RGB lighting? Not for me. I don’t need my keyboard looking like a Christmas tree. And while some people chase the perfect “thock”, I’m more concerned with how a keyboard &lt;i&gt;feels&lt;/i&gt; than how it sounds. As long as it’s not obnoxiously loud, I’m good.&lt;/p&gt;&lt;p&gt;Now that the mini-rant is out of the way, let’s talk about something that actually matters—ergonomics.&lt;/p&gt;&lt;h2&gt;Logitech Ergo K860: My First Foray into Ergonomics&lt;/h2&gt;&lt;p&gt;Years ago, I saw a colleague using a split-layout keyboard—probably a Microsoft model. At the time, it looked weird, unnecessary. Why go against the traditional keyboard layout?&lt;/p&gt;&lt;p&gt;Then, I spent long enough working on cramped laptop keyboards, and well… I get it now.&lt;/p&gt;&lt;p&gt;When I transitioned back to a desktop, I picked up the &lt;b&gt;&lt;i&gt;Logitech Ergo K860&lt;/i&gt;&lt;/b&gt;. I had grown used to the light, low-profile keys of laptops, but my work laptop’s cramped layout was becoming unbearable for 8- to 9-hour workdays. It was time to prioritise ergonomics.&lt;/p&gt;&lt;p&gt;Having used Logitech products for years—the &lt;b&gt;&lt;i&gt;MX Master&lt;/i&gt;&lt;/b&gt;, the &lt;b&gt;&lt;i&gt;Performance&lt;/i&gt;&lt;/b&gt; before that, and various other peripherals—I’ve always been impressed by their quality, and the K860 is no exception.&lt;/p&gt;&lt;p&gt;The K860’s &lt;b&gt;split layout&lt;/b&gt; immediately made a difference. My posture improved, my hands sat more naturally, and the slight curve helped keep my wrists in a relaxed position. The &lt;b&gt;built-in wrist rest&lt;/b&gt; is comfortable—though I wish it were detachable—and the &lt;b&gt;reverse-tilt feet&lt;/b&gt; are a nice touch, even if I don’t use them.&lt;/p&gt;&lt;p&gt;The &lt;b&gt;low-profile keys&lt;/b&gt; made the transition from a laptop keyboard effortless. Plus, it integrates well with Logitech’s ecosystem, though with &lt;b&gt;Bluetooth&lt;/b&gt;, I don’t really need the Unifying Receiver.&lt;/p&gt;&lt;p&gt;The biggest downside? &lt;b&gt;No backlighting.&lt;/b&gt; Given how often I type in the dark like some nocturnal creature, this was a bit of a letdown. But overall, the Ergo K860 served me well—until I needed something more portable.&lt;/p&gt;&lt;h2&gt;Enter the Corne GLP: A Minimalist Experiment&lt;/h2&gt;&lt;p&gt;If you thought the Ergo K860 was a leap, meet my new setup: the &lt;i&gt;&lt;b&gt;Corne GLP&lt;/b&gt;&lt;/i&gt; keyboard paired with the &lt;i&gt;&lt;b&gt;Ploopy Nano&lt;/b&gt;&lt;/i&gt; trackball.&lt;/p&gt;&lt;p&gt;Switching to the Corne wasn’t as jarring as I expected—at least in terms of the &lt;b&gt;split layout&lt;/b&gt;. That felt natural after the K860. What &lt;i&gt;did&lt;/i&gt; throw me off was the &lt;b&gt;columnar stagger&lt;/b&gt;. My fingers kept reaching for keys that weren’t there. It’s been an adjustment, and I’m still tweaking my layers to make it feel seamless.&lt;/p&gt;&lt;p&gt;Since the Corne lacks the K860’s ergonomic curve, I use &lt;b&gt;tenting legs&lt;/b&gt; to maintain a natural hand position. The &lt;b&gt;ultra-compact design&lt;/b&gt; sacrifices the function row, number row, and dedicated arrow keys, but thanks to the VIA firmware, I can remap layers to make up for it. Still, it’s a work in progress.&lt;/p&gt;&lt;p&gt;Typing on the &lt;b&gt;Gateron Low Profile switches&lt;/b&gt; strikes the perfect balance—giving me that mechanical keyboard feel without the bulk. It’s lightweight, portable, and surprisingly satisfying to use. Once I fully dial in my layers, I suspect it’ll be hard to go back.&lt;/p&gt;&lt;h2&gt;Why the Ploopy Nano?&lt;/h2&gt;&lt;p&gt;So why another trackball? Because I’m an enthusiast, a minimalist, and maybe a bit of a masochist.&lt;/p&gt;&lt;p&gt;The Nano is as simple as it gets—just the ball, no extra buttons. I got it to pair with the Corne and keep my setup as portable as possible. My goal is to program &lt;b&gt;mouse clicks&lt;/b&gt; onto one of my Corne’s layers, making the Nano more functional. Without that, it’s pretty useless on its own.&lt;/p&gt;&lt;p&gt;A minor annoyance? &lt;b&gt;Micro-USB instead of USB-C.&lt;/b&gt; Carrying an extra cable isn’t ideal, but not a dealbreaker.&lt;/p&gt;&lt;p&gt;What really intrigued me was the &lt;b&gt;open-source&lt;/b&gt; nature of Ploopy’s hardware. I’m considering modding it, maybe experimenting with &lt;b&gt;BTU ball bearings&lt;/b&gt; for smoother movement. These bearings drastically reduce friction, but that could impact accuracy, as some resistance is required to stabilise the ball. I haven’t tested it yet, but I’m curious.&lt;/p&gt;&lt;h2&gt;The Wacom Intuos4 S&lt;/h2&gt;&lt;p&gt;You probably spotted another device in my setup—the &lt;i&gt;&lt;b&gt;Wacom Intuos4 S&lt;/b&gt;&lt;/i&gt;. I’ve had it for years, mainly for pixel art (when I somehow find the time). With the bulky K860 gone, I finally have enough desk space to keep it out permanently.&lt;/p&gt;&lt;p&gt;Wacom’s software is surprisingly versatile. I’ve mapped the &lt;b&gt;ExpressKeys&lt;/b&gt; to media controls (play, pause, skip, mute) and set the &lt;b&gt;Touch Ring&lt;/b&gt; for volume adjustments or seeking through videos. In &lt;i&gt;&lt;b&gt;Aseprite&lt;/b&gt;&lt;/i&gt;, it controls brush size and layer selection. I’m still figuring out how to make it useful in my code editor, but that’s next on my list.&lt;/p&gt;&lt;p&gt;For an older device, it still holds up well. The one thing I wish it had? &lt;b&gt;Trackpad gestures&lt;/b&gt;—something I took for granted after years of laptop use. But considering its age, I can’t really complain.&lt;/p&gt;&lt;h2&gt;Wrapping Up… For Now&lt;/h2&gt;&lt;p&gt;And with that, this series comes to a close—at least for now. If history is any indication, I’ll probably tweak my setup again in a few months. Maybe a &lt;b&gt;Part 3&lt;/b&gt; is on the horizon.&lt;/p&gt;&lt;p&gt;See you in the next one!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Practical Tips for Personal Growth]]></title><link>https://www.antonyjones.org/blog/practical-tips-for-personal-growth</link><guid isPermaLink="false">https://www.antonyjones.org/blog/practical-tips-for-personal-growth</guid><pubDate>Tue, 15 Oct 2024 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;b&gt;Excellence&lt;/b&gt; is always a pursuit worth undertaking. Unfortunately, excellence usually seems to elude me. 😅 Nevertheless, I continue to commit myself to &lt;b&gt;personal development&lt;/b&gt;. To &lt;b&gt;self-improvement&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;On this quest, I&amp;#39;ve read numerous self-help books, many of which felt like extended blog posts filled with fluff rather than anything profound.&lt;/p&gt;&lt;p&gt;However, when I explored &lt;b&gt;HBR&amp;#39;s &lt;/b&gt;&lt;i&gt;&lt;b&gt;Emotional Intelligence&lt;/b&gt;&lt;/i&gt; series, I found—much to my surprise (or perhaps not)—that these books were no exception. &lt;i&gt;Facepalm&lt;/i&gt;. That said, they weren&amp;#39;t entirely without value.&lt;/p&gt;&lt;p&gt;Here, I&amp;#39;ve compiled the &lt;b&gt;worthwhile bits&lt;/b&gt; into a single, &lt;s&gt;plagiarised&lt;/s&gt; curated post, enabling others to benefit without sifting through all the filler. While none of this is particularly revolutionary, I have found it &lt;b&gt;practical&lt;/b&gt;. I hope you will too.&lt;/p&gt;&lt;p&gt;Enough preamble; let&amp;#39;s get into it...&lt;/p&gt;&lt;h2&gt;Self-awareness 🧍&lt;/h2&gt;&lt;p&gt;When it comes to self-improvement, a crucial first step is taking stock of where you currently stand. This requires developing a deeper understanding of yourself, which is why we&amp;#39;ll begin with &lt;b&gt;self-awareness&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;I&amp;#39;m focusing on simply regurgitating the pertinent information, so my waffling will be minimal today. Here goes.&lt;/p&gt;&lt;h3&gt;Discover how you are perceived at work&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Select &lt;b&gt;5 people&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Try to arrange a face-to-face meeting, emphasising confidentiality. Explain that you&amp;#39;re gathering feedback from multiple people to identify common themes; this will lessen the burden on them.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pose these questions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&amp;quot;What&amp;#39;s the overall perception of me?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;quot;What changes could I make that would have the greatest impact on my success?&amp;quot; - If the person is uncomfortable, they might rely on task-related feedback; politely redirect with the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&amp;quot;I value your feedback. Can we broaden the scope and discuss the overall perception of me as a &lt;b&gt;leader&lt;/b&gt;, &lt;b&gt;colleague&lt;/b&gt;, or &lt;b&gt;individual&lt;/b&gt;?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Seek elaboration if necessary.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Manage your reaction.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;Strategies for soliciting constructive criticism&lt;/h3&gt;&lt;p&gt;Here are some prompts I&amp;#39;ve found effective for soliciting personal feedback from others:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Start with self-reflection:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&amp;quot;I&amp;#39;ve observed that I often work alone and am naturally quiet and introverted. I&amp;#39;m looking for ways to improve my communication and collaboration skills. Any tips on how I can better integrate with the team? Also, I&amp;#39;m open to suggestions for other areas of improvement.&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Make self-improvement a personal commitment and ask for help:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&amp;quot;I&amp;#39;ve committed myself to enhancing specific aspects of my performance this year. Would you be willing to provide feedback on one area where I can grow?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Reframe feedback as an opportunity for growth:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&amp;quot;What insights do you have that could help me achieve my goals?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Minimise the impact of negative feedback proactively:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&amp;quot;If there&amp;#39;s one minor habit I could adjust for the better, what would it be?&amp;quot; - This communicates to the other person that they don&amp;#39;t need to downplay, apologise, or contextualise negative feedback to make it easier for you to accept; you&amp;#39;ve already taken that step.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;Embracing feedback and criticism&lt;/h4&gt;&lt;blockquote&gt;&lt;p&gt;&amp;quot;For those who want to avoid criticism: don&amp;#39;t say anything, don&amp;#39;t do anything, don&amp;#39;t &lt;i&gt;be&lt;/i&gt; anything.&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Understand your tendencies.&lt;/b&gt; Recognise your habitual responses and inclinations.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Separate the content of the feedback from the person delivering it.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Prioritise coaching:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Distinguish between evaluative feedback (e.g., &amp;quot;Your rating is a 4&amp;quot;) and coaching feedback (e.g., &amp;quot;Here&amp;#39;s how you can improve&amp;quot;).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Embrace coaching as a means to learn, grow, and perform at a higher level.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Deconstruct the feedback:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Before accepting or rejecting feedback, analyse it thoroughly.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Seek clarification on its origin and intent.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Explore what went wrong, the underlying expectations, and actionable steps for improvement.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Seek specific guidance:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Don&amp;#39;t solely rely on annual reviews for feedback.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Proactively request focused coaching from various sources throughout the year.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Experiment with incremental changes:&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Implement small-scale trials to test potential improvements.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Use feedback as a catalyst for iterative progress and development.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Unhooking Yourself&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Recognise your recurring patterns.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Label your thoughts and emotions consciously.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Embrace them without judgment.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Align your actions with your values&lt;/b&gt; - Follow effective action with quiet reflection.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Making time for reflection&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Identify important questions but refrain from answering them immediately:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&amp;quot;What are you &lt;b&gt;avoiding&lt;/b&gt;?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;quot;How are you helping your colleagues achieve their goals?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;quot;How are you not helping or even &lt;b&gt;hindering&lt;/b&gt; their progress?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;quot;How might you be contributing to your least enjoyable relationship?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;quot;How could you have been &lt;b&gt;more effective&lt;/b&gt; in your last meeting?&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Choose a reflection method aligned with your preferences, such as journaling, for example.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Set aside dedicated time.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Start small.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Do it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Seek help if needed.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Confidence 😊&lt;/h2&gt;&lt;p&gt;It&amp;#39;s common for many of us to struggle with &lt;b&gt;confidence&lt;/b&gt; at times. I&amp;#39;ve personally felt the effects of &lt;b&gt;&amp;quot;imposter syndrome&amp;quot;&lt;/b&gt;, an enduring struggle that persists within me.&lt;/p&gt;&lt;p&gt;In this section, we&amp;#39;ll explore strategies to provide ourselves with the occasional boost we all need. &lt;/p&gt;&lt;h3&gt;Building confidence&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Prepare&lt;/b&gt;: Regular practice not only builds confidence but also enhances overall quality.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Get out of your own way&lt;/b&gt;: Confident people understand they can&amp;#39;t know everything and are open to seeking guidance when needed. Don&amp;#39;t hesitate to ask for help or direction.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Seek feedback when necessary&lt;/b&gt;: While self-assurance should come from within, external validation can also bolster confidence. Seek feedback from individuals invested in your growth and performance, whose feedback will be entirely truthful.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Embrace risk-taking&lt;/b&gt;: While playing to your strengths is strategic, avoid shying away from new challenges. Growth often stems from discomfort, so don&amp;#39;t fear failure; embrace it as a vital part of progress.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Principles to keep in mind&lt;/h4&gt;&lt;p&gt;To support personal growth, &lt;b&gt;be honest&lt;/b&gt; about your strengths and areas for improvement. Take on &lt;b&gt;challenging activities&lt;/b&gt; and seize opportunities that highlight your ability to overcome obstacles.&lt;/p&gt;&lt;p&gt;Instead of concentrating on natural abilities, emphasise the &lt;b&gt;value&lt;/b&gt; you provide and seek external validation when needed. Avoid letting concerns about others&amp;#39; opinions hinder your progress; focus on your own development rather than &lt;b&gt;hypothetical judgments&lt;/b&gt;.&lt;/p&gt;&lt;h3&gt;The Dunning–Kruger effect&lt;/h3&gt;&lt;p&gt;The &lt;b&gt;Dunning–Kruger effect&lt;/b&gt; is a &lt;b&gt;cognitive bias&lt;/b&gt; where those with &lt;b&gt;limited competence&lt;/b&gt; overestimate their abilities, while &lt;b&gt;high performers&lt;/b&gt; may underestimate theirs. Take a moment to let that sink in.&lt;/p&gt;&lt;h3&gt;Overcome the eight barriers to confidence&lt;/h3&gt;&lt;p&gt;Confidence is the expectation of a positive outcome. It is not a personality trait; rather, it is an &lt;b&gt;assessment of a situation&lt;/b&gt; that ignites motivation. If you possess confidence, you&amp;#39;re driven to put in the effort, invest time and resources, and persist in reaching the goal. Success isn&amp;#39;t solely attributed to confidence itself; it&amp;#39;s the &lt;b&gt;dedication and effort&lt;/b&gt; that ultimately yield results.&lt;/p&gt;&lt;p&gt;Avoid these eight traps to build the confidence needed to pursue your goals:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Self-defeating assumptions&lt;/b&gt; - Believing you can&amp;#39;t leads to inaction.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Unrealistic or distant goals&lt;/b&gt; - Confidence stems from achievable wins, with each small step bringing you closer.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Declaring victory too soon.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Isolating yourself&lt;/b&gt; - it&amp;#39;s a trap to think you can go it alone; build a support system and uplift others.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Avoiding responsibility&lt;/b&gt; - Confidence lies in owning your actions and moving forward.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Defensiveness&lt;/b&gt; - Refrain from defending when not under attack; apologise for mistakes but not for who or what you are.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Failure to anticipate setbacks&lt;/b&gt; - Confidence incorporates realism; avoid blind optimism.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Overconfidence&lt;/b&gt; - Confidence is a sweet spot between despair and arrogance.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Remember, confidence isn&amp;#39;t just about feeling; it requires &lt;b&gt;action&lt;/b&gt;.&lt;/p&gt;&lt;h3&gt;Great leaders are confident, connected, committed and courageous&lt;/h3&gt;&lt;p&gt;To lead effectively, you must be:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Confident&lt;/b&gt; in yourself.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Connected&lt;/b&gt; to others.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Committed&lt;/b&gt; to purpose.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Emotionally &lt;b&gt;courageous&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Helping a colleague with self-doubt&lt;/h3&gt;&lt;p&gt;Rather than engaging in conflict with your team members&amp;#39; inner critics, initiate a dialogue about &lt;b&gt;self-doubt&lt;/b&gt;. Consider the following approach:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Introduce the idea of the &lt;b&gt;&amp;quot;inner critic&amp;quot;&lt;/b&gt;, emphasising that it represents a voice in our minds often characterised by unrealistic thinking. Use the table below to illustrate the disparities between the inner critic and more realistic perspectives.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Encourage them to develop the skill of managing their inner critics.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Prompt them to practice recognising instances when they&amp;#39;re influenced by their inner critic, encouraging them to label these thoughts accordingly.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;p&gt;Inner critic&lt;/p&gt;&lt;/th&gt;&lt;th&gt;&lt;p&gt;Realistic thinking&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Focuses on &lt;b&gt;problems&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Seeks &lt;b&gt;solutions&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Very sure it knows the truth of the situation&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Curious and conscious of the many unknowns of the situation&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Asks yes/no questions - &amp;quot;Is it possible?&amp;quot;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Asks open-ended questions - &amp;quot;How might this be possible?&amp;quot;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Sounds &lt;b&gt;anxious&lt;/b&gt; and pessimistic&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Sounds &lt;b&gt;calmer&lt;/b&gt; and generative&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Thinks in &lt;b&gt;black-and-white&lt;/b&gt; terms&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Able to see &lt;b&gt;subtleties&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Is &lt;b&gt;repetitive&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Is &lt;b&gt;forward-moving&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;h2&gt;Focus 🎯&lt;/h2&gt;&lt;p&gt;We live in an age of &lt;b&gt;constant distractions&lt;/b&gt;. Technology and social media have shortened our attention spans, making it difficult to focus and stay present.&lt;/p&gt;&lt;p&gt;To avoid falling into endless doom scrolling, we&amp;#39;ll now focus on... well, &lt;b&gt;focus&lt;/b&gt;.&lt;/p&gt;&lt;h3&gt;Strategies for making better choices and enhancing focus&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Take regular breaks&lt;/b&gt; from screens and digital devices.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ensure you &lt;b&gt;get sufficient sleep&lt;/b&gt; and take mental breaks throughout the day.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Engage in &lt;b&gt;mindfulness&lt;/b&gt; exercises to stay present and &lt;b&gt;reduce stress&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pay attention to other people&amp;#39;s feelings and needs to relieve your own stress and gain the satisfaction of &lt;b&gt;helping others&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To improve focus, notice how you lose it:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;First, you choose a focus.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Sooner or later, your mind wanders.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Sooner or later, you realise your mind has wandered.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Having &amp;quot;woken up&amp;quot;, you may choose to return to the original focus.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;p&gt;Steps 1 and 4 are deliberate, while 2 and 3 happen naturally. With practice, you&amp;#39;ll stay focused longer before getting distracted.&lt;/p&gt;&lt;/blockquote&gt;&lt;h3&gt;What to do when you&amp;#39;re feeling distracted at work&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Understand the risks&lt;/b&gt; of multitasking.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Acknowledge your emotions&lt;/b&gt; while maintaining control.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Center your focus.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Base decisions on your values.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Set clear boundaries.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Select your interactions&lt;/b&gt; carefully.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Encourage mutual support&lt;/b&gt; with colleagues.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;A few helpful tips to consider&lt;/h4&gt;&lt;p&gt;To manage anxiety and stay focused, use breathing techniques to &lt;b&gt;calm yourself&lt;/b&gt; and let your ideal self-image guide your actions. &lt;b&gt;Set clear boundaries&lt;/b&gt; for social media and email to &lt;b&gt;minimise interruptions&lt;/b&gt;, and be aware of how distractions affect your concentration.&lt;/p&gt;&lt;p&gt;Avoid spending time with easily distracted individuals and &lt;b&gt;prioritise self-care&lt;/b&gt; by taking breaks, eating well, and getting enough sleep. &lt;/p&gt;&lt;h4&gt;Motivating yourself to work when unmotivated&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Fear of failure causing procrastination? Embrace a &lt;b&gt;&amp;quot;prevention focus&amp;quot;&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Feeling unmotivated? &lt;b&gt;Disregard your emotions.&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Task seems difficult or unappealing? Implement &lt;b&gt;if-then planning&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;5 ways to channel energy during work crunch&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Acknowledge&lt;/b&gt; the situation.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Identify and name your emotions&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Retain control&lt;/b&gt; by prioritising tasks, making tough decisions, and prioritising self-care. Ask yourself: What are today&amp;#39;s top priorities? How can I recharge? What must I decline or delay?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Keep open communication&lt;/b&gt; with colleagues and loved ones. Discuss deadlines, set boundaries, seek assistance.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Be kind&lt;/b&gt; to yourself.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;One last thought to keep in mind&lt;/h3&gt;&lt;p&gt;Your brain has its &lt;b&gt;limits on focus&lt;/b&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Take power naps.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;When creativity stalls, shifting focus can help; try embodying a different persona.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Mindfulness 🧘‍♂️&lt;/h2&gt;&lt;p&gt;Now that our confidence is high and our focus is sharp, let&amp;#39;s take a moment to consider how we can be more &lt;b&gt;mindful&lt;/b&gt;, the final theme in today&amp;#39;s pursuit of excellence. 😎&lt;/p&gt;&lt;p&gt;If you&amp;#39;re open-minded, you can try the following daily routine. But if you&amp;#39;d rather not attract curious glances, do it in a &lt;b&gt;private space&lt;/b&gt; where you can focus undisturbed.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Upon waking, &lt;b&gt;dedicate 2 minutes&lt;/b&gt; to simply observing your breath while still in bed. As thoughts about the day surface, acknowledge them and gently return your focus to your breath.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;When you arrive at your desk, &lt;b&gt;invest 10 minutes&lt;/b&gt; in boosting your brain with the following short mindfulness practice:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Close your eyes, settle into a relaxed but upright posture.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Direct your full attention to the sensation of your breath.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Immerse yourself in the rhythm of inhalation and exhalation.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;To anchor your focus, silently count each exhalation.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Should your mind wander, gently guide it back to your breath.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Above all, relish these moments; for these 10 minutes, your attention is solely yours.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Prior to each meeting, allocate &lt;b&gt;2 minutes&lt;/b&gt; for mindfulness practice.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Following lunch, set a timer on your phone to ring every hour. When it rings, pause your current activity and engage in &lt;b&gt;one minute&lt;/b&gt; of mindfulness practice.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;As your workday concludes and your commute home begins, embrace mindfulness. Dedicate at least &lt;b&gt;10 minutes&lt;/b&gt; of your journey to switch off your phone, silence the radio, and simply exist. Focus on your breath, allowing yourself to be fully present.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;For maximum mindfulness benefits, aim for a daily practice of &lt;b&gt;20 to 30 minutes&lt;/b&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;h3&gt;Empathy&lt;/h3&gt;&lt;p&gt;&lt;b&gt;Practicing empathy&lt;/b&gt; involves actively listening, understanding others&amp;#39; emotions, and offering support without judgment. By incorporating these behaviors into your interactions, you can build deeper connections and strengthen relationships.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Pose insightful questions&lt;/b&gt; in every interaction and &lt;b&gt;summarise key points&lt;/b&gt; shared by others.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Demonstrate attentive listening&lt;/b&gt; by facing the speaker, making eye contact, and expressing genuine interest verbally.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Show empathy&lt;/b&gt; when someone confides in you, using phrases like &amp;quot;I&amp;#39;m sorry&amp;quot; and &amp;quot;that sounds challenging,&amp;quot; while refraining from immediately offering advice or judgment.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Prior to meetings&lt;/b&gt;, take a moment to consider the individual&amp;#39;s circumstances and recent events in their life.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Gratitude&lt;/h3&gt;&lt;p&gt;&lt;b&gt;Practicing gratitude&lt;/b&gt; enhances mindfulness by encouraging individuals to acknowledge and appreciate the abundance in their lives, enriching their overall mindfulness practice.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Integrate sincere expressions of gratitude&lt;/b&gt; into your communication with others.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Send personalised messages&lt;/b&gt; promptly to colleagues, expressing appreciation for a job well done.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Publicly recognise the contributions&lt;/b&gt; of each team member.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Celebrate successes&lt;/b&gt; with appropriate gestures, such as pats on the back, fist bumps, or high fives.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Jerry&amp;#39;s final thought&lt;/h2&gt;&lt;p&gt;&lt;b&gt;Continuous self-improvement&lt;/b&gt; and the &lt;b&gt;pursuit of excellence&lt;/b&gt; are fundamental to personal fulfillment and success. Growth is a lifelong journey fueled by a commitment to &lt;b&gt;learning&lt;/b&gt;, &lt;b&gt;adapting&lt;/b&gt;, and &lt;b&gt;pushing one&amp;#39;s boundaries&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Set high standards&lt;/b&gt; for yourself, &lt;b&gt;embrace challenges&lt;/b&gt;, and persevere through difficulties. By doing so, you can achieve your full potential and gain a deeper sense of accomplishment and purpose in life.&lt;/p&gt;&lt;h2&gt;References&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Self Awareness&lt;/i&gt;&lt;/b&gt;&lt;b&gt; - HBR&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Confidence&lt;/i&gt;&lt;/b&gt;&lt;b&gt; - HBR&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Focus&lt;/i&gt;&lt;/b&gt;&lt;b&gt; - HBR&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Mindfulness&lt;/i&gt;&lt;/b&gt;&lt;b&gt; - HBR&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Chasing Ergonomic Excellence... or Just New Toys? - Part 1: Trackballs]]></title><description><![CDATA[Join me as I share my experience with ergonomic tools and their impact on comfort and productivity, beginning with an exploration of trackball mice.]]></description><link>https://www.antonyjones.org/blog/chasing-ergonomic-excellence-or-just-new-toys-part-1-trackballs</link><guid isPermaLink="false">https://www.antonyjones.org/blog/chasing-ergonomic-excellence-or-just-new-toys-part-1-trackballs</guid><pubDate>Tue, 16 Jul 2024 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When it comes to ergonomic tools for productivity, the trackball mouse is often overlooked. Traditional mice dominate most setups, but if you&amp;#39;ve ever experienced wrist strain or RSI, a trackball can be a game-changer.&lt;/p&gt;&lt;h2&gt;Kensington SlimBlade Pro&lt;/h2&gt;&lt;p&gt;I first encountered a Kensington trackball as a kid—probably their &lt;b&gt;&lt;i&gt;Expert Mouse&lt;/i&gt;&lt;/b&gt;—during a chaotic visit to PC World. My mate and I, in our infinite wisdom, decided to mess around with the trackballs, drawing enough attention to get ourselves kicked out. As we left, one thought stuck with me: &lt;i&gt;I need one of these.&lt;/i&gt; Something about it felt different—almost futuristic. Still, years passed before I finally got my own—the &lt;i&gt;&lt;b&gt;Kensington SlimBlade Pro&lt;/b&gt;&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;The SlimBlade Pro has a design that immediately stands out. It’s sleek, low-profile, and its large central ball gives off serious &lt;b&gt;HAL 9000 vibes&lt;/b&gt;—minus the ominous AI. Unlike thumb-controlled trackballs, which can feel cramped and imprecise, the SlimBlade’s &lt;i&gt;top-ball&lt;/i&gt; design offers &lt;b&gt;fluid, natural movement&lt;/b&gt; and &lt;b&gt;greater precision&lt;/b&gt;.&lt;/p&gt;&lt;h3&gt;Customisation &amp;amp; Software&lt;/h3&gt;&lt;p&gt;The SlimBlade Pro is plug-and-play, but I highly recommend installing &lt;i&gt;&lt;b&gt;KensingtonWorks&lt;/b&gt;&lt;/i&gt; for full customisation. With &lt;b&gt;eight programmable button actions&lt;/b&gt; (four physical buttons, plus four customisable combinations), the SlimBlade Pro lets you tailor its functionality to match your workflow. You can assign different functions depending on the app, making it a versatile tool for productivity.&lt;/p&gt;&lt;h3&gt;Twist-to-Scroll: Odd but Addictive&lt;/h3&gt;&lt;p&gt;Scrolling on the SlimBlade Pro isn’t done with a wheel—it’s all about the &lt;b&gt;twist-to-scroll&lt;/b&gt; mechanism. A gentle rotation of the ball lets you scroll through pages, accompanied by a satisfying clicky feedback. Once you get used to it, it’s oddly addictive.&lt;/p&gt;&lt;h3&gt;DPI &amp;amp; Performance&lt;/h3&gt;&lt;p&gt;With &lt;b&gt;four DPI settings (400, 800, 1200, 1600)&lt;/b&gt;, the SlimBlade Pro adapts to different needs. A lower DPI gives fine-tuned precision, perfect for tasks like editing or design work. However, its &lt;b&gt;low polling rate&lt;/b&gt; makes it a poor choice for gaming.&lt;/p&gt;&lt;h3&gt;Connectivity &amp;amp; Build Quality&lt;/h3&gt;&lt;p&gt;A big step up from the original &lt;b&gt;wired-only&lt;/b&gt; SlimBlade is the new &lt;b&gt;wireless connectivity&lt;/b&gt;—offering &lt;b&gt;Bluetooth, USB dongle, and wired&lt;/b&gt; options. I’ve used Bluetooth extensively without issues, though I’ve heard performance varies based on the connection method.&lt;/p&gt;&lt;p&gt;The ball glides on &lt;b&gt;static bearings&lt;/b&gt;, likely made from ceramic or ruby. These bearings don’t wear down, keeping movement smooth over time. However, they can sometimes suffer from &lt;b&gt;stiction&lt;/b&gt; (a tiny bit of initial resistance). A quick clean usually fixes this.&lt;/p&gt;&lt;p&gt;Some users replace the stock bearings with silicon nitride ones—an inexpensive material reportedly used in space shuttle bearings, which speaks to its quality. However, I haven&amp;#39;t seen the need to upgrade. The stock bearings have been reliably smooth.&lt;/p&gt;&lt;h4&gt;Button Layout &amp;amp; Feedback&lt;/h4&gt;&lt;p&gt;The SlimBlade Pro’s buttons aren’t individually cut out; instead, they are part of a continuous surface. Unfortunately, this means clicks may not register outside the &amp;quot;sweet spots,&amp;quot; though personally, I&amp;#39;ve found the tactile feedback reliable and consistent.&lt;/p&gt;&lt;h2&gt;Enter the Ploopy Adept&lt;/h2&gt;&lt;p&gt;With the SlimBlade Pro ticking all the right boxes, you’d think my trackball search was over. Not quite. Since I split my time between two locations, I needed a second device—and that’s where the &lt;i&gt;&lt;b&gt;Ploopy Adept&lt;/b&gt;&lt;/i&gt; comes in.&lt;/p&gt;&lt;p&gt;Yes, &lt;i&gt;Ploopy&lt;/i&gt; is a ridiculous name. But don’t let that fool you—this thing packs a punch.&lt;/p&gt;&lt;h3&gt;Where Do You Even Buy This?&lt;/h3&gt;&lt;p&gt;Unlike Kensington’s mass-market appeal, Ploopy is an &lt;b&gt;independent company&lt;/b&gt; that sells directly from their website. So you won&amp;#39;t find one of these bad boys at your local PC World—if that’s even still a thing? Options include preassembled models or &lt;b&gt;DIY kits&lt;/b&gt; for the brave (or budget-conscious).&lt;/p&gt;&lt;p&gt;Being a sucker for a project, I went with the kit. In hindsight, my &lt;b&gt;soldering skills were not ready for this challenge&lt;/b&gt;. But after some trial, error, and possibly minor burns, I got it working.&lt;/p&gt;&lt;h2&gt;How Does the Adept Compare to the SlimBlade?&lt;/h2&gt;&lt;p&gt;Now that I’ve spent some time using the Ploopy Adept, the big question is: how does it hold up against the Kensington SlimBlade Pro?&lt;/p&gt;&lt;h3&gt;Connectivity: Wired-Only Simplicity&lt;/h3&gt;&lt;p&gt;Unlike the &lt;b&gt;wireless&lt;/b&gt; SlimBlade, the Adept is strictly &lt;b&gt;wired&lt;/b&gt;. If a cable doesn’t bother you, it’s a non-issue. But if you’re chasing a clean desk setup, this could be a drawback.&lt;/p&gt;&lt;h3&gt;Build &amp;amp; Design&lt;/h3&gt;&lt;p&gt;Despite being &lt;b&gt;3D-printed&lt;/b&gt;, the Adept feels solid. Like the SlimBlade, it has an &lt;b&gt;ambidextrous top-ball&lt;/b&gt; design, but the &lt;b&gt;buttons are more compact&lt;/b&gt;. One small gripe—because the buttons sit so close to the ball, accidental nudges can shift the cursor when clicking. This can be frustrating when aiming at smaller on-screen targets, so I may have to experiment with different button mappings.&lt;/p&gt;&lt;h3&gt;Customisation: VIA Firmware vs. KensingtonWorks&lt;/h3&gt;&lt;p&gt;The Adept is powered by &lt;b&gt;VIA firmware&lt;/b&gt;, which offers &lt;b&gt;six programmable buttons and ten layers of customisation&lt;/b&gt;. Unlike KensingtonWorks, these settings are &lt;b&gt;stored directly on the device&lt;/b&gt;, meaning they travel with you. However, if you rely on app-specific shortcuts, &lt;b&gt;KensingtonWorks might still be the better option&lt;/b&gt;.&lt;/p&gt;&lt;h3&gt;Bearings: Static vs. Dynamic&lt;/h3&gt;&lt;p&gt;The biggest mechanical difference is in the bearings. The Adept uses &lt;b&gt;dynamic roller bearings&lt;/b&gt;, which initially felt scratchy compared to the SlimBlade’s smooth glide. But here’s the trade-off: &lt;b&gt;dynamic bearings eliminate stiction&lt;/b&gt;. This makes the Adept &lt;b&gt;better for pixel-perfect adjustments&lt;/b&gt;, even if it lacks the luxurious feel of the SlimBlade.&lt;/p&gt;&lt;h3&gt;Scrolling: Omnidirectional vs. Twist-to-Scroll&lt;/h3&gt;&lt;p&gt;The Adept’s omnidirectional scrolling allows movement in any direction, making it more intuitive than the SlimBlade, which requires modifier keys for horizontal scrolling. While I miss the clicky feedback of the SlimBlade, the Adept wins in overall usability.&lt;/p&gt;&lt;h3&gt;DPI &amp;amp; Polling Rate&lt;/h3&gt;&lt;p&gt;With a &lt;b&gt;1000Hz polling rate&lt;/b&gt;, the Adept is &lt;b&gt;snappier and more responsive&lt;/b&gt; than the SlimBlade. However, its &lt;b&gt;DPI is fixed&lt;/b&gt;, meaning no on-the-fly adjustments.&lt;/p&gt;&lt;h2&gt;Final Thoughts&lt;/h2&gt;&lt;p&gt;If you want &lt;b&gt;premium design, smooth bearings, and application-specific control&lt;/b&gt;, the &lt;b&gt;Kensington SlimBlade Pro&lt;/b&gt; is the better option. It feels high-end, the buttons are more forgiving, and the twist-to-scroll is addictive.&lt;/p&gt;&lt;p&gt;But if you value &lt;b&gt;customisation, precision, and responsiveness&lt;/b&gt;, the &lt;b&gt;Ploopy Adept&lt;/b&gt; might surprise you. It’s wired, a little rougher around the edges, but incredibly powerful.&lt;/p&gt;&lt;p&gt;At the end of the day, it’s about what fits your workflow. If you haven’t given a trackball a shot yet, it might be time to see what it can do for you.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Red... Green... Refactor!]]></title><link>https://www.antonyjones.org/blog/red-green-refactor</link><guid isPermaLink="false">https://www.antonyjones.org/blog/red-green-refactor</guid><pubDate>Tue, 21 May 2024 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Who&amp;#39;s ready to be taken on a journey through the world of Test-Driven Development?!&lt;/p&gt;&lt;p&gt;Alright, I am well aware of the lack of enthusiasm towards writing tests, which is why I deliberately obscured it from the title. However, &lt;b&gt;fear not!&lt;/b&gt; I will try my best to keep this light-hearted and engaging. And who knows? We might just transform your entire approach to software development along the way - &lt;b&gt;but no promises&lt;/b&gt;!&lt;/p&gt;&lt;h2&gt;Firstly, what is Test-Driven Development (TDD)?&lt;/h2&gt;&lt;p&gt;And what&amp;#39;s all this &lt;b&gt;red, green, refactor&lt;/b&gt; business? - These are the three main steps of TDD. Essentially, developers write their tests before writing the code itself. Sounds absurd, I know, but let me elaborate. Here are the basics:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Red &lt;/b&gt;- Write a small test that fails.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Green &lt;/b&gt;- Make the test pass quickly, using any means necessary.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Refactor &lt;/b&gt;- Clean up the code, eliminating any duplication introduced while making the test pass.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;TDD helps you get &lt;b&gt;quick feedback&lt;/b&gt; on your coding decisions and manage that feedback cycle effectively.&lt;/p&gt;&lt;h2&gt;Why TDD deserves your attention&lt;/h2&gt;&lt;p&gt;Alright, why should TDD matter to you, and what benefits does it offer? Well, since you asked, here are several key reasons:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;It enables you to &lt;b&gt;learn more from the code&lt;/b&gt;. If you rush to cobble together the first solution that comes to mind, you miss the chance to consider a second, better approach.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Improved code quality&lt;/b&gt;. TDD encourages writing more modular and maintainable code.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Tests are written earlier&lt;/b&gt; rather than relegated to an afterthought. Defects are detected and fixed early.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Reduced defect density in the code&lt;/b&gt;. - Fewer nasty surprises! 🕷️&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If the defect density decreases sufficiently, we can deliver shippable software with &lt;b&gt;new functionality more regularly&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Tests serve as documentation&lt;/b&gt;, providing a clear understanding of the code&amp;#39;s behaviour.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Greater confidence&lt;/b&gt;. Developers gain increased confidence in both the product and their ability to make changes to the code. With thorough testing, developers can confidently refactor code, knowing that tests will catch any regressions.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Alright, now that we&amp;#39;ve covered the basics, let&amp;#39;s dive into the example and apply what we&amp;#39;ve learned in practice...&lt;/p&gt;&lt;h2&gt;The fundamentals: A simple example of TDD&lt;/h2&gt;&lt;p&gt;The following example demonstrates the &lt;b&gt;TDD process&lt;/b&gt; for a pure function that returns the sound associated with a given animal. It takes a single parameter, `animal`, which is a string representing the name of the animal. &lt;/p&gt;&lt;p&gt;I&amp;#39;m sticking with &lt;b&gt;JavaScript&lt;/b&gt; for this example because it&amp;#39;s the language I&amp;#39;m most comfortable with, but don&amp;#39;t worry, this process is just as applicable in any other language. So, &lt;b&gt;backend devs&lt;/b&gt;, you&amp;#39;re not off the hook that easily. 😉&lt;/p&gt;&lt;h3&gt;Step 1: Write a small test that fails (Red)&lt;/h3&gt;&lt;p&gt;First, let&amp;#39;s prepare to write a test for the `getAnimalSound` function. Since the function doesn&amp;#39;t exist yet, the test won&amp;#39;t even run, let alone fail. But that&amp;#39;s exactly what we want at this stage. To begin, create a new file called `getAnimalSound.test.js`.&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getAnimalSound.test.js

import { getAnimalSound } from &amp;#39;./getAnimalSound&amp;#39;;

describe(&amp;#39;getAnimalSound&amp;#39;, () =&amp;gt; {
	test(&amp;#39;should return the noise of the provided animal&amp;#39;, () =&amp;gt; {
		expect(getAnimalSound(&amp;#39;dog&amp;#39;)).toBe(&amp;#39;Woof!&amp;#39;);
	});
});&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Step 2: Make the test pass quickly (Green)&lt;/h3&gt;&lt;p&gt;Now, let&amp;#39;s create the `getAnimalSound` function and make the test &lt;b&gt;pass quickly&lt;/b&gt;, even if it means we commit a few coding sins in the process.&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getAnimalSound.js

export function getAnimalSound(animal) {
	return &amp;#39;Woof!&amp;#39;;
}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Alright, so we may have taken a bit of a shortcut in this step. While we successfully passed our test, we&amp;#39;re now faced with a situation where providing any other animal could lead to unexpected behavior, such as a cat barking, for example. Not exactly ideal, is it? But we still have one more step to go...&lt;/p&gt;&lt;h3&gt;Step 3: Clean up the code and eliminate duplication (Refactor)&lt;/h3&gt;&lt;p&gt;So, let&amp;#39;s talk about &lt;b&gt;duplication&lt;/b&gt;. Typically, duplication occurs between two or more pieces of code, but in our case, it&amp;#39;s between the &lt;b&gt;data in the code&lt;/b&gt; and the &lt;b&gt;data in the test&lt;/b&gt;. You&amp;#39;ll notice that &amp;quot;Woof!&amp;quot; appears in both places now. Let&amp;#39;s address this.&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getAnimalSound.js

export function getAnimalSound(animal) {
	switch (animal) {
		case &amp;#39;dog&amp;#39;:
			return &amp;#39;Woof!&amp;#39;;
		default:
			return &amp;quot;Meow?&amp;quot;;
	}
}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;I know what you&amp;#39;re thinking; &amp;quot;Woof!&amp;quot; still occurs in the reworked function. However, the crucial point is that the &lt;b&gt;duplication between the test and the function&lt;/b&gt; has been eliminated. In the reworked function, &amp;quot;Woof!&amp;quot; is dynamically determined based on the input animal, rather than being hardcoded as the return value for all cases.&lt;/p&gt;&lt;p&gt;So, there you have it. You&amp;#39;re now officially a &lt;b&gt;TDD expert!&lt;/b&gt; 🥳 How do you feel? I know this example might seem overly simplified, but it&amp;#39;s meant to illustrate the core process. As we know, real-world scenarios are rarely this straightforward. Let&amp;#39;s move on to a more complex scenario...&lt;/p&gt;&lt;h2&gt;Beyond the basics: Exploring a more advanced example&lt;/h2&gt;&lt;p&gt;For our next example, we&amp;#39;ll write a function to compute the total cost of items in a shopping cart, including taxes. Yes, it&amp;#39;s still fairly simple, but unlike the first example, it provides enough complexity to demonstrate the iterative nature of the process. &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Tip: You can make the steps as granular as you like, finding the right balance for the size of each step. &lt;b&gt;TDD is flexible&lt;/b&gt; in this regard.&lt;/p&gt;&lt;/blockquote&gt;&lt;h3&gt;Step 1: Write a test (Red)&lt;/h3&gt;&lt;p&gt;When writing a test, we imagine the best interface for our operation. It&amp;#39;s better to start with the ideal API and adjust as needed, rather than making things complicated from the start.&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getCartTotal.test.js

import { getCartTotal } from &amp;#39;./getCartTotal&amp;#39;;

describe(&amp;#39;getCartTotal&amp;#39;, () =&amp;gt; {
	test(&amp;#39;should return the total cost for a cart containing one item&amp;#39;, () =&amp;gt; {
		const cart = [{ name: &amp;#39;Rubber Chicken&amp;#39;, price: 10 }];
		const total = getCartTotal(cart);
		expect(total).toBe(10);
	});
});&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Step 2: Make it run (Green)&lt;/h3&gt;&lt;p&gt;Getting the test to &lt;b&gt;pass quickly&lt;/b&gt; is paramount. If a quick and simple solution is evident, implement it immediately. If it will take a minute or two, make a note and return promptly to getting the test to pass within seconds. This is our &lt;b&gt;primary objective&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;There are several strategies to achieve a quick test pass, but two are commonly used:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Faking it:&lt;/b&gt; Begin by returning a constant and gradually replace it with variables until the real code is implemented. This was demonstrated in our first example.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Employing an obvious implementation:&lt;/b&gt; If the solution is straightforward, type the actual implementation right away. This is what we will demonstrate now.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;code&gt;// getCartTotal.js

export function getCartTotal(cart) {
	return cart[0].price;
}&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Step 3: Make it right (Refactor)&lt;/h3&gt;&lt;p&gt;While our test passes with the &amp;quot;actual implementation&amp;quot;, we identify a &lt;b&gt;design objection&lt;/b&gt;: our function lacks support for handling multiple items. However, we don&amp;#39;t write new code unless a test fails. To address this, we write an &lt;b&gt;additional test&lt;/b&gt; to cover the scenario.&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getCartTotal.test.js

test(&amp;#39;should return the total cost for a cart containing multiple items&amp;#39;, () =&amp;gt; {
	const cart = [
		{ name: &amp;#39;Rubber Chicken&amp;#39;, price: 10 },
		{ name: &amp;#39;Snorkel&amp;#39;, price: 10 },
		{ name: &amp;#39;Fluffy Handcuffs&amp;#39;, price: 10 }
	];
	const total = getCartTotal(cart);
	expect(total).toBe(30);
});&lt;/code&gt;&lt;/p&gt;&lt;p&gt;With the new test in place, we &lt;b&gt;refactor&lt;/b&gt; the implementation to support handling multiple items.&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getCartTotal.js

export function getCartTotal(cart) {
	return cart.reduce((total, item) =&amp;gt; total + item.price, 0);
}&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Step 4: Write a new test (Red)&lt;/h3&gt;&lt;p&gt;We identify another design objection: our function doesn&amp;#39;t support taxes. As you might have guessed, we write a new test to address this.&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getCartTotal.test.js

test(&amp;#39;should return the total cost including taxes&amp;#39;, () =&amp;gt; {
	const tax = 0.1;
	const cart = [{ name: &amp;#39;Metallica Tickets&amp;#39;, price: 100 }];
	const total = getCartTotal(cart, tax);
	expect(total).toBe(110);
});&lt;/code&gt;&lt;/p&gt;&lt;p&gt;During the TDD process, it&amp;#39;s common practice to translate &lt;b&gt;design objections&lt;/b&gt;, or &lt;b&gt;side effects&lt;/b&gt;, into &lt;b&gt;new tests&lt;/b&gt;. This iterative approach reflects the organic nature of system design through TDD, where running code continuously informs decisions.&lt;/p&gt;&lt;h3&gt;Step 5: Make it run (Green)&lt;/h3&gt;&lt;p&gt;Once again, we get our test to pass:&lt;/p&gt;&lt;p&gt;&lt;code&gt;// getCartTotal.js

export function getCartTotal(cart, taxRate) {
	const subtotal = cart.reduce((total, item) =&amp;gt; total + item.price, 0);
	const tax = taxRate * subtotal;
	return subtotal + tax;
}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;After our new test passes, we transition back to the &lt;b&gt;refactor step&lt;/b&gt; to ensure the code remains &lt;b&gt;clean&lt;/b&gt; and &lt;b&gt;duplication-free&lt;/b&gt;. Any additional tests are added as new design objections arise. For example, we might consider how the function should handle an empty cart.&lt;/p&gt;&lt;p&gt;And so, the cycle continues. This is the iterative nature of the process. I hope, through these examples, you can grasp the mechanics of Test-Driven Development.&lt;/p&gt;&lt;h2&gt;Some useful tips and strategies for effective TDD&lt;/h2&gt;&lt;h3&gt;Writing tests&lt;/h3&gt;&lt;p&gt;You should never be more than one change away from green. In other words, avoid writing tests in bulk. As you get tests passing, the implementation will naturally suggest &lt;b&gt;new tests&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;When writing tests, &lt;b&gt;begin with the assertions&lt;/b&gt;. Tests are easier to write when you already know the expected outcome.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Envision the optimal interface&lt;/b&gt; for the operation. It&amp;#39;s better to begin with the ideal API and make adjustments as necessary, rather than complicating things from the start.&lt;/p&gt;&lt;h3&gt;Getting to green&lt;/h3&gt;&lt;p&gt;At this point in time, &lt;b&gt;passing tests swiftly&lt;/b&gt; is our primary goal. Outlined here are effective strategies for achieving this goal promptly.&lt;/p&gt;&lt;h4&gt;Fake it &amp;#39;til you make it&lt;/h4&gt;&lt;p&gt;Start by returning a constant, then incrementally replace it with variables until the actual code is implemented. But why do something you know you&amp;#39;ll have to discard later? Maybe it&amp;#39;s the placebo effect, but it just feels good seeing those green tests.&lt;/p&gt;&lt;h4&gt;Obvious implementation&lt;/h4&gt;&lt;p&gt;If you know what to type and you can &lt;b&gt;do it quickly&lt;/b&gt;, then do it. But remember to maintain the red-green-refactor rhythm. It&amp;#39;s like headbanging to Slayer, the pace is faster, but be prepared to revert back to Metallica if your neck needs a break.&lt;/p&gt;&lt;h4&gt;One to many&lt;/h4&gt;&lt;p&gt;How do I implement an operation that works with collections? Begin by implementing it without the collection first, then adapt it to work with collections. In other words, &lt;b&gt;start with a single value&lt;/b&gt; and then progress to using the collection.&lt;/p&gt;&lt;h4&gt;Triangulation&lt;/h4&gt;&lt;p&gt;Instead of making assumptions solely based on the initial test case, you &lt;b&gt;introduce additional tests&lt;/b&gt; with varied input values or scenarios. These extra tests serve to &amp;quot;triangulate&amp;quot; the code&amp;#39;s behavior by verifying it in multiple situations, reducing the chance of false positives.&lt;/p&gt;&lt;h3&gt;Refactoring&lt;/h3&gt;&lt;p&gt;You will often implement TDD in code that lacks adequate tests. When there aren&amp;#39;t enough tests, you&amp;#39;ll encounter refactorings that aren&amp;#39;t covered. This means you could make a mistake during refactoring, and all tests would still pass. In such cases, &lt;b&gt;write the tests you wish you had&lt;/b&gt;. Otherwise, you risk eventually breaking something while refactoring. &lt;/p&gt;&lt;h2&gt;Bonus feature: Enhancing the TDD experience with Jest&amp;#39;s watch mode&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;If &lt;i&gt;Jest&lt;/i&gt; isn&amp;#39;t part of your toolset, feel free to &lt;b&gt;skip this section&lt;/b&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Jest&amp;#39;s &lt;i&gt;watch mode&lt;/i&gt; can be a powerful ally when integrated into the TDD workflow. Here’s how you might find it useful:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Immediate feedback:&lt;/b&gt; Automatically re-runs tests upon file changes, delivering immediate feedback on the success or failure of your code.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Efficient workflow:&lt;/b&gt; Removes the necessity of manually running tests after every modification, streamlining the TDD process.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Focused testing:&lt;/b&gt; Lets you filter by file or test name, so you can focus on the tests that matter most to your current work.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Enhanced productivity:&lt;/b&gt; Jest&amp;#39;s watch mode keeps you focused and allows you to maintain momentum by offering real-time feedback and reducing the need for manual test execution.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To &lt;b&gt;enable watch mode&lt;/b&gt; in Jest, you can run the command `npx jest --watch` in your terminal. &lt;/p&gt;&lt;h2&gt;Wrapping things up&lt;/h2&gt;&lt;p&gt;So, what are my thoughts on &lt;b&gt;Test-Driven Development&lt;/b&gt;? Well, while TDD is still relatively new to me and I&amp;#39;m far from being an expert, I&amp;#39;ve enjoyed the learning process. Sure, there&amp;#39;s a bit of a &lt;b&gt;learning curve&lt;/b&gt;, but I believe that with time, I&amp;#39;ll come to appreciate the benefits.&lt;/p&gt;&lt;p&gt;TDD proves practical not only for implementing new features but also for making changes to existing code. By ensuring thorough testing of both new features and code modifications, it promotes the creation of &lt;b&gt;reliable&lt;/b&gt; and &lt;b&gt;well-functioning code&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Finally, TDD encourages a different approach to &lt;b&gt;code design&lt;/b&gt;, one that may lead you down paths you might not have considered otherwise. It&amp;#39;s an interesting experiment, if nothing more. However, I think that if you give it a try, you&amp;#39;ll soon begin to see its benefits and be able to add another string to your bow.&lt;/p&gt;&lt;h2&gt;Further reading&lt;/h2&gt;&lt;p&gt;Shoutout to &lt;b&gt;Kent Beck&amp;#39;s book, &lt;/b&gt;&lt;i&gt;&lt;b&gt;Test-Driven Development by Example&lt;/b&gt;&lt;/i&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>