<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Max Patiiuk</title>
    <description>The latest articles on DEV Community by Max Patiiuk (@maxpatiiuk).</description>
    <link>https://dev.to/maxpatiiuk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F988415%2F4d282aac-92c3-4de9-9e4e-e9641a785044.jpg</url>
      <title>DEV Community: Max Patiiuk</title>
      <link>https://dev.to/maxpatiiuk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxpatiiuk"/>
    <language>en</language>
    <item>
      <title>AI-generated code lacks common sense</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sun, 25 Jan 2026 18:09:08 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/ai-generated-code-lacks-common-sense-29bo</link>
      <guid>https://dev.to/maxpatiiuk/ai-generated-code-lacks-common-sense-29bo</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TLDR 🙇:&lt;/p&gt;

&lt;p&gt;AI-generated code lacks common sense, especially senior-level. Examples of missing behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before providing a solution, ask whether the problem should be solved at all.&lt;/li&gt;
&lt;li&gt;Know when to ask for more context if it is needed to give a better solution.&lt;/li&gt;
&lt;li&gt;Research if there are existing utilities or dependencies that can be reused.&lt;/li&gt;
&lt;li&gt;Consider tradeoffs before adding a new dependency. Consider dev vs runtime deps, security, licensing, and bundle size.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, it lacks elegancy. The LLM-generated code might work (or might be subtly wrong), but it will rarely be the most optimal, performant, maintainable, or pretty code. It will write more code than needed, while failing to handle edge cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What you can do about these limitations
&lt;/h2&gt;

&lt;p&gt;You can improve the output with prompts and context, to a point.&lt;/p&gt;

&lt;p&gt;If asking the model to "Critique this approach before writing code", the model becomes too pushy and comes up with trivial objections.&lt;/p&gt;

&lt;p&gt;If asking for "use 80/20 best judgement", Gemini starts quoting "80/20" to justify every poor decision it makes.&lt;/p&gt;

&lt;p&gt;I also added "senior level" and "type 1 civilization" to the personal prompt, and Gemini started quoting them even when not appropriate:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use Option 1 (&lt;code&gt;import type&lt;/code&gt;). It allows you to maintain the "Class" source of truth (which Web Components require) but strictly prevents accidental bundling of the implementation in consumer code—keeping your bundles slim for that &lt;strong&gt;Type 1 civilization&lt;/strong&gt; efficiency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;More examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org/docs/latest/api/fs.html#fspromiseswatchfilename-options" rel="noopener noreferrer"&gt;Node's fs watch&lt;/a&gt; has a &lt;code&gt;recursive: true&lt;/code&gt; option. Till &lt;a href="https://github.com/nodejs/node/issues/36005" rel="noopener noreferrer"&gt;3 years ago&lt;/a&gt;, that option was not available on Linux. The LLM used that as a reason to suggest continuing to use &lt;a href="https://www.npmjs.com/package/chokidar" rel="noopener noreferrer"&gt;chokidar&lt;/a&gt;. The limitation was resolved 3 years ago, but the model didn't pick that up.&lt;/li&gt;
&lt;li&gt;Vite 8 is swapping Rollup for Rolldown (Rust-powered). To reduce cross-language communication overhead, &lt;a href="https://rolldown.rs/apis/plugin-api/hook-filters" rel="noopener noreferrer"&gt;plugin hook filters&lt;/a&gt; were introduced as a recommended optimization. Rollup also added support a year ago. The model fails to use plugin hook filters unless explicitly prompted. As an engineer, you still need to follow the latest ecosystem developments, because the model won't do so for you.&lt;/li&gt;
&lt;li&gt;TypeScript has a low-level compiler API. The docs for it are virtually non-existent - the source code is the only "doc" (like the 50k loc &lt;a href="https://github.com/microsoft/TypeScript/blob/main/src/compiler/checker.ts" rel="noopener noreferrer"&gt;checker.ts&lt;/a&gt;). 99% of the users of TypeScript just use the language server (in VSCode) and the CLI (as part of the build). There are relatively few people writing frameworks and extractors that directly use TypeScript's APIs. For tasks like "transform code &lt;strong&gt;with a source map&lt;/strong&gt;", you need access to undocumented APIs (they don't appear in public types or docs). The LLM is helpless for such low-level tasks. It can't tell you why &lt;code&gt;const a = "a";&lt;/code&gt; and &lt;code&gt;const a = "a" as const;&lt;/code&gt; have the same type &lt;code&gt;1&lt;/code&gt; but &lt;a href="https://www.typescriptlang.org/play/?#code/N4KABGDGD2B2DOAXMBDMBeMAiFWDc4UcSYARhtqfiIQPS1gAqAFgKZiICeADu9AGaowAS3jZcEQgAZUYgK6wA1rGgB3WLI49WAofBSJR-YazE5qEGSnlKV6zebD7D8Y6a29dKAoUgAbazEAQVAICG4AJ2hEVkgYgBMwSOheCK4AfgAuDx1BFAAfHN1SQgBfXwD4MQAhMFYADxjYeODQsPowAE1WRAAaMGqAOmTUrjAAcx6xLl5E6zAAAyQI4VhxhcJwqJi41kToADdWCJX49hHjscxvTaS5UgAKAEo2sI5mUWGo0c50UgI3uUIOVyiA2jAEMg0JhHPMIUgAURIWQKFgqJp4YhEdJNAplGoNPMZrk9AYjCYzLhEVYbPj7PNHM5ye5iV5Ef5AmAQrdkjsEklvpdOFkinlCqzBCVgRVObUGk0WlzXmAOkMLmlOCJEgtzAsRIIFig9cwUNq4cREBs3rzYvzDsdTudBRqKDdrfdnsqIIgPvAvikhX9EdLpaUgA" rel="noopener noreferrer"&gt;different type checking behavior&lt;/a&gt; when used in &lt;code&gt;class A { property = a }&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are writing React+Tailwind front ends, you are in the golden zone of "a ton of training data". For anyone building a framework using low-level APIs, or using an in-house compiler, the model performance degrades sharply.&lt;/p&gt;

&lt;p&gt;Better prompts and context can only go so far. We still need models to become smarter, faster, and more up-to-date in their training.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about vibe coding?
&lt;/h2&gt;

&lt;p&gt;There are too many articles online about successfully vibe coding applications using armies of agents running in parallel. However, those posts describe a limited use case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They create greenfield, small apps. Often for personal use or throwaway virality.&lt;/li&gt;
&lt;li&gt;The code maintainability, security, and efficiency are not mentioned at all. Some pride themselves on not even looking at the output code. Or they hope a smarter LLM will come later and fix the tech debt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Non-code performance is better
&lt;/h2&gt;

&lt;p&gt;I noticed the lack of common sense and elegance in the code output because I have some experience in coding. I don't have much experience in medicine, taxes, law, finance, or social rules. The performance of models on these non-code tasks seems more impressive to me.&lt;/p&gt;

&lt;p&gt;It is likely that my skills in these areas are already below the LLM's level, so I fail to find issues in the LLM's output. If an expert in law reads the same output, they will find it similarly unimpressive. This is called &lt;a href="https://www.epsilontheory.com/gell-mann-amnesia/" rel="noopener noreferrer"&gt;Gell-Mann Amnesia&lt;/a&gt; effect.&lt;/p&gt;

&lt;p&gt;Additional constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In law and medicine, the output can be "plausible" - hallucinations are hard to spot. A bad health advice may become visible two decades later. In coding, if the syntax is wrong or a non-existent API is used, compiler errors immediately.&lt;/li&gt;
&lt;li&gt;Law and medicine involve a lot of "Find the precedent," "Summarize the symptoms". LLMs are very good at text summarization.&lt;/li&gt;
&lt;li&gt;Law and medicine require a safety bias (hedge, cite sources). Whereas when coding, defensive programming is a code smell (handling non-existent cases, relying on runtime type checking).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My personal workflow
&lt;/h2&gt;

&lt;p&gt;The "yolo vibe coding" does not produce satisfactory results for me. I found more limited uses for LLMs:&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;GitHub Copilot&lt;/strong&gt; for single-line autocomplete and next edit predictions. For small edits, it does very well at looking at surrounding code to infer your intent and desired code style.&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;GitHub Copilot Chat&lt;/strong&gt; for quick explanation of errors, arkane shell syntax, and vibe coding throwaway scripts.&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;Gemini 3 Pro&lt;/strong&gt; or &lt;strong&gt;GPT-5.2&lt;/strong&gt; for researching available options, getting feedback, and brainstorming. My favorite use case: write a several-page-long description of the problem, the context, and the solutions I am considering. The very act of writing down solidifies my thoughts. Then, send this to the LLM asking for "feedback, suggestions, pros/cons analysis". It may come up with a new solution, or give more reasons to go with one of my proposed solutions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The context window of Gemini is impressive. I downloaded &lt;a href="https://dev.to/maxpatiiuk/how-i-use-self-reflection-to-stay-on-track-daily-weekly-monthly-and-yearly-1n1f"&gt;my journal for the entire year&lt;/a&gt;, and Gemini created a summary of yearly accomplishments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Use &lt;a href="https://gemini.google/overview/gemini-in-chrome/" rel="noopener noreferrer"&gt;&lt;strong&gt;Gemini&lt;/strong&gt; in Chrome&lt;/a&gt; for a quick summary of a webpage to decide if I want to invest time into reading it. Most articles aren't worth reading.&lt;/p&gt;

&lt;p&gt;Use &lt;a href="https://github.com/maxpatiiuk/text-hoarder?tab=readme-ov-file#text-hoarder" rel="noopener noreferrer"&gt;Text Hoarder&lt;/a&gt; (an extension I built) to save purified articles as .md files. Once a year, I run &lt;a href="https://huggingface.co/spaces/hexgrad/Kokoro-TTS" rel="noopener noreferrer"&gt;Kokoro TTS&lt;/a&gt; on those .md files to convert them to speech. This way I canlisten to these articles at high speed while walking. I save 3k articles per year this way, which take 4 days to filter through and 2 months to listen to.&lt;/p&gt;

&lt;h2&gt;
  
  
  State of the art performance per category
&lt;/h2&gt;

&lt;p&gt;From my personal experience, this is the state of the art of LLMs in various domains:&lt;/p&gt;

&lt;p&gt;Coding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax:&lt;/strong&gt; LLMs are superhuman - they know every language in the world.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elegancy:&lt;/strong&gt; coding bootcamp level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Common sense:&lt;/strong&gt; reasoning models with sufficient context can achieve passable results. Though I still see models fixing a bug by deleting the failing test.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Web browsing:&lt;/strong&gt; struggles with simple tasks like scrolling and pop-up ads. For reliability, you have to use the API directly. However, many pages don't have APIs, and each API is different - it gets complex fast. A task as simple as "summarize emails in my inbox" is tricky because you need a way to inject email content &amp;amp; context into the model (on the fly or async), and render the summary on top of the existing email client's UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;World model:&lt;/strong&gt; smart undergraduate. It read everything; experienced nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Social &amp;amp; Emotional intelligence:&lt;/strong&gt; superhuman? Infinite patience, RLHF-trained politeness, de-escalation, and empathy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speech generation:&lt;/strong&gt; superhuman. You can generate perfect speech on-device using &lt;a href="https://huggingface.co/spaces/hexgrad/Kokoro-TTS" rel="noopener noreferrer"&gt;Kokoro&lt;/a&gt;. State-of-the-art commercial models go beyond perfect speech and are improving emotions, accents, and pacing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speech recognition:&lt;/strong&gt; Better than human on "clean" data (audiobooks). Worse than human on real-world data due to lack of context - if the speaker's name is on the slide, a human listener will connect the dots and recognize that name in speech. &lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts on this. How does your experience with LLMs compare?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>typescript</category>
    </item>
    <item>
      <title>How I Use Self-Reflection to Stay on Track Daily, Weekly, Monthly, and Yearly</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Mon, 30 Jun 2025 01:33:49 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/how-i-use-self-reflection-to-stay-on-track-daily-weekly-monthly-and-yearly-1n1f</link>
      <guid>https://dev.to/maxpatiiuk/how-i-use-self-reflection-to-stay-on-track-daily-weekly-monthly-and-yearly-1n1f</guid>
      <description>&lt;p&gt;If you’re not reflecting, you’re just reacting, letting others put things on your calendar.&lt;/p&gt;

&lt;p&gt;Self-reflection is critical for ensuring you spend your time on things that align with your goals, without burning out in the process. You can learn things about yourself, discover areas for improvement, and set goals for the future.&lt;/p&gt;

&lt;p&gt;This post describes my process for daily, weekly, monthly, and yearly reflection. Reflection is a deeply personal process. This post is meant as an inspiration - you can adapt the process to your own needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Daily reflection
&lt;/h2&gt;

&lt;p&gt;Daily reflection is done by writing down the things I have on my mind and tracking my mood. This kind of journaling is helpful for expressing your emotions in a safe private space. I have a reminder set for each morning to do this.&lt;/p&gt;

&lt;p&gt;As part of daily journaling, I create an all-day calendar event, whose name is a number from 1 to 10 to summarize in one number how I am feeling (both mentally and physically). In the event description, I reflect on what I accomplished the previous day, how I am feeling, what is bothering me, or what I am excited to work on. I don't have structure and don't force myself to write a specific length - just do whatever feels right.&lt;/p&gt;

&lt;p&gt;Over time, you will learn more about yourself: how a week of high mood is often followed by a week of low mood, or how, despite positive or negative things happening, the mood quickly goes back to the 7-8 baseline.&lt;/p&gt;

&lt;p&gt;The all-day event is helpful as it stays at the top of the calendar screen, making it easy to look back in time and see how I felt on a particular day. That also brings us to the next point - weekly reflection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjai9t0j6cgecr4j5vhq9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjai9t0j6cgecr4j5vhq9.jpg" alt="The all-day reflection event for each day of the week" width="800" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Weekly reflection
&lt;/h2&gt;

&lt;p&gt;While journaling is great for daily reflection, I also take the time to do weekly reflection to look back on how I spent my week and how I want to improve in the following weeks. Here it helps to have a bit more structure to ensure you cover the important topics. &lt;/p&gt;

&lt;p&gt;I divide it into personal reflection and work reflection:&lt;/p&gt;

&lt;h3&gt;
  
  
  Weekly personal reflection
&lt;/h3&gt;

&lt;p&gt;I set soft-skills and hard-skills goals for the year. To ensure I stay on track, I reflect on my progress on them each week. Some of my goals for this year (a few redacted for privacy):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Career goals:

&lt;ul&gt;
&lt;li&gt;Write great technical documentation for soft influence

&lt;ul&gt;
&lt;li&gt;Patterns, designs, best practices&lt;/li&gt;
&lt;li&gt;Contributing and high-level design decisions&lt;/li&gt;
&lt;li&gt;Create a changelog to improve visibility&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Deliver great on &lt;code&gt;&amp;lt;my current project&amp;gt;&lt;/code&gt; - do this ASAP to unblock teammates and get to the next large project faster&lt;/li&gt;

&lt;li&gt;Prepare for the planetary presentation early next year&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;Personal goals:

&lt;ul&gt;
&lt;li&gt;Exercise more (1hr/day → 2hr) or exercise smarter&lt;/li&gt;
&lt;li&gt;Soft skills

&lt;ul&gt;
&lt;li&gt;Read 5 books on the subject and apply &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Write down blog posts based on areas I have experience in (list of post ideas: &lt;code&gt;&amp;lt;future post ideas&amp;gt;&lt;/code&gt;)&lt;/li&gt;

&lt;li&gt;Learn English

&lt;ul&gt;
&lt;li&gt;Re-learn grammar, spelling&lt;/li&gt;
&lt;li&gt;Improve accent&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If I don't make progress on some of them for a few weeks, I need to course-correct or adjust the goal.&lt;/p&gt;

&lt;p&gt;The best way to stay on track is to put them on your calendar! My examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schedule daily exercise time. Also, schedule weekly "exercise: research" time where I reflect on what exercise I am doing, and what I can do to improve it (like varying body focus areas, or adding new exercises to target under-trained areas).&lt;/li&gt;
&lt;li&gt;Buy books on soft skills and add them to my queue.&lt;/li&gt;
&lt;li&gt;Schedule daily time to improve English pronunciation.&lt;/li&gt;
&lt;li&gt;Schedule monthly time to write a blog post.&lt;/li&gt;
&lt;li&gt;At the start of the weekend, I have a reminder to plan what tasks I want to accomplish this weekend: catch up with family, chores, learning something new, personal projects, or just a productive rest time. Though most of the time I just choose to tackle some work project to catch up and get ahead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Weekly work reflection
&lt;/h3&gt;

&lt;p&gt;Great prompt questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What tasks I accomplished for my level of seniority?&lt;/li&gt;
&lt;li&gt;What tasks I accomplished that grow me to the next level of seniority?&lt;/li&gt;
&lt;li&gt;Then, for each of the growth areas I set to get me to the next level of seniority, write an example of what I accomplished for each of them. My current topics:

&lt;ul&gt;
&lt;li&gt;Prioritize. Don't waste time on little impact things.&lt;/li&gt;
&lt;li&gt;Teach people to solve a problem rather than solve it for them.&lt;/li&gt;
&lt;li&gt;Deliver tailored communication for changes impacting outside my team.&lt;/li&gt;
&lt;li&gt;Don't sacrifice team velocity when prioritizing personal velocity.&lt;/li&gt;
&lt;li&gt;Prioritize deep technical projects over shallow work. Automate away shallow where possible.&lt;/li&gt;
&lt;li&gt;Keep track of important internal/external industry changes and anticipate them, but don't spend too much time on this.&lt;/li&gt;
&lt;li&gt;Ask for input on &lt;code&gt;&amp;lt;my project name&amp;gt;&lt;/code&gt; decisions before proceeding (multiple brains is better, and helps with buy-in).&lt;/li&gt;
&lt;li&gt;Mentor/coordinate others.&lt;/li&gt;
&lt;li&gt;Praise others publicly.&lt;/li&gt;
&lt;li&gt;Learn company politics more.&lt;/li&gt;
&lt;li&gt;Continue rapidly gaining more experience.&lt;/li&gt;
&lt;li&gt;What processes I improved/automated/documented? How I made &lt;code&gt;&amp;lt;my project name&amp;gt;&lt;/code&gt; more accessible to others?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;How much enjoyment and fulfillment did I receive? How can I increase that? What areas am I passionate about?&lt;/li&gt;

&lt;li&gt;What mistakes did I make and what did I learn from them?&lt;/li&gt;

&lt;li&gt;Am I behind on any task? Should I notify any team member about that?&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;These are amazing for ensuring I work toward the career goals I set, I work on the tasks I enjoy, and I keep track of the tasks that might be due soon. The answers to these questions are then the basis for a weekly report to my manager and also are a starting point for a yearly review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monthly reflection
&lt;/h2&gt;

&lt;p&gt;Given that I already answer a lot of questions each week, monthly reflection only adds a few more questions - mainly things that require a bit longer time horizon:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Look back at the calendar for the past month and reflect on my common activities.

&lt;ul&gt;
&lt;li&gt;Which were the most important/impactful and should be prioritized/done more of?&lt;/li&gt;
&lt;li&gt;Which were negative and should be reduced/eliminated?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;What is the status of my goals/projects?&lt;/li&gt;

&lt;li&gt;What can I do to reduce task-switching/context-switching - it's decreasing productivity&lt;/li&gt;

&lt;li&gt;What should I do to buy more time?&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Yearly reflection
&lt;/h2&gt;

&lt;p&gt;Yearly reflection is the time to reflect on the past year, and set the goals for the next 1 year, 5 years, 10 years, and 20 years. Of course, the further away you go, the less specificity you can have and the more often the goals will change, but it is still important to have long-term goals so that you can remind yourself each morning what you are working toward.&lt;/p&gt;

&lt;p&gt;When I am feeling down, I take time to look at the long-term goals I set to remind myself what this is all for.&lt;/p&gt;

&lt;p&gt;"Yearly reflection" does not mean you have to do it on January 1st. Do what aligns with how you like to think about yourself. I prefer to plan on my birthday. This way I can see how much I accomplished by a certain age, and what I want to accomplish by a given age. This helps because while a year number like "2032" is abstract, the "30th birthday" is a much more concrete and powerful number - makes it much easier to visualize what you want to accomplish by that date.&lt;/p&gt;

&lt;p&gt;Yearly reflection is the most important one - and that is why I am spending two full days (entire weekend) on it - well worth it. Think of it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;yearly reflection is the time you decide what the next year will be spent working on - it is better to spend 2 days ensuring you work on the right goals, rather than wasting an entire year working on the wrong things.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many great articles online on what to do during the yearly reflection. I improve the process each year. Here is my current process:&lt;/p&gt;

&lt;h3&gt;
  
  
  Review the calendar for the past year
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Identify what I spent the most time on. My &lt;a href="https://dev.to/maxpatiiuk/how-i-tracked-every-hour-of-my-life-for-4-years-and-what-you-can-learn-from-it-4pic"&gt;hyper-scheduling habit and tools for analyzing where the time went&lt;/a&gt; help a lot with this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0tkkciiz0lulga4kqqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0tkkciiz0lulga4kqqb.png" alt="Analyzing yearly time usage" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read daily, weekly, and monthly reflections.

&lt;ul&gt;
&lt;li&gt;Based on these reflections, as well as weekly updates sent to my manager, make a list of accomplishments to quote during the yearly review process at work.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Sort the activities I did by their impact.&lt;/li&gt;

&lt;li&gt;Take all "positive" impact activities and schedule more of them. Put them on the calendar, or on the weekly reflection list - ensure they don't get crowded out by other tasks.&lt;/li&gt;

&lt;li&gt;Take "negative" and reduce/eliminate them. Don't let others pressure you into wasting your time on these.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Life timeline
&lt;/h3&gt;

&lt;p&gt;Keep a timeline of significant personal events during the year - I keep it in a spreadsheet. This makes it easy to reflect at the past 10 years down the line. Think about it like this: if you were to write an autobiography in 40 years, what information would be interesting and important?&lt;/p&gt;

&lt;h3&gt;
  
  
  Wheel of Life exercise
&lt;/h3&gt;

&lt;p&gt;Do "The Wheel of Life" exercise. You can find templates online. I like to do it using a spreadsheet.&lt;/p&gt;

&lt;p&gt;Identify sections of your life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;social

&lt;ul&gt;
&lt;li&gt;family&lt;/li&gt;
&lt;li&gt;best friends&lt;/li&gt;
&lt;li&gt;friends&lt;/li&gt;
&lt;li&gt;colleagues&lt;/li&gt;
&lt;li&gt;community&lt;/li&gt;
&lt;li&gt;relationships &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;career

&lt;ul&gt;
&lt;li&gt;work subject&lt;/li&gt;
&lt;li&gt;job environment&lt;/li&gt;
&lt;li&gt;deep work&lt;/li&gt;
&lt;li&gt;responsibilities, title&lt;/li&gt;
&lt;li&gt;contribution, impact&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;finances

&lt;ul&gt;
&lt;li&gt;assets, financial security&lt;/li&gt;
&lt;li&gt;lack of debt&lt;/li&gt;
&lt;li&gt;organization&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;emotional health

&lt;ul&gt;
&lt;li&gt;level of motivation&lt;/li&gt;
&lt;li&gt;level of optimism about the future&lt;/li&gt;
&lt;li&gt;lack of burnout&lt;/li&gt;
&lt;li&gt;lack of stress&lt;/li&gt;
&lt;li&gt;feeling about life&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;physical health

&lt;ul&gt;
&lt;li&gt;exercise&lt;/li&gt;
&lt;li&gt;level of energy&lt;/li&gt;
&lt;li&gt;nutrition&lt;/li&gt;
&lt;li&gt;sleep&lt;/li&gt;
&lt;li&gt;health&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;recreation

&lt;ul&gt;
&lt;li&gt;positive hobbies&lt;/li&gt;
&lt;li&gt;effective recreation&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;physical environment

&lt;ul&gt;
&lt;li&gt;home&lt;/li&gt;
&lt;li&gt;roommates&lt;/li&gt;
&lt;li&gt;city, region, state, country, planet&lt;/li&gt;
&lt;li&gt;weather&lt;/li&gt;
&lt;li&gt;independence&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;education

&lt;ul&gt;
&lt;li&gt;existing talent and skills&lt;/li&gt;
&lt;li&gt;social skills&lt;/li&gt;
&lt;li&gt;personality &amp;amp; character traits&lt;/li&gt;
&lt;li&gt;rate of growth&lt;/li&gt;
&lt;li&gt;productivity, routine, schedule&lt;/li&gt;
&lt;li&gt;scheduling, methods, tools&lt;/li&gt;
&lt;li&gt;values, purpose, impact&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjufe6ik09kxisihxhwnf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjufe6ik09kxisihxhwnf.jpg" alt="An empty wheel of life spreadsheet" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For each section, set a number:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1-10 - where you are currently on this section.&lt;/li&gt;
&lt;li&gt;1-10 - where you would ideally want to be in a year. This is important for grounding - you cannot be 10/10 in all sections. During different parts of your life, you may focus on career, social, or health differently - that is alright, and this number should reflect that.&lt;/li&gt;
&lt;li&gt;Based on the above two numbers, make the spreadsheet compute how much is the difference between where you are now and where you want to be.&lt;/li&gt;
&lt;li&gt;1-10 - how much effort did you put in? This is the eye-opening part - if a delta between where you want to be and where you are is huge, and yet you did not put much effort, you now have a clear TODO for the next year.&lt;/li&gt;
&lt;li&gt;Next to each line I have a free-form field to reflect on the numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, make a few simple charts to visualize how satisfied you are with each area of your life compared to how much effort you put in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflect on the present
&lt;/h3&gt;

&lt;p&gt;Write short answers for things that come to mind for the following prompts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Situation now&lt;/li&gt;
&lt;li&gt;Main projects now&lt;/li&gt;
&lt;li&gt;Main problems/concerns now&lt;/li&gt;
&lt;li&gt;Main obstacles, bottlenecks. What holds you back? (external/internal)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reflect on the past
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What advice would you give to yourself from a year ago? Lessons learned&lt;/li&gt;
&lt;li&gt;Regrets?&lt;/li&gt;
&lt;li&gt;Luckiest moments. Most grateful for...&lt;/li&gt;
&lt;li&gt;Best decision made&lt;/li&gt;
&lt;li&gt;Risks taken&lt;/li&gt;
&lt;li&gt;Surprises&lt;/li&gt;
&lt;li&gt;Challenges&lt;/li&gt;
&lt;li&gt;Professional accomplishment (skills, habits, learnings)&lt;/li&gt;
&lt;li&gt;Personal accomplishments&lt;/li&gt;
&lt;li&gt;Most influential in-person people (positive &amp;amp; negative)&lt;/li&gt;
&lt;li&gt;Most influential remote people (positive &amp;amp; negative)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;I try to avoid pronouns and articles, and even use incomplete sentences as I find that less distracting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Think about the future
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hoping ... stays the same&lt;/li&gt;
&lt;li&gt;Hoping ... changes&lt;/li&gt;
&lt;li&gt;If this is your last year...&lt;/li&gt;
&lt;li&gt;Great things expected to happen?&lt;/li&gt;
&lt;li&gt;Great things going to make happen?&lt;/li&gt;
&lt;li&gt;Travel plans&lt;/li&gt;
&lt;li&gt;Most important goal for next year&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reflect on your happiness
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;... brings happiness&lt;/li&gt;
&lt;li&gt;Happiest moments, fun things&lt;/li&gt;
&lt;li&gt;Unhappiest moments&lt;/li&gt;
&lt;li&gt;Motivation sources&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reflect on your character
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Want to change ... about myself&lt;/li&gt;
&lt;li&gt;... talent would like to have&lt;/li&gt;
&lt;li&gt;Compliments received&lt;/li&gt;
&lt;li&gt;Strengths&lt;/li&gt;
&lt;li&gt;Weaknesses&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Re-read the previous year's reflection
&lt;/h3&gt;

&lt;p&gt;It is easy to get lost in the moment and forget how far you have come. Re-reading the previous year's reflection helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;See how much you accomplished&lt;/li&gt;
&lt;li&gt;See how much you changed&lt;/li&gt;
&lt;li&gt;Identify the future goals&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Setting goals
&lt;/h3&gt;

&lt;p&gt;Update the list of the long-term goals based on this reflection. For each (specific and measurable goal) think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why important&lt;/li&gt;
&lt;li&gt;How it will change me&lt;/li&gt;
&lt;li&gt;How to quantify progress&lt;/li&gt;
&lt;li&gt;How confident I am in achieving it&lt;/li&gt;
&lt;li&gt;Possible failure reasons&lt;/li&gt;
&lt;li&gt;... behaviors support it&lt;/li&gt;
&lt;li&gt;... behaviors hinder it&lt;/li&gt;
&lt;li&gt;What to set in motion now to get closer to the goal&lt;/li&gt;
&lt;li&gt;Ideal future. How to get there&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;I hope this helps to serve as an inspiration for your own self-reflection processes.&lt;/p&gt;

&lt;p&gt;I wish you to have the time to plan for the goals you desire 🎯, and the energy to execute them ⚡!&lt;/p&gt;

</description>
      <category>reflection</category>
      <category>weeklyretro</category>
      <category>retrospective</category>
      <category>calendar</category>
    </item>
    <item>
      <title>How I Tracked Every Hour of My Life for 4 Years - and What You Can Learn From It</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Mon, 30 Jun 2025 01:27:35 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/how-i-tracked-every-hour-of-my-life-for-4-years-and-what-you-can-learn-from-it-4pic</link>
      <guid>https://dev.to/maxpatiiuk/how-i-tracked-every-hour-of-my-life-for-4-years-and-what-you-can-learn-from-it-4pic</guid>
      <description>&lt;p&gt;For the past 4 years, I have been keeping track of each moment of every day on the calendar. This makes it easy to see where my time goes and whether I am spending it on what aligns with my goals.&lt;/p&gt;

&lt;p&gt;While you don't have to go as far as I did, I hope the tips I present in this article will help you elevate your calendar game. With a bit of automation and structure, you can wield the calendar to get more time for things that matter to you most.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;TLDR:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;try hyper-scheduling&lt;/li&gt;
&lt;li&gt;use multiple calendars for different categories of tasks (critical, progress, chore, waste)&lt;/li&gt;
&lt;li&gt;come up with a consistent naming scheme - easier to search and less to type&lt;/li&gt;
&lt;li&gt;set notifications for critical events&lt;/li&gt;
&lt;li&gt;use autocomplete for event names (via &lt;a href="https://chrome.google.com/webstore/detail/calendar-plus/kgbbebdcmdgkbopcffmpgkgcmcoomhmh" rel="noopener noreferrer"&gt;Calendar Plus&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;plot how you spend your time (via &lt;a href="https://chrome.google.com/webstore/detail/calendar-plus/kgbbebdcmdgkbopcffmpgkgcmcoomhmh" rel="noopener noreferrer"&gt;Calendar Plus&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am personally using Google Calendar, but these tips apply to all digital calendars.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hyper-scheduling
&lt;/h2&gt;

&lt;p&gt;Hyper-scheduling is a practice of scheduling every moment of every day. The key reasons to do that are accountability to yourself (you can see where your time was spent) and avoiding procrastination (if you don't schedule the important things, then the easier, but less important things will fill your time).&lt;/p&gt;

&lt;p&gt;If not done right, scheduling every 15 minutes of each day can take a lot of time and add stress - that is the exact opposite of what we want. Some tips to do hyper-scheduling right:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use repeated calendar events as much as possible. Examples: sleep, meal time, transit, showering, exercise, chores.&lt;/li&gt;
&lt;li&gt;Add meetings, deadlines, important birthdays, appointments, and other time-sensitive events - put those out of your mind and into the calendar so that you can worry less about forgetting them.&lt;/li&gt;
&lt;li&gt;Put things that are good for you but you don't want to do on your calendar. If you see "Exercise" on the calendar, it is less friction to do the exercise than to remove the event from the calendar and feel the guilt.&lt;/li&gt;
&lt;li&gt;Put easy-to-forget chores on the calendar - I have a "charge watch" daily reminder to ensure my watch can track my sleep through the night.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Putting sleep and meal time on the calendar is especially important as there are health benefits from doing those at a consistent time every day of the week (including weekends).&lt;/p&gt;

&lt;p&gt;The above-mentioned things schedule 50% of your day. If you have a fixed work schedule, add that too, and now 75% of each day is scheduled - that means you have way more structure, less decision fatigue, and less procrastination.&lt;/p&gt;

&lt;p&gt;The time you did not schedule (25%) will fill up with random things throughout the day. These are unavoidable, but you reduced the chaos to just a quarter of the day, ensuring the most important things get prioritized.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb43k3mjg70hkqg6xo2dz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb43k3mjg70hkqg6xo2dz.jpg" alt="Example of my hyper-scheduled week" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can put relaxation and leisure time on the calendar too, but I prefer to keep that part flexible, so that if I have the energy in the evening to work or study, I do that, instead of being compelled to relax. But I will go after the fact and update the calendar to reflect what I spent the time on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Master using multiple calendars
&lt;/h2&gt;

&lt;p&gt;By default, a calendar app comes with a single calendar. I advise you to quickly expand it to create a calendar per each category of tasks. Having separate calendars brings huge benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each calendar event will have a distinct color, making the week more scannable&lt;/li&gt;
&lt;li&gt;You can set default notifications for each calendar, so you don't have to set them manually&lt;/li&gt;
&lt;li&gt;You can share a single calendar with someone, without revealing all others&lt;/li&gt;
&lt;li&gt;You can temporarily toggle the visibility of specific calendars&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are the calendars I use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Critical: time-sensitive and important tasks (reflection, sleep, appointments, non-work meetings, doing manual backups). They are in bright red color and have 1day, 10min, and 2min reminders to ensure I don't miss them.&lt;/li&gt;
&lt;li&gt;Progress: my favorite calendar - non-time-sensitive but important work that you should strive to do more of (exercise, study, journal, listen to audiobook, read, write, personal projects).&lt;/li&gt;
&lt;li&gt;Chore: time-sensitive non-important tasks (wake up, meal time, shower, transit, charge wearables, check mail, wind down).&lt;/li&gt;
&lt;li&gt;waste: non-time-sensitive and non-important - guilty pleasures and bad habits (watching YouTube, playing a game, watching a movie) - eliminate or reduce them as much as your willpower allows. These are in gray color to leave disgusting "grey holes" in my calendar.&lt;/li&gt;
&lt;li&gt;Work (or name this calendar after your company name): all work, except for meetings and deadlines goes here. Some people prefer to just put a 9-5 event on each day, but I found it more helpful to spend a few minutes each morning to put 1-2 hour blocks of time for that day for the main things I plan to work on (and adjust as the day progresses). Besides being helpful with keeping me focused on the highest priority tasks, this leaves me in an excellent position to reflect on how I spent my week and makes it easy to report on what I did.&lt;/li&gt;
&lt;li&gt;Work Meet: all work meetings and time-sensitive work (like preparation for a meeting). This is a separate calendar so that each event has a 10min reminder by default and is of slightly more visible color than the regular Work calendar even to stand out more. For virtual meetings that you don't need to prepare for, you can manually change the reminder to go off 0min before the meeting.&lt;/li&gt;
&lt;li&gt;Mood: a calendar for journaling and daily mood tracking. Read my article on &lt;a href="https://dev.to/maxpatiiuk/how-i-use-self-reflection-to-stay-on-track-daily-weekly-monthly-and-yearly-1n1f"&gt;daily, weekly, monthly, and yearly self-reflection&lt;/a&gt; that goes into this in more detail.&lt;/li&gt;
&lt;li&gt;Birthdays: synced from Google Contacts. Each event has a reminder 1 day before and on the day of the birthday.&lt;/li&gt;
&lt;li&gt;Me: this is the default fallback calendar. When I am in a hurry, I just create events and they end up on the default calendar. Each event on this calendar has a 1-day email reminder and 1-hour regular reminder. This ensures I don't miss them, and have time to triage them to a proper calendar. I also use this calendar for non-work non-critical meetings (like meetings with friends or live virtual conferences).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89jt17ymgyzv1mgsynnm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89jt17ymgyzv1mgsynnm.jpg" alt="A listing of my calendars" width="370" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Come up with an event naming scheme
&lt;/h2&gt;

&lt;p&gt;Even once 75% of your day is scheduled using repeated events, we can add some structure to the other 25%. I suggest coming up with a naming scheme for your events - do whatever works for you as it only needs to make sense for you.&lt;/p&gt;

&lt;p&gt;My example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;run &amp;lt;task&amp;gt;&lt;/code&gt;. Example: &lt;code&gt;run money&lt;/code&gt; (monthly statement tracking and financial reflection), &lt;code&gt;run book&lt;/code&gt; (time for deciding what book to read next and finding more great books to add to &lt;a href="https://books.patii.uk/" rel="noopener noreferrer"&gt;my library&lt;/a&gt;), &lt;code&gt;run music&lt;/code&gt; (for curating &lt;a href="http://music.patii.uk/" rel="noopener noreferrer"&gt;my Spotify library&lt;/a&gt;), &lt;code&gt;run photo&lt;/code&gt; (for cleaning up Google Photos albums), &lt;code&gt;run nutrition&lt;/code&gt; (monthly reflection on my diet and search for new healthy&amp;amp;tasty ingredients or practical recipes), &lt;code&gt;run digital&lt;/code&gt; (digital cleanup and password management). I use the word &lt;code&gt;run&lt;/code&gt; as it is shorter than &lt;code&gt;managing&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;read &amp;lt;task&amp;gt;&lt;/code&gt; - for when I want to schedule a time to read up on a topic or research something. Example: &lt;code&gt;read react docs&lt;/code&gt;, &lt;code&gt;read typescript book&lt;/code&gt;, &lt;code&gt;read new york rental market&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;prep &amp;lt;task&amp;gt;&lt;/code&gt; - for preparation ahead of an important event. Example: &lt;code&gt;prep eye exam&lt;/code&gt;, &lt;code&gt;prep dental cleaning&lt;/code&gt;, &lt;code&gt;prep insurance documents&lt;/code&gt;, &lt;code&gt;prep san francisco trip&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;meet &amp;lt;name&amp;gt;&lt;/code&gt; - for work meetings with people&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;talk &amp;lt;name&amp;gt;&lt;/code&gt; - for non-work meetings with people&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shop &amp;lt;name&amp;gt;&lt;/code&gt; - for regular shopping runs. For example, &lt;code&gt;shop sprouts&lt;/code&gt; (for grocery shopping), &lt;code&gt;shop amazon&lt;/code&gt; (for online shopping).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benefits of this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I prioritized for least typing so that I can create events quicker. That is also why I use lowercase for all event names (less Shift key pressing) and use the indefinite form of verbs (so &lt;code&gt;read&lt;/code&gt; over &lt;code&gt;reading&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;I prioritized consistent naming so that searching is easier.&lt;/li&gt;
&lt;li&gt;The "kind" of the event is usually the first word so that it is more visually scannable.&lt;/li&gt;
&lt;li&gt;I use &lt;a href="https://chrome.google.com/webstore/detail/calendar-plus/kgbbebdcmdgkbopcffmpgkgcmcoomhmh" rel="noopener noreferrer"&gt;Calendar Plus&lt;/a&gt; extension to automatically add the events that start with &lt;code&gt;run&lt;/code&gt; or &lt;code&gt;read&lt;/code&gt; to the Progress calendar, and events that start with &lt;code&gt;prep&lt;/code&gt; to the Critical calendar. This is saving a lot of time - my events are automatically put into the correct calendar, get color-coded, and with notifications set up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsw3raqvbqsk1yfo09upt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsw3raqvbqsk1yfo09upt.jpg" alt="An example of events following my naming convention" width="464" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Use the dot, Luke
&lt;/h3&gt;

&lt;p&gt;Most calendars allow you to add a description to events. And yet, most calendars don't show an indication that a description was added to an event. That makes it easy to forget that you added a description to a future event when that event finally comes around.&lt;/p&gt;

&lt;p&gt;Descriptions are useful for holding meeting agendas, extra context about an event, or quick research notes - forgetting the description can leave you unprepared for a meeting or without an important document for an appointment.&lt;/p&gt;

&lt;p&gt;My solution was to start the event name with a dot (&lt;code&gt;.&lt;/code&gt;) if the event name contains the description. That serves as a reminder to me when I visually scan the calendar for the day. Similarly, when the calendar notification comes in, seeing a dot at the start of the name is a reminder that there is a description to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use notifications! (sparingly)
&lt;/h2&gt;

&lt;p&gt;After hyper-scheduling, add notifications to some events. Don't do this for each event as that is too much noise. Examples of where notifications make sense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 min before for meetings.&lt;/li&gt;
&lt;li&gt;30 &amp;amp; 10 min before for leaving the office on time (if you are a workaholic and may stay late otherwise).&lt;/li&gt;
&lt;li&gt;1hr, 30min, and 10min bedtime reminders - to ensure you begin to wind down on time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It helps a lot to set a default notification for some calendars so that all events in the "Work Meet" calendar automatically get a 10min reminder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7kei9uhql2fkpyqip6j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7kei9uhql2fkpyqip6j.jpg" alt="The notifications for the " width="464" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Schedule the wind-down routine
&lt;/h2&gt;

&lt;p&gt;I used to work till right before bedtime. The head would still be racing about the problem I was trying to solve, making falling asleep harder. Being excited about work is not great for sleep.&lt;/p&gt;

&lt;p&gt;Scheduling a wind-down routine for each evening is important. This will highly vary on your preferences, but I picked what works for me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;15min: non-work email check, misc browsing&lt;/li&gt;
&lt;li&gt;30min: English pronunciation lessons (using BoldVoice)&lt;/li&gt;
&lt;li&gt;30min (while lying in bed): listening to audiobooks (non-fiction or fiction depending on how tired I am) - this is the most helpful for switching my brain away from work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e2esv7uzunwvjip3lik.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e2esv7uzunwvjip3lik.jpg" alt="My wind-down routine" width="290" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might also have a dental routine be part of this, but in my case, I do it right after the last meal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bring it to the next level with autocomplete
&lt;/h2&gt;

&lt;p&gt;Even with 75% of your day consisting of repeated events, and even if you use a concise naming scheme for events, there is still some overhead in creating events for the remaining 25% of the day. My solution for this was to create a &lt;a href="https://chrome.google.com/webstore/detail/calendar-plus/kgbbebdcmdgkbopcffmpgkgcmcoomhmh" rel="noopener noreferrer"&gt;Calendar Plus&lt;/a&gt; Google Chrome extension.&lt;/p&gt;

&lt;p&gt;The extension adds autocomplete when writing down calendar events and even puts events into the correct calendar based on the event name.&lt;/p&gt;

&lt;p&gt;For example, if you had an event called &lt;code&gt;run taxes&lt;/code&gt;, then the next time you start typing &lt;code&gt;run t&lt;/code&gt;, it will suggest &lt;code&gt;run taxes&lt;/code&gt; and will automatically put it into the same calendar as the previous event.&lt;/p&gt;

&lt;p&gt;You can also define manual autocomplete rules. For example, you can say that all events starting with &lt;code&gt;run&lt;/code&gt; should go into the Progress calendar, and all events starting with &lt;code&gt;prep&lt;/code&gt; should go into the Critical calendar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkwnj88rx5fbkzhnypei.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkwnj88rx5fbkzhnypei.jpg" alt="Example of autocomplete in action" width="470" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Analyze your time usage
&lt;/h2&gt;

&lt;p&gt;Hyper-scheduling your day means you get a lot of data about how you spend each day. You can aggregate this data to look at the time usage for a week, month, or even an entire year. This is immensely helpful when doing &lt;a href="https://dev.to/maxpatiiuk/how-i-use-self-reflection-to-stay-on-track-daily-weekly-monthly-and-yearly-1n1f"&gt;monthly or end-of-year reflection&lt;/a&gt; to see where your time is going and whether that aligns with your goals.&lt;/p&gt;

&lt;p&gt;Unfortunately, Google Calendar, Apple Calendar or Microsoft Outlook does not provide much of anything built-in for for this. As a solution, I added visualization for analyzing your time usage in a &lt;a href="https://chrome.google.com/webstore/detail/calendar-plus/kgbbebdcmdgkbopcffmpgkgcmcoomhmh" rel="noopener noreferrer"&gt;Calendar Plus&lt;/a&gt; Google Chrome extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yjsma2pnrdaok3lzc4x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yjsma2pnrdaok3lzc4x.jpg" alt="I did 3 hours of exercise this week" width="566" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of the helpful tools in the extension:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set goals for how much time you wish to spend per day/week/month/year on a given task and track progress.&lt;/li&gt;
&lt;li&gt;Visualize what portion of each time period was spent on events from which calendar.&lt;/li&gt;
&lt;li&gt;See what tasks you commonly do during a given hour of the day.&lt;/li&gt;
&lt;li&gt;You can define virtual "sub-calendars" to further subdivide your calendars.

&lt;ul&gt;
&lt;li&gt;Example categories: category for common work you do, category for each class you attend, category for each person you spend time with.&lt;/li&gt;
&lt;li&gt;Then, a doughnut chart will further subdivide your time usage into these sub-calendars.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6q39nt3lbfjr46tie12.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6q39nt3lbfjr46tie12.jpg" alt="I spent 46hrs in meetings in July" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  (optional personal story) How I got started with hyper-scheduling
&lt;/h2&gt;

&lt;p&gt;During COVID, I temporarily moved back from the US to Ukraine. My classes and work went all remote but continued being in a US-based time zone (8-hour difference). That meant waking up at 1pm, doing exercise till 2pm, having work meetings at 12am, and sometimes having exams at 3am. Add to that juggling of classes, homework, meal time, and family obligations.&lt;/p&gt;

&lt;p&gt;Fun fact: I was having dinner at the same time as my dad was having his breakfast.&lt;/p&gt;

&lt;p&gt;Keeping it up in a healthy way for more than a year requires careful planning and discipline.&lt;/p&gt;

&lt;p&gt;At that time, I distinctly remember an entire day passing by, without me remembering what I did that day - did I work? how much? did I study? did I have homework due? did I remember to eat and exercise? did I go to sleep on time? I had no idea. Sleeping during the day, working half the night, and doing it all from the same single room made days blend together.&lt;/p&gt;

&lt;p&gt;Putting everything on the calendar was critical for keeping track of the obligations, the time zone differences and ensuring I spent my time productively.&lt;/p&gt;

&lt;p&gt;An example of a day that would not have been possible without a calendar: an exam, a class, and then 5 work meetings almost back to back:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F455byr7bgtqfjo70tens.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F455byr7bgtqfjo70tens.png" alt="Looking back at my calendar for 2021 (the year when people worked from home). I had two zoom classes and then 5 work meetings almost back to back. zoom fatigue is real" width="452" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the moment I started hyper-scheduling, I never looked back. The pandemic year was one of the most productive years of my life.&lt;/p&gt;




&lt;p&gt;Lastly, this article won't be complete without mentioning the downsides of hyper-scheduling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hyper-scheduling is great for people with predictable schedules (work schedules or class schedules). If your schedule varies a lot or you are often away from a calendar, hyper-scheduling will be tricky. You can still get some benefits by scheduling only the predictable parts of your day (sleep and meal times).&lt;/li&gt;
&lt;li&gt;You can develop guilt about wasting time. This depends on the personality, but if this is an issue, you can totally schedule 30 min of leisure at the end of the day - and classify it as "Progress" rather than "waste" if it is important for you to not burn out.&lt;/li&gt;
&lt;li&gt;Hyper-scheduling and travel vacations don't mix. Just don't. Vacation is for temporary getting away from the normal schedule so that you can recharge and re-remember how much you like your work and crave the predictable schedule. I keep track of things until departure from the airport and then am back to tracking only once I arrive back at the home airport. In between those, I only keep track of sleep time and vacation booking times - the rest of the time is put on the calendar as just "vacation" events (on the "Chore" calendar 😉).&lt;/li&gt;
&lt;li&gt;
&lt;del&gt;It takes time to keep track of each day&lt;/del&gt;. This is not true if you apply the tips mentioned in this article. I spend a total of just 15min per day on planning the day and updating the calendar, and get hours back in clarity and prioritization benefits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tip for getting started with hyper-scheduling: while 15min is the lowest practical resolution for tracking, begin by using a tracking resolution of every 30min of the day or even just 1 hour of each day.&lt;/p&gt;

&lt;p&gt;While going full-on hyper-scheduling brings huge benefits, you can improve your calendar game by adopting even a few of these tips. I hope you can give this a try today!&lt;/p&gt;

</description>
      <category>calendar</category>
      <category>googlecalendar</category>
      <category>hyperscheduling</category>
      <category>calendarplus</category>
    </item>
    <item>
      <title>A lot of mobile IT security advice is a decade out of date</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sat, 24 May 2025 17:04:59 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/most-personal-it-security-advice-is-a-decade-out-of-date-2oo</link>
      <guid>https://dev.to/maxpatiiuk/most-personal-it-security-advice-is-a-decade-out-of-date-2oo</guid>
      <description>&lt;p&gt;I keep seeing several outdated, and less than practical phone security tips.&lt;/p&gt;

&lt;p&gt;Let me address the most common ones and provide a more practical and modern&lt;br&gt;
alternative to each.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use VPN when accessing sensitive information
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; don't worry about it.&lt;/p&gt;

&lt;p&gt;I am almost sure this myth was created by VPN companies to scare people into giving up their money.&lt;/p&gt;

&lt;p&gt;Almost every website you visit today uses HTTPs, which means the data is encrypted, yes, even on public Wi-Fi. Furthermore, modern browsers will warn you strongly before letting you enter sensitive information on non-secure HTTP sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical advice:&lt;/strong&gt; if site uses HTTPs (most do today), you don't need a VPN.&lt;br&gt;
&lt;strong&gt;Professional advice&lt;/strong&gt;: use a VPN when required by your organization, or when needed to avoid a geo-block.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid public charging stations and public Wi-Fi and when possible
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; don't worry about it.&lt;/p&gt;

&lt;p&gt;The only risk from public Wi-Fi is exposure to not-yet-widely-known vulnerabilities (0-day attacks). But unless you are a CEO, politician, or a high-profile journalist, you won't be targeted by such attacks as they are expensive and impractical.&lt;/p&gt;

&lt;p&gt;As far as avoiding public charging stations, this was never a widespread threat, and was quickly patched by iOS and Android - your phone does not give up control of any personal data when you plug it into a public charging station (not unless you go out of your way to allow it). More importantly, charging stations have no way to install apps on your phone - by default, that is only allowed via App Store or Google Play Store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical advice:&lt;/strong&gt; almost all sites today use HTTPs, so don't worry about it&lt;br&gt;
&lt;strong&gt;Professional advice:&lt;/strong&gt; double-check the sites you commonly visit use HTTPs, and be careful with what permissions you grant to apps and devices you plug in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn off Wi-Fi and Bluetooth when not in use
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; don't worry about it.&lt;/p&gt;

&lt;p&gt;WTF? This one had me laughing out loud. This wins the crown for the most impractical advice I heard in a while.&lt;/p&gt;

&lt;p&gt;It is as if someone out there is trying to shift all responsibility to you - so that just in case you get hacked, they can say "well, your fault for using the Internet!".&lt;/p&gt;

&lt;p&gt;Your phone does not auto-connect to unknown Bluetooth devices. It may auto-connect to unknown Wi-Fi networks, but this is not much to worry about (and can be disabled in settings if you insist).&lt;/p&gt;

&lt;h2&gt;
  
  
  Lock your phone after each use
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; your device locks automatically after a short period of inactivity.&lt;/p&gt;

&lt;p&gt;A mobile phone is supposed to serve us, not the other way around. By default, all phones lock automatically after a period of inactivity. You can set this period to a shorter or longer time based on personal preference. You should spare yourself the hassle and think about more important things.&lt;/p&gt;

&lt;p&gt;Bonus: if connected to a smartwatch, some phones lock automatically when you walk away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use strong passwords and enable multi-factor authentication
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; use password managers and passkeys.&lt;/p&gt;

&lt;p&gt;The "strong password" is commonly defined as a long, random, and unique string with unusual characters. Such passwords are hard for humans to remember. Encouraging or mandating such passwords only encourages less secure workarounds (like password sharing or writing down passwords).&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical advice:&lt;/strong&gt; use the password manager that is built into Safari or Chrome to generate and store strong passwords. They are very simple to use and secure enough.&lt;br&gt;
&lt;strong&gt;Professional advice:&lt;/strong&gt; use a password manager that is not built into your OS/browser. A dedicated password manager software is more secure, portable and feature-rich. Bitwarden is a great choice, and free for most use cases.&lt;/p&gt;

&lt;p&gt;Multi-factor authentication is great for additional security, but comes in many forms - some more secure and practical than others. SMS and email are the most common choices, but also the least secure and least convenient. One-time passwords (OTP) are secure, but not convenient unless they are auto-filled by your password manager. Passkeys are a modern option that is the most secure and the most convenient - prefer this whenever offered.&lt;/p&gt;

&lt;p&gt;Google has a great page with &lt;a href="https://www.google.com/account/about/passkeys/" rel="noopener noreferrer"&gt;more details on passkeys&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Encrypt your data and back up your device regularly
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; all your phone data is encrypted. but do double-check that automatic backup is enabled.&lt;/p&gt;

&lt;p&gt;"Encrypt your data" is not actionable and not helpful. What does this mean? How do I do this? Should I start texting my friends using ancient-Egyptian?&lt;/p&gt;

&lt;p&gt;The truth is that iPhones and Android devices encrypt all stored data. So this advice is redundant.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;strong&gt;Practical advice:&lt;/strong&gt; iPhones back up all your data to iCloud automatically, and Android devices back up some data too. But do double-check whether you ran out of free cloud storage. Afterward, delete data you don't need to back up or pay for more storage.&lt;br&gt;
&lt;strong&gt;Professional advice:&lt;/strong&gt; store all your data in the cloud by default - then there is nothing for you to back up. For example, use Google Photos, Google Docs suite, Google Drive, Google Contacts, Google Keep. (non-Google alternatives exist too). The same can be done on your computer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be alert to phishing scams and do not fall for them!
&lt;/h2&gt;

&lt;p&gt;Thanks. Very actionable.&lt;/p&gt;

&lt;p&gt;Non-actionable advice is often worse than no advice.&lt;/p&gt;

&lt;p&gt;How about this instead: with the exception of your parents, no one will give you anything for free. OR: when in doubt, double-check the sender/site address.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep software updated, utilize anti-virus software and do not Jailbreak or root your device
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; don't resist automatic updates for more than a week.&lt;/p&gt;

&lt;p&gt;Operating systems and browsers today are very insistent on automatic updates. These can come at very inconvenient times - as a consumer, you should push back to IT overlords and Bill Gates - they should be smarter about update scheduling. On your side, when an update is offered, don't resist it for more than a week as otherwise you can get exposed to known vulnerabilities.&lt;/p&gt;

&lt;p&gt;Utilizing anti-virus software on a phone is a joke. It is not needed as operating systems are secure by default, and apps are sandboxed. If someone is offering an anti-virus for a phone, they are trying to sell you something.&lt;/p&gt;

&lt;p&gt;"do not Jailbreak your device" is a curious advice. It is curious because most advice in this email so far is geared toward a general audience (this email was sent out org-wide after all). I can't imagine an average user Jailbreaking their iPhone (at a time when Jailbreaking iPhones is less common than ever). Android equivalent is called "rooting". There are nice advantages to rooting, but none of them are relevant to an average user so not worth worrying about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use apps safely. Enable “find my phone” app
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TLDR Instead:&lt;/strong&gt; watch the permissions you grant. Double-check "find my phone" is enabled.&lt;/p&gt;

&lt;p&gt;I don't even know what is meant by "use apps safely". A more practical advice is to watch the permissions you grant to apps and websites - don't blindly tap "accept". If you have a habit of blindly "accepting", then also make a habit out of regularly checking what permissions you granted.&lt;/p&gt;

&lt;p&gt;"Find my phone" is a great feature. Phones will ask you to enable it during setup, so it's most likely you already have it enabled, but do double-check just in case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary for security advice in 2025
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use password managers and passkeys.&lt;/li&gt;
&lt;li&gt;Update when prompted &amp;amp; convenient.&lt;/li&gt;
&lt;li&gt;Be skeptical of unexpected links or login requests (phishing still works).&lt;/li&gt;
&lt;li&gt;Be careful with permissions you grant to apps and websites.&lt;/li&gt;
&lt;li&gt;Double check automatic backup and "Find my phone" are enabled.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why is most advice so bad?
&lt;/h2&gt;

&lt;p&gt;The incentives are not aligned between you and the people giving the advice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advice online is bad because: Much advice you read online is backed by companies looking to scare you into buying their products. Also, anyone can write anything on the internet, so verify what you read (including this article). For most people, ChatGPT is a very practical tool for verifying security advice.&lt;/li&gt;
&lt;li&gt;Advice from your organization is bad because: Organizations are susceptible to security theater, checkbox culture, blame-shifting, legacy desktop-centric thinking, and no feedback loop from real users. Bureaucratic organizations are also slow to adapt to new technology (due to regulations, conservatism, or inertia), so their advice may be a decade behind.

&lt;ul&gt;
&lt;li&gt;Side note: when doing corporate IT security training, in all multiple-choice questions, pick the most conservative, impractical and out of date option and you will score 100% each time.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;When it comes to personal security, if something is not convenient, it won't be done. So security advice should be practical where possible - and as I showed you, more practical (and often more secure) alternatives exist.&lt;/p&gt;

</description>
      <category>security</category>
      <category>passwords</category>
      <category>vpn</category>
      <category>wifi</category>
    </item>
    <item>
      <title>My Journey with RSI</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sun, 18 May 2025 01:46:56 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/my-journey-with-rsi-4f9m</link>
      <guid>https://dev.to/maxpatiiuk/my-journey-with-rsi-4f9m</guid>
      <description>&lt;p&gt;My Journey with RSI&lt;/p&gt;

&lt;p&gt;A story about my experience with finger pain and how I overcame it. Every situation is different, but I hope this helps or informs you.&lt;/p&gt;

&lt;p&gt;The first half of the post is a weekly account of the experience and my attempts to fix this bug. The second half is the solution I found and the lessons learned.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;TLDR: If you want to jump straight to the climax and resolution, skip to &lt;a href="https://dev.to/maxpatiiuk/my-journey-with-rsi-4f9m#:~:text=still%20too%20early.-,The%20worst%20week%20%2D%20and%20the%20turning%20point,-(week%2013)"&gt;The worst week - and the turning point (week 13)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The trigger
&lt;/h2&gt;

&lt;p&gt;Trigger condition:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Was walking to work in 7c winter mornings without wearing gloves or a jacket, followed by typing right afterward.&lt;/li&gt;
&lt;li&gt;At this time, I was writing 29 ESLint rules &amp;amp; accompanying tests (compared to regular coding, this involves more typing and fewer breaks for thinking).&lt;/li&gt;
&lt;li&gt;Typing for 9-12 hours a day, 7 days a week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In retrospect, I should have seen it coming.&lt;/p&gt;

&lt;h2&gt;
  
  
  The start of pain (week 0)
&lt;/h2&gt;

&lt;p&gt;The pain was focused at the base of the 4 fingers (flexor tendons). Thumbs were not affected at the start as standard keyboard underuses the thumbs, especially among keyboard shortcut users.&lt;/p&gt;

&lt;p&gt;My personality means I do a lot of research and overthink. Everything I read about RSI was alarming. My career and hobby all involve typing, so not being able to do that seemed like a nightmare.&lt;/p&gt;

&lt;p&gt;Literal entry from my journal at the time:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;RSI seems very scary and career-threatening&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My immediate mitigation steps based on what I read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;purchased gloves and started warming up fingers with hot water&lt;/li&gt;
&lt;li&gt;pressed keys more lightly&lt;/li&gt;
&lt;li&gt;maxed out touchpad sensitivity to reduce finger movement&lt;/li&gt;
&lt;li&gt;took breaks. jumping jacks in the office are a great break (brings blood to the entire body, including fingers).&lt;/li&gt;
&lt;li&gt;started doing finger stretches and strengthening exercises&lt;/li&gt;
&lt;li&gt;considered switching to dvorak, and delved into the rabit hole of alt layouts (but did not at the end)&lt;/li&gt;
&lt;li&gt;optimized daily workflows to reduce typing:

&lt;ul&gt;
&lt;li&gt;shortened calendar event names&lt;/li&gt;
&lt;li&gt;wrote less verbose code&lt;/li&gt;
&lt;li&gt;used more contractions in messages&lt;/li&gt;
&lt;li&gt;reduced open applications to reduce the need for switching between them&lt;/li&gt;
&lt;li&gt;reduced email workload via mass unsubscribe and filtering&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;All of the above changes were done in a single day. I felt proud to be so proactive - heard horror stories online of people ignoring RSI for years until they were literally unable to type at all. I was happy that I took so much action in literally the first week of the symptoms. Now, I was hoping that all these changes would make the pain go away.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first signs of ... nevermind, it did not get better (week 1)
&lt;/h2&gt;

&lt;p&gt;The pain did not magically disappear - slowly but steadily, it got more prominent. At this point, I began fighting my workaholic tendencies and managed to take a few hours each day for movies and VR gaming while listening to favorite audiobooks. Not doing anything productive is hard, but I needed to give the fingers some break.&lt;/p&gt;

&lt;p&gt;I also started doing finger stretches and strengthening exercises daily. Purchased a 1HP course of personalized exercises - the personalized part was the key reason - I wanted a time-efficient solution that would target the part of the finger that needed it most.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not getting better (week 2)
&lt;/h2&gt;

&lt;p&gt;Exercise did not seem to help, so I decided to do more of it! 1HP said it would take 4-5 weeks to see results, so I was motivated to continue.&lt;/p&gt;

&lt;p&gt;Unlike previous weeks, where pain would only appear toward the end of the workday, I started feeling the pain even in the afternoon.&lt;/p&gt;

&lt;h2&gt;
  
  
  More exercise and more breaks (week 3)
&lt;/h2&gt;

&lt;p&gt;Pain starts even in the morning.&lt;/p&gt;

&lt;p&gt;Here I decided to do more full-body exercise - it helps me feel better, and brings blood to the fingers (helps with recovery), without overly stressing them. I do VR fitness, VR boxing, dancing, abs reps, freestyle swimming, yoga, burpies, or jumping jacks - whichever feels best on a given day. Full body exercise definitely reduced finger pain, at least temporarily, and I increased it to an hour per day. Combined with a fast walk 1hr per day (to and from work), I was feeling happy that I was improving my body and healing my fingers at the same time.&lt;/p&gt;

&lt;p&gt;Started going to the office 5 days a week to get more walking. Worth mentioning that I only work half a day in the office (8am-2pm), followed by a walk back home, exercise, shower, dinner, and then remote work (4:30pm-9:30pm). This lengthy mid-day break is the favorite part of the day - I get a mental break, do typing break, listen to favorite audiobooks, do exercise, and then am ready to work again with renewed energy (while everyone else is off work, so I get fewer distractions).&lt;/p&gt;

&lt;p&gt;Here, I began trying out voice typing. See my article on &lt;a href="https://dev.to/maxpatiiuk/7-less-common-computer-input-devices-1bel"&gt;7 less common computer input devices&lt;/a&gt; for more details. My accent makes this trickier, so I also began accent training for a few minutes daily.&lt;/p&gt;

&lt;p&gt;Also, my left hand began to hurt more than the right, so I was typing with the right hand only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Single hand experiments (week 4)
&lt;/h2&gt;

&lt;p&gt;After typing with just my right hand for a week, I tried using my right hand again, and the pain returned immediately. Not cool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Something gotta change (week 10)
&lt;/h2&gt;

&lt;p&gt;For several weeks, I kept experimenting with typing with just one hand, or typing with just thumbs, while continuing exercises for fingers, full body exercises, and taking breaks. Did not work - it was steadily getting worse. This is when I took an entire weekend, morning till evening, for research. &lt;/p&gt;

&lt;p&gt;Some changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ordered Logitech Lift vertical mouse to use instead of a touchpad&lt;/li&gt;
&lt;li&gt;ordered a compression glove&lt;/li&gt;
&lt;li&gt;ordered a standing desk to get better ergonomics&lt;/li&gt;
&lt;li&gt;got software for controlling the mouse with a gamepad&lt;/li&gt;
&lt;li&gt;learned macOS Voice Control; tried out Talon but passed on it&lt;/li&gt;
&lt;li&gt;ordered an ergonomic split keyboard with low activation force

&lt;ul&gt;
&lt;li&gt;$425 is pricy, but far cheaper than the productivity loss so far, or the price of any surgery.&lt;/li&gt;
&lt;li&gt;also, I was excited to geek out around its features&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxx4ji60pkn7hhz672y31.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxx4ji60pkn7hhz672y31.jpg" alt="Logitech Lift looks like a droplet of water with a buttons rotates to the side of the droplet. It is a bit too small for my hands" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All of the above is covered in more detail in &lt;a href="https://dev.to/maxpatiiuk/7-less-common-computer-input-devices-1bel"&gt;7 less common computer input devices&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My orders arrived (week 11)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://www.ikea.com/us/en/p/relatera-desk-sit-stand-white-s49552863/" rel="noopener noreferrer"&gt;IKEA Relatera&lt;/a&gt; desk arrived - really like how smart the design is.&lt;/li&gt;
&lt;li&gt;Took a few hours to learn how to use a vertical mouse (from a long-time touchpad user), but afterward it was much faster than controlling the mouse cursor with a gamepad.&lt;/li&gt;
&lt;li&gt;Compression glove cut off blood flow at the base of the fingers too much - stopped wearing it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The keyboard is here! (week 12)
&lt;/h2&gt;

&lt;p&gt;I have been not typing at all for the last two weeks. That reduced finger pain a lot - I got occasional spasms once or twice a day, but otherwise good.&lt;/p&gt;

&lt;p&gt;Finally, the ergonomic keyboard has arrived.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzoibzo14c1qnynbjkttd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzoibzo14c1qnynbjkttd.jpg" alt="Unlike regular keyboards, many ergonomic keyboards are split or have curved key-wells" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After an evening of setup and learning, I was able to type on it faster than using an on-screen keyboard with mouse/gamepad, so I tried switching to it full time right away.&lt;/p&gt;

&lt;p&gt;Well, bad idea. I had high hopes after weeks of not typing. I was so excited for the keyboard that I went back to typing for 10+ hours the very next day - and felt the pain return later in the evening. Did not help that this period happened to be unusually cold in the office.&lt;/p&gt;

&lt;p&gt;The weather forecast projected more cold, and my finger pain was back, so I decided to take a break from typing again for a few days. Explored GitHub Copilot and AI voice-controlled agents - they are cool, but still too early.&lt;/p&gt;

&lt;h2&gt;
  
  
  The worst week - and the turning point (week 13)
&lt;/h2&gt;

&lt;p&gt;Despite not typing, the pain was getting worse.&lt;br&gt;
I had two full days of nothing but meetings - I was not typing at all, just sitting. I was also taking hot water breaks and wearing gloves. Did finger exercise and neural glides. And yet, the pain was getting worse than ever before. At this point, even showering and eating became painful.&lt;/p&gt;

&lt;p&gt;I took more measures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Started using a gamepad with feet to avoid using fingers at all. Then optimized that further by using an iPad with feet (iPad acted as a giant touchpad for the laptop).&lt;/li&gt;
&lt;li&gt;Done more learning of voice typing - at this point, I could use the computer with just feet and voice (but at 40% of usual productivity).&lt;/li&gt;
&lt;li&gt;Had a company ergonomics assessment - they did not find anything wrong with what I was doing. They said I already gone above and beyond with alternative computer input devices.&lt;/li&gt;
&lt;li&gt;Bought different compression gloves (Copper Compression) - they are more comfortable.&lt;/li&gt;
&lt;li&gt;Scheduled doctor appointment (but nearest slot was 3 months away).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the turning point in my journey. With ergonomic assessment not bearing any results, and doctor appointment so far away, I had to take matters into my own hands (pun).&lt;/p&gt;

&lt;p&gt;An important point is that through this journey so far, I was scared of the finger pain and the worst-case consequences. But this week, I learned how to control my computer without using fingers at all - just voice and feet. And while 40% productivity is not great, this is the floor below which I will not fall regardless of how bad the finger pain gets (and voice control is advancing rapidly with AI).&lt;/p&gt;

&lt;p&gt;This gave me comfort and allowed me to think more clearly about the situation. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Way Out
&lt;/h2&gt;

&lt;p&gt;At this point, I remembered an article I read a year ago, even before finger pain. &lt;a href="https://www.joshwcomeau.com/blog/mindbody/" rel="noopener noreferrer"&gt;My Personal Experience with RSI - by Josh W Comeau&lt;/a&gt;. The article mentions that while the original pain was likely caused by physical strain, the brain can learn to associate the pain with typing and reinforce the pain, even after the physical damage is gone.&lt;/p&gt;

&lt;p&gt;This was such a lightbulb moment. I quickly began reading up on the subject. I read &lt;a href="https://www.goodreads.com/book/show/361775.The_Mindbody_Prescription" rel="noopener noreferrer"&gt;The Mindbody Prescription&lt;/a&gt;. The book talks about physical pain being caused by suppressed emotions. While that did not resonate with my situation, I continued to explore the field of mentally-induced physical pain.&lt;/p&gt;

&lt;p&gt;The next book I read was &lt;a href="https://www.goodreads.com/book/show/50021854-the-way-out" rel="noopener noreferrer"&gt;The Way Out&lt;/a&gt;. This was it. This was it! The summary of the book is that initial physical pain can lead to stress and worry, which leads to the brain learning to associate worry with pain and reinforcing the pain in a bad feedback loop. The book then guides you through collecting evidence for pain being caused by the brain. My evidence sheet:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The pain came back immediately after I started typing, even though I took a 3-week break.&lt;/li&gt;
&lt;li&gt;Afterward, I was not typing at all (but thinking about the pain more and more), and it got worse and worse.&lt;/li&gt;
&lt;li&gt;While the original pain was all at the base of the fingers, the new pain was all over the hand, and even moving outside the wrist. The pain sometimes would move around from minute to minute.

&lt;ul&gt;
&lt;li&gt;The pain would migrate to the thumbs after a day of controlling the computer with a gamepad.&lt;/li&gt;
&lt;li&gt;The index finger would hurt after hours of using a mouse.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Focusing on the pain made it worse. Merely thinking about it could cause a flare-up, and pain can move around as you think about it.

&lt;ul&gt;
&lt;li&gt;At this point, merely imagining typing brought the pain - this is a dead giveaway that the brain is involved.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The pain came back at a specific time of day or during specific activities (in my case, the pain got much worse the moment I lay down in the bed in the evening - not the moment before, and not if I merely lay on the floor).&lt;/li&gt;
&lt;li&gt;I had a lot of stress and anxiety about the finger pain and the long-term consequences of it on my career.&lt;/li&gt;
&lt;li&gt;I had mentally-induced physical reactions in the past - skin rashes, pimples, and acne caused by anxiety. My parents and grandparents also had a history of physical reactions to mental stress.&lt;/li&gt;
&lt;li&gt;I learned that too many finger-strengthening exercises can put more stress on already inflamed tendons. After learning this, strengthening exercises became painful - not before that. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Recovery
&lt;/h2&gt;

&lt;p&gt;Armed with a solid evidence sheet, I felt far more confident that the pain was mental. I set out to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do daily "somatic tracking" - a practice of calmly observing the pain, without worrying about it, and teaching the brain that the fingers are okay, the pain is an overreaction.&lt;/li&gt;
&lt;li&gt;I continued avoiding typing for the next 4 weeks as a precaution, just in case I was wrong, and to give myself more mental ammunition: "even if I am wrong about the cause, surely a 4 week break would give fingers time to heal".&lt;/li&gt;
&lt;li&gt;I referenced the evidence sheet often, and re-read the book whenever doubts crept in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And you know what? For the next few days, the pain almost halved each day. I felt in control. I also worked on more stress reduction and meditation. Journal entry:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;productivity is now high enough that I am no longer worried. finger pain is even less&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had an entire week of 8+ mood, even 10/10 one day. Then had a week of vacation where I did not think about the fingers at all.&lt;/p&gt;

&lt;p&gt;After the vacation, I slowly began getting back to typing. This time I took it very easy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day 1: air typing (hovering fingers above the keyboard and thinking about typing)&lt;/li&gt;
&lt;li&gt;Day 2: typing for a minute&lt;/li&gt;
&lt;li&gt;Day 3: typing for 15 minutes&lt;/li&gt;
&lt;li&gt;Day 4: typing for 1 hour&lt;/li&gt;
&lt;li&gt;Day 5+: brought the keyboard to the office and used it in combination with voice typing&lt;/li&gt;
&lt;li&gt;Day 10+: phased out voice typing and other copping mechanisms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that was it - that was the last journal entry mentioning finger pain. I still had occasional flare-ups, and did re-read The Way Out to remind myself again, but the pain was pretty much gone.&lt;/p&gt;

&lt;p&gt;At this point, it has been 4 months since the first signs of the pain. 4 months is way less than the years of pain some people endure. I am very grateful for my "overthinking" trait, as it led me to research the problem as soon as it appeared. I iterated on the solution constantly and explored many options.&lt;/p&gt;

&lt;p&gt;Best of luck with your journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I was tracking daily mood levels throughout. Surprisingly, it rarely deviated from 8/10. Some bad experiences temporarily pushed it down to 7 or rarely 6, and few great days were 9, but it always went back to 8.&lt;/li&gt;
&lt;li&gt;While finger strengthening exercise is good in the long run, don't do it when you are in pain, as you can overstress the tissues or make the brain associate exercise with pain. Be careful with it.&lt;/li&gt;
&lt;li&gt;I have &lt;a href="https://my.clevelandclinic.org/health/diseases/21763-joint-hypermobility-syndrome" rel="noopener noreferrer"&gt;hypermobile fingers&lt;/a&gt; - they naturally stretch far more than the average person, and I also worked throughout childhood on stretching them more. However, for people with hypermobility, as I learned, further finger stretching is discouraged as it can lead to instability in joints and pain.&lt;/li&gt;
&lt;li&gt;If typing becomes painful, you gain sudden clarity about how much non-essential you can cut out to prioritize the most important tasks. I unsubscribed from a lot of newsletters, set up email filters, cut needless meetings, shortened calendar event names, and configured calendar event name autocomplete (checkout my &lt;a href="https://chromewebstore.google.com/detail/calendar-plus/kgbbebdcmdgkbopcffmpgkgcmcoomhmh" rel="noopener noreferrer"&gt;Calendar Plus&lt;/a&gt; extension for Google Calendar power users).&lt;/li&gt;
&lt;li&gt;Got outside the comfort zone by voice typing and began working on accent training. Also, learned the value of hopping on a quick video call instead of typing long messages back and forth.&lt;/li&gt;
&lt;li&gt;I learned a lot about ergonomics. This might be the most important outcome in the long term. Through better posture, an ergonomic keyboard, an ergonomic mouse, and a standing desk, I probably averted several future occupational injuries.&lt;/li&gt;
&lt;li&gt;I explored a lot of unique computer input devices I would have never tried before. Read my article on &lt;a href="https://dev.to/maxpatiiuk/7-less-common-computer-input-devices-1bel"&gt;7 less common computer input devices&lt;/a&gt; for more details.

&lt;ul&gt;
&lt;li&gt;If you are still dealing with finger pain, I highly recommend trying out some devices mentioned, as they can let you get back to using the computer with less pain.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8vqb26orsuao3drp1dh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8vqb26orsuao3drp1dh.jpg" alt="A standing desk and a laptop raiser are useful ergonomic compliments" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While I would not want to repeat the experience, I am extremely glad about the things I learned along the way. I came out stronger and more confident about my ability to deal with future challenges.&lt;/p&gt;

</description>
      <category>rsi</category>
      <category>a11y</category>
      <category>keyboards</category>
      <category>fingers</category>
    </item>
    <item>
      <title>7 less common computer input devices</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sun, 27 Apr 2025 04:57:57 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/7-less-common-computer-input-devices-1bel</link>
      <guid>https://dev.to/maxpatiiuk/7-less-common-computer-input-devices-1bel</guid>
      <description>&lt;p&gt;After experiencing RSI symptoms, I dived deep into alternative ways of controlling computers - ideally these methods reduce finger stress or don't involve fingers at all.&lt;/p&gt;

&lt;p&gt;This article summarizes the methods I tried throughout my 4-month journey and what I settled on.&lt;/p&gt;

&lt;p&gt;In the process, I gained more appreciation for accessibility features and renewed awareness of how my projects can be used by less common input methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audience:&lt;/strong&gt; people with RSI, accessibility advocates, keyboard geeks, and software developers who want to learn more about inclusive design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basics
&lt;/h2&gt;

&lt;p&gt;Let's get the obvious out of the way: typing less gives fingers time to recover. I was taking more breaks, but stopping computer use altogether is a non-starter since all of my work and most of my hobbies revolve around computer use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Typing with 2 fingers
&lt;/h2&gt;

&lt;p&gt;My finger pain was concentrated at the base of 4 fingers (flexor tendons). Thumbs were spared (partially because a regular keyboard underuses the thumbs), so for 2 weeks I tried:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typing with 2 fingers only&lt;/li&gt;
&lt;li&gt;Relying on the MacBook touchpad more (more context menu actions, fewer keyboard shortcuts)&lt;/li&gt;
&lt;li&gt;Reducing non-essential typing:

&lt;ul&gt;
&lt;li&gt;shortened calendar event names&lt;/li&gt;
&lt;li&gt;wrote less verbose code&lt;/li&gt;
&lt;li&gt;used more contractions&lt;/li&gt;
&lt;li&gt;reduced number of open windows to reduce the need for switching between them&lt;/li&gt;
&lt;li&gt;unsubscribed or filtered out more emails to reduce inbox volume&lt;/li&gt;
&lt;li&gt;preferred voice messages and quick meetings over back-and-forth text conversations&lt;/li&gt;
&lt;li&gt;re-evaluated daily tasks to drop less impactful ones, to have more time for the most important ones as compensation for otherwise reduced productivity&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: While explicit code is generally beneficial, during this phase, I preferred less verbose APIs. This is something to keep in mind when designing libraries or setting team code standards: if you can accomplish the same result with fewer keystrokes, it’s worth considering for the sake of your colleagues' fingers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This helped but affected my productivity severely. It also put too much strain on my thumbs, giving me some pain in them after 2 weeks, which is why I switched to the next method:&lt;/p&gt;

&lt;h2&gt;
  
  
  Vertical mouse
&lt;/h2&gt;

&lt;p&gt;I knew the pain was from typing and not from touchpad use, but if an ergonomic mouse could help, I was more than up for it. I went for &lt;a href="https://www.logitech.com/en-us/shop/p/lift-vertical-ergonomic-mouse.910-006469" rel="noopener noreferrer"&gt;Logitech Lift&lt;/a&gt; - a small and quiet vertical mouse with easy-to-press buttons.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxx4ji60pkn7hhz672y31.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxx4ji60pkn7hhz672y31.jpg" alt="Logitech Lift looks like a droplet of water with a buttons rotates to the side of the droplet. It is a bit too small for my hands" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It took a week to get used to it - I have been using a touchpad for a long time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Side note: When a coworker asked me for help on her computer, I struggled to move the cursor on her machine. She used an Apple mouse - I kept trying gestures on the surface of the mouse, treating it as if it was a touchpad. She had to remind me how to use a mouse.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While this was helpful, I think, this benefits mainly the wrist and not the fingers, as I still needed to do a lot of typing. Also, clicking with index fingers all day can get tiring, even more than a touchpad.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: unlike with a touchpad, the mouse makes vertical scrolling harder, scrolling in both directions at once impossible, and worst of all disallows a pan gesture (a lifesaver for cutting off ads on the side of the web pages). Apps that rely on gestures (like Figma) need to provide alternatives for mouse users and keyboard users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Trackball
&lt;/h2&gt;

&lt;p&gt;Trackball is an ever more niche category of ergonomic pointers than mice. Based on multiple sources, &lt;a href="https://www.amazon.com/dp/B0DK8XVVSTp" rel="noopener noreferrer"&gt;Kensington SlimBlade Pro Wireless Trackball&lt;/a&gt; is the best available option.&lt;/p&gt;

&lt;p&gt;And to be honest, I could not resist how cool it looks. Reminds me of HAL 9000 from 2001, except I am in control.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnulhxuzoaj1mfai04j8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnulhxuzoaj1mfai04j8.jpg" alt="The trackball is good conversation starter" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has ergonomic benefits over a vertical mouse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no need to move the wrist&lt;/li&gt;
&lt;li&gt;can move the ball with any finger, multiple fingers, or other parts of the hand - changing position throughout the day helps distribute the stress&lt;/li&gt;
&lt;li&gt;scrolling does strain a single finger but distributes the task over 3 fingers (to scroll, rotate the trackball horizontally)&lt;/li&gt;
&lt;li&gt;symmetric design, so you can switch between left and right hand throughout the day&lt;/li&gt;
&lt;li&gt;does not move on the table, so requires less space, does not require a mousepad, and is not in danger of being knocked over&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And benefits over a touchpad:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fingers can rest on the surface of a trackball, rather than hover in the air (or worse - be curled up with just one finger extended) - less strain when all fingers are pretty flat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, with trackballs being a very niche market, it does feel like the industry is a decade behind. Kensington's trackball, despite being called the best option on the market, has issues that would be embarrassing for any other $100 mouse in 2025:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The buttons around the trackball are very loud - louder than any mice I ever heard - to the point I was considering returning the product because my ears would get tired. It is a bit more tolerable now that I am used to it, but I still prefer to put on headphones to drown out the noise. I am sorry for my coworkers.&lt;/li&gt;
&lt;li&gt;These same buttons are hard to press, and the force of the click is not even across the surface.&lt;/li&gt;
&lt;li&gt;The trackball can only connect over Bluetooth to one device at a time - you need to "forget this device" and enter pairing again to switch between them.&lt;/li&gt;
&lt;li&gt;Rotating the trackball creating a rubbing sound (and yes, I cleaned the trackball). Pressing on the body of the trackball also creates a scratching sound.&lt;/li&gt;
&lt;li&gt;It takes 5s to wake up from sleep mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite these issues, it grew on me. Still, the index finger and middle finger pain was not disappearing, so I kept exploring other options.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: trackball is not a trackball mouse - there is no middle mouse button click and no vertical scrolling. Sites need to provide an alternative to vertical scrolling. More tech savvy users might get away with using arrow key or tab, assuming your vertical scrolling did not break those.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Controlling the computer with a gamepad
&lt;/h2&gt;

&lt;p&gt;Gamepads are not just for gaming - with the help of software, you can use them to control the computer quite well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0mka96wf46zvbfp701x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs0mka96wf46zvbfp701x.jpg" alt="While DualSense supports wireless, my controller battery has gone bad from disuse so I was plugged in most of the time" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I took my rarely used DualSense controller out of the closet and configured it to control my Mac with the help of a few programs:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://apps.apple.com/us/app/gamepad-mapper/id1517291304?mt=12" rel="noopener noreferrer"&gt;Gamepad Mapper&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Allows assigning a keyboard action or mouse action to each gamepad button. Summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Many features, but you have to pay for each.&lt;/li&gt;
&lt;li&gt;Has complex sequences support and macros, though those don’t always work (sometimes key combinations are executed out of order).&lt;/li&gt;
&lt;li&gt;Requires a lot of clicks to set up.&lt;/li&gt;
&lt;li&gt;No easy way to share the configuration between two of my laptops - and configuration is split over many windows so manually synchronizing it is a (finger) pain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://apps.apple.com/us/app/controlly/id1548544614?mt=12" rel="noopener noreferrer"&gt;Controlly&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Even though I already paid for Gamepad Mapper, I decided to try out Controlly as well. Summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pay once to unlock all features.&lt;/li&gt;
&lt;li&gt;Fewer clicks to set up and all configuration is in one window, but still need to manually synchronize between my two laptops.&lt;/li&gt;
&lt;li&gt;Can create gestures using DualSense's touchpad - this ended up very useful for switching between desktops, and doing copy or paste.&lt;/li&gt;
&lt;li&gt;Fewer features but I did not miss any, and the app worked better overall.&lt;/li&gt;
&lt;li&gt;The app crashes about once a day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My endgame configuration:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv55gb7t878ha2p5uzwzs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv55gb7t878ha2p5uzwzs.jpg" alt="A picture of Controlly settings panel with all gamepad buttons assigned to most common computer actions and mouse clicks" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Main impressions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With a gamepad, most of the load is on the thumbs - they started to hurt more after a week.&lt;/li&gt;
&lt;li&gt;Typing with an on-screen keyboard with a gamepad is slow and hard. I tried to compliment this with on-screen iPad keyboard (via Sidecar), but that was slow too and lead to finger pain too.&lt;/li&gt;
&lt;li&gt;The joysticks are not precise enough - trying to make many small micro-movements did not help with finger pain.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: increase the size of the click targets. Allow to undo actions, or add prompts to guard against misclicks. Reduce timer-based actions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Foot pedals?
&lt;/h2&gt;

&lt;p&gt;I heard that some in the accessibility community use foot pedals - seemed like an awesome idea given that then I can give my hands a complete rest!&lt;/p&gt;

&lt;p&gt;After searching Amazon, I was disappointed as all options appeared clunky, limited in how many actions they could do, and more expensive than a gamepad. Then I realized that I could use my gamepad as a foot pedal! I just needed to put it on the floor and use it with my feet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoq4qwz978f9rp2mb85f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpoq4qwz978f9rp2mb85f.jpg" alt="Gamepad on the floor works best when used with a foot rest so that you can adjust feet position better." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Typing with feet is not easy. I quickly realized that the maximum movement range of even the largest toes is smaller than that of a pinky. This required my feet to move more to compensate.&lt;/p&gt;

&lt;p&gt;After a day of typing, feet do get tired (especially the "extensor retinaculum" - the muscle that lifts the toes). Breaks were helpful (the fact that I work hybrid day every day was nice). A low-height footrest was also helpful for lifting my feet off the ground, hanging off the edge of the footrest, to control the gamepad on the floor.&lt;/p&gt;

&lt;p&gt;On-screen typing became even harder compared to using a gamepad with my hands (my typing speed was down to single-digit words per minute), so I kept experimenting. But knowing that I can work even at some capacity without using my hands at all was a huge relief - now just need to improve things further.&lt;/p&gt;

&lt;p&gt;Honestly, typing with feet is an interesting office conversation starter. I did the "look ma, no hands! mind control!" thing to my colleagues. It was also funny when I made a typo in a pull request - meant to type "feat" (short for "feature") but ended up saying "feet" instead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: make sure the UI works at larger zoom levels. Reduce the need for double clicks and dragging or provide alternatives.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Voice typing and voice control
&lt;/h2&gt;

&lt;p&gt;As a quiet introvert, I prefer to speak less if I can help it. Prior to RSI, text was my preferred medium over voice in most communication. I never before liked voice typing: I lose privacy in what I am saying and I get self-conscious talking out loud in the office or next to my roommate. Worst of all, the accuracy is not great, and my accent makes things even worse.&lt;/p&gt;

&lt;p&gt;Still, faced with very slow typing speed from feet typing, I was willing to try anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  macOS Dictation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft094atfftxh6fo61lxuu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft094atfftxh6fo61lxuu.jpg" alt="When activated, dictation shows a little microphone next to the input field" width="800" height="162"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I saw this feature in settings before and decided to try it out. I would spare you the details of how it works as you can read that anywhere else online, but here are my impressions of using it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It works quite great for conversational English, but not so much for technical terms. Issue-&amp;gt;Isha, Pull Request-&amp;gt;Full Request, Ergonomic-&amp;gt;Economic, and most annoying, Then-&amp;gt;Zen. It was hard to stay zen when it kept mishearing me.&lt;/li&gt;
&lt;li&gt;The tool exits anytime the input loses focus - you need to start it again. While visually the tool starts as soon as you activate it, it doesn't actually start listening until a few seconds later, which slowed me down and often cut off the first few words of my sentences.&lt;/li&gt;
&lt;li&gt;Behind the scenes, rather than emulating a keyboard, it uses some special text composing - while some apps and websites are fine with it, it does not work well at all in VS Code and has issues in MS Teams.&lt;/li&gt;
&lt;li&gt;It is quite buggy - fails to start sometimes for no good reason. Worse, I am not sure why, but if the controller is connected to the computer, dictation refuses to start half the time, making it tricky to combine the two.

&lt;ul&gt;
&lt;li&gt;Issues with dictation are reported commonly online. Executing the &lt;code&gt;killall corespeechd&lt;/code&gt; command in the terminal is the recommended workaround - it restarts the dictation service. This command works 70% of the time for me, but sometimes only for a few minutes, so I ended up creating a keyboard shortcut for it.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tylon
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy8gwxp9gfgjdsbtuze7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy8gwxp9gfgjdsbtuze7.jpg" alt="Tylon does not have much of a user interface, with most interactions happening from menu bar or Python scripts" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since macOS Dictation does not work for coding, I tried out Tylon - a tool I heard again and again in discussions of RSI. My impressions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is not just for typing but also allows voice control over the entire computer.&lt;/li&gt;
&lt;li&gt;Steep learning curve.&lt;/li&gt;
&lt;li&gt;Very customizable with Python, though I wasn't excited to spend hours painfully typing scripts to make it work for me. Tylon is commonly used with additional software, which also requires configuration and learning.&lt;/li&gt;
&lt;li&gt;The worst at recognizing my accent (Ukrainian English) among all the tools I tried. Tylon suggests accent coaching, which is something I will explore, but I needed a short-term solution so that I could continue working. Their docs also suggested $300-$1000 microphones for best results (my Sony XM5 has great microphones, but not good enough?). Worse, while the tool has a large community of Python scripters, the tool itself is not open-source. I was hoping to Jerry-rig a custom voice recognition model into it (based on whatever is the best on the HuggingFace leaderboard that day), but that is not possible. This doomed the tool for me&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  macOS Voice Control
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffb7bt9rrquqa1yii8pjm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffb7bt9rrquqa1yii8pjm.jpg" alt="Voice Control can be enabled from accessibility settings" width="800" height="1208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regular dictation lacks any kind of editing or mistake correction. Voice Control builds on top with powerful text editing, as well as commands for controlling the computer. Moving the mouse, clicking, pressing keys, switching between apps, finding text - all can be accomplished with simple voice commands. Impressions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quite easy to learn (easier than Tylon, and easier than VoiceOver, which is sort of the opposite of Voice Control).&lt;/li&gt;
&lt;li&gt;It has many built-in commands, and you can create custom, but it does not come close to the customizability of Tylon - not great for long-term power users.&lt;/li&gt;
&lt;li&gt;Subject to the same bug as regular dictation - does not work well when the controller is connected and does not work well in VS Code.&lt;/li&gt;
&lt;li&gt;macOS dislikes fullscreen mode for apps (several keyboard shortcuts and features are not supported in fullscreen). Voice Control is no exception.&lt;/li&gt;
&lt;li&gt;It takes surprisingly long to do simple tasks like switching apps, clicking on a button on a page, or scrolling. Worse, while a misinterpretation in dictation is annoying, a misclick can be much worse (I lost a form with painstakingly entered data due to a tab getting closed via a misrecognized command).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-speech" rel="noopener noreferrer"&gt;VS Code Speech&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nupkcu5ec2xzjnfikbb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nupkcu5ec2xzjnfikbb.jpg" alt="VS Code Speech adds a voice input option for GitHub Copilot Chat" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one has been hyped a lot. There are many amazing demos on YouTube of people saying very high-level commands like "write a Fibonacci function" or "invert this condition" and the tool does it perfectly. The only thing - all of those demos were under 3 minutes long.&lt;/p&gt;

&lt;p&gt;And that's for a reason. The tool totally does not work for any serious work.&lt;/p&gt;

&lt;p&gt;It does not wait for you to finish talking and start executing. It is slow. You can't use it fully without a mouse/keyboard. And it is not very customizable.&lt;/p&gt;

&lt;p&gt;Honestly, I am very bullish on where this is going, but today this is somewhere between a joke and an impressive tech demo.&lt;/p&gt;

&lt;p&gt;While the execution of the voice support is poor, the code generation is somewhat better - it uses GitHub Copilot Chat. Copilot can be extremely helpful if you are doing something that has been done a thousand times before (React components), and are not too particular about code style or code quality. In my case, however, I am writing frameworks/compilers, a dozen ESLint rules, and other developer tools, and am frequently using poorly documented TypeScript compiler APIs or obscure Vite/Rollup features - Copilot is more than useless on those.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serenade
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk94qujipgop7qf6vbbgm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk94qujipgop7qf6vbbgm.jpg" alt="Serenade displays an overlay with recognized text and possible alternatives" width="800" height="1020"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I remember being in positive delight when I discovered this tool. I was having a hard time falling asleep from excitement - a tool with capabilities and customization of Tylon, the user experience of macOS dictation, and AI features of VS Code Speech. Best of all - free?&lt;/p&gt;

&lt;p&gt;Well, the catch is that this tool is from a defunct startup, and is no longer maintained. The voice is processed on a remote server, that is still generously being supported, but do not expect any bug fixes (and there are some bugs, along with random crashes).&lt;/p&gt;

&lt;p&gt;Summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports high-level editing ("move function up 3 lines", "scroll to top of file").&lt;/li&gt;
&lt;li&gt;The AI model has been trained on most common programming languages - it scans the surrounding text, and auto-inserts the syntax noise for you (you can say "insert import test from vitest" and it will write &lt;code&gt;\nimport { test } from 'vitest';&lt;/code&gt; for you - really impressive).&lt;/li&gt;
&lt;li&gt;Automatically decides between camelCase, kebab-case, ffetc - works great most of the time, with an easy way to explicitly specify the case if needed.&lt;/li&gt;
&lt;li&gt;Uses regular keyboard presses, arrow keys, and backspace rather than magic internal APIs (shame on you Apple), which means it works everywhere. And if some bad website manages to break even basic text entry, the tool can spawn a "compose" window for writing text, before it gets copied over.

&lt;ul&gt;
&lt;li&gt;It has first-class integration with VS Code (via an extension). One con however is that no matter which text input you focus on (search, editor, terminal), it will always type into the editor.&lt;/li&gt;
&lt;li&gt;It has a Chrome extension for voice control of the browser, but the extension has not been updated in a while and Google no longer allows you to install it. Fortunately, unless you wish to switch tabs with the browser, all text entry works in every app without requiring explicit support.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;When active, the tool draws overlay with a live preview of recognized text/action, and a list of possible alternatives - switching between them is as simple as saying aloud the number next to the alternative.

&lt;ul&gt;
&lt;li&gt;A con is that the overlay only draws on top for non-fullscreen apps (again, macOS hates fullscreen mode). My employer generously provided me with 3 monitors, so I used one of the monitors just for the overlay.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;The most annoying bug is that the tool sometimes jumps the cursor to a random place, and starts typing there - or worse, even overrides the text you wrote (and sometimes even corrupts the undo stack so you can't get it back).&lt;/li&gt;

&lt;li&gt;Great at technical terms and industry-specific terms (ESLint, TypeScript, GitHub, pull request, console.log). At the same time, very bad for the most common English words (then, than, with, and, when, we, be). It seems like their training data filtered out these too aggressively. I don't think it ever correctly recognized "then" or "with" once, forcing me to avoid those words in code comments.

&lt;ul&gt;
&lt;li&gt;For everything that is not a technical term or a common word, the voice recognition with my accent is quite good, but a bit worse than macOS dictation. Impressive feat from Apple, given that dictation runs locally, whereas this tool requires an internet connection.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: the voice control tools of today are significantly better than those even a decade ago, but are still very frustrating to use, struggle with technical terms, and mis-recognize a lot. Consider using simpler words in the UI, and avoid auto-submitting forms as they make correcting mistakes harder.&lt;/p&gt;

&lt;p&gt;Moreover, tools like Voice Control and Tylon provide a better experience when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;each clickable control on the page has a distinct name (that at the same time is short and easy to pronounce for the sake of the user)&lt;/li&gt;
&lt;li&gt;the visible button text matches the accessible label&lt;/li&gt;
&lt;li&gt;clickable icons have a common and intuitive label&lt;/li&gt;
&lt;li&gt;the page, or even entire website uses consistent naming for things &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;I ended up using Serenade for coding alongside macOS dictation for all non-coding text entry. For non-text entry (general mouse control), I used my feet with a &lt;del&gt;gamepad&lt;/del&gt; iPad:&lt;/p&gt;

&lt;h3&gt;
  
  
  iPad as a giant feet-touchpad
&lt;/h3&gt;

&lt;p&gt;A gamepad was not the only device I seldom used prior to the RSI journey - I also had an iPad that I almost never used since I graduated from university. After being frustrated with how imprecise the gamepad was for mouse control, I tried out using the iPad as a touchpad for the laptop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxvhdh55nq60hkjhqd6h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxvhdh55nq60hkjhqd6h.jpg" alt="iPad is a weird thing to see under the table, but a surprisingly useful one." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many software options for this - I stuck with the first one I found: &lt;a href="https://www.remotemouse.net/" rel="noopener noreferrer"&gt;Remote Mouse&lt;/a&gt;. Summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The 10'' iPad is a much larger touch surface than most touchpads and allows for much more precision than a gamepad - after a few days, I got very fast at using it as a mouse for all daily tasks.&lt;/li&gt;
&lt;li&gt;Local network device discovery in Remote Mouse worked even on a corporate VPN network, which was a nice surprise. You also have Bluetooth as a backup, which worked fine, but not as good as Wi-Fi.&lt;/li&gt;
&lt;li&gt;It was not designed for foot use - there are many annoying buttons on the sides of the screen (including a gigantic button at the top for disconnecting from the computer - why???).

&lt;ul&gt;
&lt;li&gt;Some buttons are disableable, but most are not. Fortunately, an iPad accessibility feature, Guided Access, proved very handy:&lt;/li&gt;
&lt;li&gt;It allows locking the iPad into a single app, disabling notifications panel and home screen gestures.&lt;/li&gt;
&lt;li&gt;Even better: it allows me to disable parts of the screen, letting me disable all annoying UI elements.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;The default background is bright green, which can't be good for display burn-in - fortunately, I was able to replace it with pure black.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Note that the iPad has a slippery back, made worse when placed on a carpet - probably less of an issue if you have a case, but I went for a more low-tech solution: cardboard and double-sided duct tape.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: an app designed for fingers can be used with feet, or some other part of the body - do not assume that because a button is on the edge of the screen, it won't get in the way. Consider adding customization to your app to let users tailor it to their workflow - this is doubly important if your app serves as an accessibility tool (like Remote Mouse commonly does).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Expensive Ergonomic Split Columnar Programmable Mechanical keyboard (add more buzzwords here)
&lt;/h2&gt;

&lt;p&gt;At this point, I found a really good workflow that allowed me to get to 50-60% of my pre-RSI input speed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serenade for coding&lt;/li&gt;
&lt;li&gt;macOS dictation for all other text entry&lt;/li&gt;
&lt;li&gt;iPad as a touchpad for all mouse control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used the above for two weeks, without touching a mouse or keyboard once (turns out the keyboard gets dusty quickly when not in use). While this was a great life-saver, I cannot imagine doing this for years, so I began doing a lot of research into ergonomic keyboards. I never owned a mechanical or ergonomic keyboard before, and certainly never any that was worth over $50.&lt;/p&gt;

&lt;p&gt;After hours of research, I realized that the best options start at $300, and some go even north of $500. The sticker price was quite a shock, and it took a few days to convince myself to pay that much for a keyboard. However, I realized that the opportunity cost of not buying it was much higher - lost productivity or worse, costly surgery that might even produce results. In those terms, the decision was a no-brainer, and the keyboard cost was less than the cost of the time spent deciding to buy it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gihjzxb7chm7foy4y5a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gihjzxb7chm7foy4y5a.jpg" alt="At one point I was using the Glove80 keyboard and gamepad at the same time" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My choice was &lt;a href="https://www.moergo.com/collections/glove80-keyboards/products/glove80-ergonomic-keyboard-revision-2-with-silent-switches?variant=50146620965137" rel="noopener noreferrer"&gt;Glove80 with Cherry Blossom 30gf silent switches&lt;/a&gt; for $425. Glove80's website looks ugly - somewhere between an old Google Blogger and a scam e-shop, but the reviews all said the same thing: this is not the most user-friendly keyboard, but it is the most ergonomic keyboard money can buy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzoibzo14c1qnynbjkttd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzoibzo14c1qnynbjkttd.jpg" alt="Unlike regular keyboards, many ergonomic keyboards are split or have curved key-wells" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Glove80 has amazing ergonomic features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Split design so you can position the two halves at a more natural distance from each other, rather than using a cramped laptop keyboard.&lt;/li&gt;
&lt;li&gt;Regular keyboard severely underutilizes the thumbs - they are responsible for only a single key. On Glove80, each thumb is responsible for 6 keys, which reduces load on other fingers and speeds up typing.&lt;/li&gt;
&lt;li&gt;The keys are arranged in columns to minimize the need for sideways finger motion.&lt;/li&gt;
&lt;li&gt;The keys have super low actuation force, lower than in a MacBook, reducing finger pressure. At the same time, the travel distance of keystroke is larger, so you don't hit the hard bottom as often.&lt;/li&gt;
&lt;li&gt;The key wells are curved - to the shape of each finger - this way each key is equal distance away.&lt;/li&gt;
&lt;li&gt;Keyboard can be tented (angled) to reduce wrist rotation.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Developer takeaway: ergonomic keyboard may use non-QWERTY layouts or have a reduced number of keys, making some keyboard shortcuts inconvenient or impossible. Allow users to customize default keyboard bindings.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Having not typed for two weeks, my finger pain was pretty much gone. So when the keyboard arrived, I was excited to geek out hard on it (setup layers, macros, tap-dance features, home row mods, etc...). The only thing I did not do is custom layout as I do not believe it to be a sufficient benefit in my case, and not worth the inconvenience when searching for scattered keyboard shortcuts or presenting on a shared computer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://my.glove80.com/#/layout/user/de431838-03d3-4767-bc75-22720ce1df2f" rel="noopener noreferrer"&gt;My Glove80 setup &amp;amp; macros&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The keyboard is pretty amazing - maybe I should write a separate article on it once I get more experience using it. What wasn't one bit amazing was my fingers: despite the keyboard being ergonomic, my finger pain got worse than ever before after just a day of full-time use. Over the following 3 days, I stopped typing completely, yet the pain was only getting worse, making even eating and showering painful. I had one full day at work of just planning meetings - no typing at all, yet I couldn't help but fear silently as my fingers were hurting.&lt;/p&gt;

&lt;p&gt;Needless to say, I was very worried.&lt;/p&gt;

&lt;p&gt;That was a month ago.&lt;/p&gt;

&lt;p&gt;Since then I realized that while the initial finger pain was physical, the most recent manifestation was psychological. Read &lt;a href="https://dev.to/maxpatiiuk/my-journey-with-rsi-4f9m"&gt;my journey with RSI&lt;/a&gt; for an account of my experience and the solution.&lt;/p&gt;

&lt;p&gt;Today I am able to type on the Glove80 keyboard for 12 hours a day, 7 days a week and the pain is less and less every day.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8vqb26orsuao3drp1dh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8vqb26orsuao3drp1dh.jpg" alt="A standing desk and a laptop raiser are useful ergonomic compliments" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Footnote: the input methods of the future
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Voice control will only get better. With help from AI, you will be able to give very high level commands to perform complex code edits.&lt;/li&gt;
&lt;li&gt;Virtual reality and augmented reality: with use of Quest 3 controllers and &lt;del&gt;on-screen&lt;/del&gt;~ in the air controlls, one can draw complex 3d computer controls. Moving hands over the virtual control can register as a click or drag - that will be lower stress for fingers since there is no constant pressure of pressing the keyboard key down.&lt;/li&gt;
&lt;li&gt;Neuralink will be society-changing. I do not understand people hating on brain-computer interfaces - they can enable disabled people to enjoy life to the fullest once again and control computer at the speed of thought. I worked in a brain-computer interfaces lab in the past, so have some appreciation for how complicated the work ahead is, but also how big the potential payoff can be.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rsi</category>
      <category>keyboards</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Optimistic Determinism and Existentialism</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Mon, 04 Sep 2023 04:21:34 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/optimistic-determinism-and-existentialism-5f2a</link>
      <guid>https://dev.to/maxpatiiuk/optimistic-determinism-and-existentialism-5f2a</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt;: It's okay to appreciate the advancements society has made, feel humbled by the scale of human progress, and yet still strive for meaningful contributions toward advancing human civilization.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Rational algorithms
&lt;/h2&gt;

&lt;p&gt;The world is far from perfect, and humans are far from rational. It's not hard to come up with examples of inefficient systems or irrational behavior. And yet, when you look closer, many important situations in our daily life are already optimized to produce the best possible outcome given the practical constraints.&lt;/p&gt;

&lt;p&gt;A few examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Triage in Emergency Situations&lt;/strong&gt;: In situations like natural disasters or pandemics, medical personnel follow a triage system aimed at saving the most lives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive Taxation&lt;/strong&gt;: Taxing the rich at higher rates is justified on the grounds that money has diminishing marginal utility, and wealth redistribution can increase overall happiness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost-Benefit Analyses&lt;/strong&gt;: Many companies use these to decide on new initiatives, weighing the expected utility of different options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standardized Testing&lt;/strong&gt;: Designed to allocate educational resources where they could be most useful, although this is often a subject of debate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-life limitations
&lt;/h2&gt;

&lt;p&gt;Besides these, there are many rules in modern society - while some of them are outdated, many are based on what has been shown to be true (i.e. faster speeds are more dangerous, and drunk driving kills).&lt;/p&gt;

&lt;p&gt;Similarly, while Democracy has flaws, it's better than all the other systems we have (until we have AGI).&lt;/p&gt;

&lt;p&gt;More importantly, while I was deeply infuriated reading about the irrationality of much human behavior or the inefficiencies of systems, I am seeing that in many cases these systems are already very good, given the practical realities they had to work in (i.e. while USCIS is very slow, even by government agency standards, &lt;a href="https://www.reddit.com/r/USCIS/comments/y4xb08/why_is_uscis_so_slow_from_a_former_officers/" rel="noopener noreferrer"&gt;they are pretty good given how underfunded they are and how high of a turnover they have, and how many artificial roadblocks they have&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Additionally, while it's easy to critique a system, it's harder to propose a solution, and much much harder to propose a solution that actually works once all the complexities and practical constraints are account for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimistic Determinism
&lt;/h2&gt;

&lt;p&gt;From reading history, it's easy to see how much the systems we have today, at least in the Western world, are substantially better than what we had in the past (even 10 years ago), and constantly improving, and most likely will keep on improving (just think of the lax food standards in the past, or how the future generations in the US would be astonished at why it took their ancestors so long to set up proper gun control laws).&lt;/p&gt;

&lt;p&gt;For example, while humans have been slow to react to climate change, the momentum is finally increasing, and while it may not increase as fast as we might want, in my opinion, the momentul is unlikely to stop (aided with increasing climate crises) until the climate change issue is resolved, at which point our society would have transformed a lot for the matter - towards more sustainable use of resources, and away from fueling oil monopolies and dictatorships (no pun intended).&lt;/p&gt;

&lt;h2&gt;
  
  
  Existentialism
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Existentialism - The realization of individual insignificance in the grand scheme of things, but still finding value in personal actions&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While all of this is extremely well, it at the very least hints at how individuals are irrelevant, or at least not crucial in many situations (like in the Seldon Plan from the Foundation). Most of us can't hope to single-handedly change a large system. While in an unlikely scenario, you might produce some invention that has huge positive impact, even if that were to happen, it's highly certain that if you weren't there someone else would have made that discovery sometime later, given that most discoveries are enabled or inspired by something prior to it. For example, advancement in computers caused a lot of inventions, and even if some particular people weren't there to make these inventions, someone else would have likely been there to make the invention now that they are enabled by powerful computers.&lt;/p&gt;

&lt;p&gt;The realization is that, while an individual might be able to improve a large system or create a new system with the help of others, it's unlikely that their contribution alone was the deciding factor between complete failure and utter success - even without you in the picture, some measure of success would have been achieved, maybe a bit later, but still.&lt;/p&gt;

&lt;p&gt;All of this makes me rather sad about the low value of individuals today, and even lower value of individuals in the distant future when there are many billions more intelligent beings in the galaxy. Not to mention that more and more important tasks are being done by computers/AI systems/robots.&lt;/p&gt;

&lt;p&gt;It makes me think that while I ought to try my best in my, all to short, lifetime to improve the human condition as much as possible, my individual actions or failures won't likely count for too much, so I might as well relax a bit and enjoy the process a bit more.&lt;/p&gt;

&lt;p&gt;What do you think about this thinking of mine?&lt;/p&gt;

</description>
      <category>philosophy</category>
      <category>ethics</category>
      <category>singularity</category>
      <category>utilitarianism</category>
    </item>
    <item>
      <title>Proton Unlimited: A comprehensive review</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sat, 22 Jul 2023 21:34:10 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/proton-unlimited-a-comprehensive-review-372a</link>
      <guid>https://dev.to/maxpatiiuk/proton-unlimited-a-comprehensive-review-372a</guid>
      <description>&lt;p&gt;I was using ExpressVPN ($8.33/month if subscribed yearly) with no complaints, until I stumbled upon Proton Unlimited - a comprehensive offering from the company famous for privacy and security. Proton Unlimited includes 500 GB of drive storage, mail, calendar, contacts, password manager, and a VPN - all for just $7.99/month (if subscribed for 2 years).&lt;/p&gt;

&lt;p&gt;More services, for less money, and from a company with a noble mission? That sounds like a no-brainer!&lt;/p&gt;

&lt;p&gt;Until I dug deeper...&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;This review was written in July of 2023. Proton services are changing and expanding rapidly so things may have changed since then.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; The goal of Proton is to match Google's services on the usability front, but without compromising users' security and privacy - this is a very hard challenge and without doubt, Proton is not yet there on the usability front.&lt;/p&gt;

&lt;h2&gt;
  
  
  The good
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;If you are someone who is not satisfied with Google's offerings and wants as close to absolute security as practically possible, Proton is definitely the way to go.&lt;/p&gt;

&lt;p&gt;With end-to-end encryption, Tor services, a VPN offering, and a no-logging policy, Proton is without doubt stronger than Google on this front.&lt;/p&gt;

&lt;p&gt;The Mail web app has nice features like a confirmation before going to an external link to prevent phishing and end-to-end encryption (though might not work if sending mail to a non-proton email address).&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy
&lt;/h3&gt;

&lt;p&gt;Proton has a great reputation for respecting your privacy, not mining/selling your data, and doing their best to keep your identity incognito.&lt;/p&gt;

&lt;p&gt;In addition to the behind-the-scenes privacy magic, there are nice pro-user features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can have up to 15 email addresses (though, this isn't a big perk as those who own a domain name can get infinitely many aliases, even without Proton).&lt;/li&gt;
&lt;li&gt;Sieve filters are a nice perk too - allow for advanced filtering of mail (Cloudflare is now getting something similar - Email workers)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But to cut a long story short, things are pretty simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you are a security enthusiast, and don't feel satisfied with Google, and are happy to trade of usability for security and privacy, then Proton is a no-brainer.&lt;/li&gt;
&lt;li&gt;If you feel satisfied with security in Google (2FA, passkeys, security logs, standard encryption, smart spam filters) and love all the integrations and features it provides (one of the best web drive clients, one of the best, if not the best calendars in the world, nice to use contacts system) and are not afraid to trade off some privacy for nice features (AI auto reply and autocomplete, location suggestions, contact suggestions, personalized Google search, Google timeline integration), Google is the way to go.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The bad
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;Since all content across Proton apps needs to be encrypted/decrypted, performance suffers. Uploading a file to drive, opening a file, reading an email, or going between weeks in the calendar all feel slower than when using more conventional software.&lt;/p&gt;

&lt;h3&gt;
  
  
  Usability &amp;amp; Features
&lt;/h3&gt;

&lt;p&gt;Don't get me wrong - Proton looks nice. The user interface is beautiful, but it's severely lacking in features for those coming from Google.&lt;/p&gt;

&lt;p&gt;Case in point:&lt;/p&gt;

&lt;h4&gt;
  
  
  Mail
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Can't forward mail from Proton&lt;/strong&gt;. This is a deal breaker. This means that if you ever wish to migrate off Proton to another email address and forward all your mail, you are out of luck - you are stuck with Proton for life.&lt;/li&gt;
&lt;li&gt;Similarly, there is no ability to send mail from non-Proton addresses (in Gmail you can send email not just from your address, but add a school account, work account, and all other personal accounts too).&lt;/li&gt;
&lt;li&gt;Some websites block Proton emails during registration due to ProtonMail being used for crime/scams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, all of Proton's services suffer from a common issue:&lt;br&gt;
Mobile apps, desktop apps, and web apps are not available consistently on all platforms, and there is a lack of feature parity between platforms.&lt;/p&gt;

&lt;h4&gt;
  
  
  Drive
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Can't edit docx files&lt;/li&gt;
&lt;li&gt;Can't play videos without downloading them first&lt;/li&gt;
&lt;li&gt;Can't navigate between pictures in a mobile app - you have to open each image individually, close it, then open the next one - simply swiping left/right won't work&lt;/li&gt;
&lt;li&gt;The desktop client is not available for macOS (although I personally am a web purist, others would appreciate desktop synchronization)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Calendar
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;No keyboard shortcuts&lt;/li&gt;
&lt;li&gt;Limited to 25 calendars even on the paid plan (I am using 16 on Google Calendar, so would be close to the limit)&lt;/li&gt;
&lt;li&gt;Can't set the calendar to an arbitrary color&lt;/li&gt;
&lt;li&gt;Can't set event color independent of calendar color&lt;/li&gt;
&lt;li&gt;No ability to attach files to events&lt;/li&gt;
&lt;li&gt;No year view&lt;/li&gt;
&lt;li&gt;No strong community of browser extensions (i.e. see &lt;a href="https://chrome.google.com/webstore/detail/calendar-plus/kgbbebdcmdgkbopcffmpgkgcmcoomhmh" rel="noopener noreferrer"&gt;Calendar Plus&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;No integration with places APIs to provide suggestions when setting a meeting place - autocomplete the city name or the local restaurant name - this was likely done as a compromise to preserve user privacy&lt;/li&gt;
&lt;li&gt;No integration with Zoom/Teams/Meets to create a virtual meeting&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Contacts
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No sync with ios/android contracts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;No standalone web page - just a sidebar in the mail app&lt;/li&gt;
&lt;li&gt;No custom fields&lt;/li&gt;
&lt;li&gt;Setting a contact's picture is not intuitive, and the picture is not even displayed in the list of contacts - you have to click on the contact to see it&lt;/li&gt;
&lt;li&gt;Contact groups and contacts merge are available, but more limited in functionality than what Google Contacts offers&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Passwords
&lt;/h4&gt;

&lt;p&gt;Here, I will be comparing against Bitwarden - one of the best password managers, with a generous free plan and a $10/year premium plan.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No desktop app&lt;/li&gt;
&lt;li&gt;No standalone website (only a browser extension)&lt;/li&gt;
&lt;li&gt;While it allows hiding your email using a random email alias, you can only forward mail to your proton email address - not to an external address, and thus once again, tries to lock you in for life (given that you can't forward mail from Proton to external service, i.e Gmail)&lt;/li&gt;
&lt;li&gt;No password history for an account&lt;/li&gt;
&lt;li&gt;No emergency access (in case the primary account owner dies)&lt;/li&gt;
&lt;li&gt;No secure password and data sharing (though promised to come in the future)&lt;/li&gt;
&lt;li&gt;No ability to configure auto-lock upon computer restart&lt;/li&gt;
&lt;li&gt;No biometrics integration (can't use a fingerprint to unlock your vault)&lt;/li&gt;
&lt;li&gt;Limited list of available password managers for import&lt;/li&gt;
&lt;li&gt;No domain rules (can't tell it that gmail.com and google.com and youtube.com share the same account)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  VPN
&lt;/h4&gt;

&lt;p&gt;I will keep this short as there are many excellent existing comparisons (&lt;a href="https://www.safetydetectives.com/blog/expressvpn-vs-protonvpn-comparison/" rel="noopener noreferrer"&gt;safetydetectives.com&lt;/a&gt;, &lt;a href="https://restoreprivacy.com/vpn/comparison/expressvpn-vs-protonvpn/" rel="noopener noreferrer"&gt;restoreprivacy.com&lt;/a&gt;, &lt;a href="https://www.vpnmentor.com/vpn-comparison/expressvpn-vs-protonvpn/" rel="noopener noreferrer"&gt;vpnmentor.com&lt;/a&gt;, &lt;a href="https://www.security.org/vpn/expressvpn-vs-protonvpn/" rel="noopener noreferrer"&gt;security.org&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Proton VPN provides slightly fewer servers than Express VPN. Which of the two services is faster is a close call - depends on your location and which server you are trying to connect to.&lt;/p&gt;

&lt;p&gt;My testing results (located near Los Angeles, using Spectrum Internet ultra - "up to 500mbs", connecting to nearest/fastest/recommended server in all cases, all settings are optimized for max performance, no other devices using the network intensively during this time):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Without VPN&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Google Speed Test&lt;/th&gt;
&lt;th&gt;speedtest.net (by Ookla)&lt;/th&gt;
&lt;th&gt;fast.com (by Netflix)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Download&lt;/td&gt;
&lt;td&gt;125.2mbps&lt;/td&gt;
&lt;td&gt;134.15mbps&lt;/td&gt;
&lt;td&gt;120mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upload&lt;/td&gt;
&lt;td&gt;12.6mbps&lt;/td&gt;
&lt;td&gt;17.43mbps&lt;/td&gt;
&lt;td&gt;17mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;13ms&lt;/td&gt;
&lt;td&gt;22/155/32ms&lt;/td&gt;
&lt;td&gt;22/120ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;ProtonVPN&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Google Speed Test&lt;/th&gt;
&lt;th&gt;speedtest.net (by Ookla)&lt;/th&gt;
&lt;th&gt;fast.com (by Netflix)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Download&lt;/td&gt;
&lt;td&gt;116.3mbps&lt;/td&gt;
&lt;td&gt;117.35mbps&lt;/td&gt;
&lt;td&gt;110mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upload&lt;/td&gt;
&lt;td&gt;11.4mbps&lt;/td&gt;
&lt;td&gt;17.65mbps&lt;/td&gt;
&lt;td&gt;16mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;1ms&lt;/td&gt;
&lt;td&gt;27/141/34ms&lt;/td&gt;
&lt;td&gt;95/195ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;ExpressVPN&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Google Speed Test&lt;/th&gt;
&lt;th&gt;speedtest.net (by Ookla)&lt;/th&gt;
&lt;th&gt;fast.com (by Netflix)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Download&lt;/td&gt;
&lt;td&gt;122.8mbps&lt;/td&gt;
&lt;td&gt;111.47mbps&lt;/td&gt;
&lt;td&gt;110mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upload&lt;/td&gt;
&lt;td&gt;8.67mbps&lt;/td&gt;
&lt;td&gt;17.23mbps&lt;/td&gt;
&lt;td&gt;15mbps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ping&lt;/td&gt;
&lt;td&gt;9ms&lt;/td&gt;
&lt;td&gt;32/126/35ms&lt;/td&gt;
&lt;td&gt;54/142ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Google measures &lt;a href="https://support.google.com/websearch/answer/6283840?visit_id=638256423407562613-3746314012&amp;amp;p=speedtest&amp;amp;rd=1#zippy=%2Cunderstand-your-test-results" rel="noopener noreferrer"&gt;download latency only&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;speedtest.net measures 3 latency types: idle latency, download latency, and upload latency&lt;/p&gt;

&lt;p&gt;fast.com measures 2 latency types: unloaded and loaded&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Recommendations
&lt;/h2&gt;

&lt;p&gt;Given the many shortcomings of Proton services, here are the alternatives I settled on - they provide much better usability, while not compromising on security too much or at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Email
&lt;/h3&gt;

&lt;p&gt;If you need something simple and reliable, go full in on Gmail.&lt;/p&gt;

&lt;p&gt;If you want extra features and privacy, unlimited email addresses, advanced analytics, and fancy email rules, purchase a domain name (as low as $8/year) and add it to Cloudflare (free) - Cloudflare allows you to set up a catch-all (meaning any email sent to your domain will be redirected properly, regardless of which address it was sent too - this is essentially like having infinitely many mail aliases).&lt;/p&gt;

&lt;p&gt;Cloudflare also has advanced identity protection and security features (DMARC, SPF, DKIM).&lt;/p&gt;

&lt;p&gt;Best of all, you can simply forward all emails from Cloudflare  back to Gmail, to get the best of both worlds - all the simplicity, stability, and integration of Google apps, coupled with the advanced features and security of Cloudflare - all for free (minus the cost of a domain name, which could be as low as $8/year or less)&lt;/p&gt;

&lt;h3&gt;
  
  
  Passwords
&lt;/h3&gt;

&lt;p&gt;Bitwarden would be my recommendation. With a generous free plan, and a $10/year premium plan, this open-source password manager is focused on privacy and security, while also leading the industry with advanced features (2FA autofill, passkeys integration, password leak checks, emergency access, secure password, and data sharing).&lt;/p&gt;

&lt;p&gt;1Password might be a good choice too but I never tried it.&lt;/p&gt;

&lt;p&gt;LastPass was a great option 5 years ago, but not anymore given it's been hacked several times and had its price increased (and free plan pretty much killed).&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Proton might be great for privacy and security for enthusiasts, but it's likely not worth the usability and convenience cost for most users. If you know exactly what security features of Proton you need, and can't get them elsewhere (i.e. in Google), then Proton is for you, for all other cases, sticking to a more mainstream option will leave you happier.&lt;/p&gt;

&lt;p&gt;Proton chooses to compromise convenience whenever the question is between privacy (and security) or convenience.&lt;/p&gt;

&lt;p&gt;Personally, I don't value my privacy at all (in fact, prefer it when Google and Facebook can learn my interests better and personalize content accordingly, rather than serve me toilet paper ads or trashy videos) and as far as safety, I feel that Google provides more than adequate security for my needs (2FA, passkeys, security keys, encryption, activity logs, takeout, recovery emails, inactive account management)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I would love to hear your opinion on this in the comments - do you feel comfortable giving your information to Google?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Proton Calendar is also not on par with even the free Google Calendar (Proton Calendar has a limit of 25 calendars even in their paid plan, and they don't support keyboard shortcuts)&lt;/p&gt;

&lt;p&gt;All this is to say, while Proton's mission is noble, they fall short on convenience and I don't know if they would ever match Google on that. Given that I don't value the additional privacy/security benefits they provide, they aren't a great match for me.&lt;/p&gt;

&lt;p&gt;The only two remaining benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proton Unlimited, which includes ProtonVPN, is just slightly cheaper than ExpressVPN (which is only a VPN)&lt;/li&gt;
&lt;li&gt;The other benefit is that 500 GB of storage, while far from being as user-friendly to access as Google Drive, is still provided, so could be useful for long-term archival.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I will switch from ExpressVPN to Proton Unlimited (and save $0.34/month lol) but am not as excited as I was at first. The VPN service is compatible with quality. The 500 GB of secure storage, while not very convenient to use, would be perfect for long-term archival and rarely needed files. The ProtonMail is a nice option as a recovery email for the most important services.&lt;/p&gt;

&lt;p&gt;But beyond that, I don't see myself using any of the Proton services other than ProtonVPN as a daily driver due to many missing critical features and usability issues.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Update:&lt;br&gt;
Since writing this post, I have settled on a better option: Switch to Surfshark VPN, which would cost just $2.39/month. The saved money can be used to buy Google One (and shared with my family effortlessly) once I run out of free Google Storage.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>proton</category>
      <category>protonmail</category>
      <category>protonvpn</category>
      <category>expressvpn</category>
    </item>
    <item>
      <title>Reflection on the Amazon Internship</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sun, 18 Jun 2023 03:07:12 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/reflection-on-the-amazon-internship-14k9</link>
      <guid>https://dev.to/maxpatiiuk/reflection-on-the-amazon-internship-14k9</guid>
      <description>&lt;p&gt;This is part 2 of my series on Amazon internship.&lt;/p&gt;

&lt;p&gt;See part 1: &lt;a href="https://dev.to/maxpatiiuk/lessons-learned-from-an-amazon-internship-5e5b"&gt;50 Lessons learned from an Amazon Internship &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, see &lt;a href="https://max.patii.uk/projects/spacetime" rel="noopener noreferrer"&gt;my intern project&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  General impressions about the internship
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The team
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;My team of ~13 people was mostly based in California and fully remote. I was the only one in Austin, Texas, in-person - a bit weird, but the office was modern and quiet.&lt;/li&gt;
&lt;li&gt;We worked on a software for rapid insights, coordination and response during an outage/widespread issue.&lt;/li&gt;
&lt;li&gt;We used Vue.js, which I didn't like at all. See &lt;a href="https://dev.to/maxpatiiuk/6-big-issues-with-vuejs-3he5"&gt;6 issues I have with Vue.js&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The company
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A giant internal Wikipedia and lots of internal websites. There is even a google-like search engine to search the intranet.&lt;/li&gt;
&lt;li&gt;Amazon has custom solutions for everything. They have an in-house alternative for Zoom, GitHub, GitHub Actions, Stack Overflow, YouTube and any other service you can think of. They have a modified NPM and have a local copy of every single NPM package in the world (which undergo security screenings before being available for use). They had strict licensing and security requirements for all packages we wanted to use.
Though, we did use Asana, Slack and Figma because developers rebelled against the in-house alternatives.&lt;/li&gt;
&lt;li&gt;We didn’t use ssh private keys, but instead had authentication via usb security keys.&lt;/li&gt;
&lt;li&gt;They have plugins for all IDEs and operating systems to integrate everything together.&lt;/li&gt;
&lt;li&gt;We had free access to all AWS services.&lt;/li&gt;
&lt;li&gt;All the time we had this notion reinforced that Amazon is the best and amazon is good and not like all the others. Though, probably every company has that&lt;/li&gt;
&lt;li&gt;Amazon is a big company for jump-starting your career&lt;/li&gt;
&lt;li&gt;Nice motto: “When in doubt, rollback”&lt;/li&gt;
&lt;li&gt;We got early access to &lt;a href="https://aws.amazon.com/codewhisperer/" rel="noopener noreferrer"&gt;Amazon CodeWhisperer&lt;/a&gt; (a GitHub Copilot alternative) a year before it was released to the public. See my post on &lt;a href="https://dev.to/maxpatiiuk/shortcomings-of-github-copilot-1ge"&gt;shortcomings of GitHub copilot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Onboarding
&lt;/h3&gt;

&lt;p&gt;This section is quite specific to amazon and probably only useful if you have an upcoming Amazon internship.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IGOR and IGOR observer are the products created by my team.&lt;/li&gt;
&lt;li&gt;Unity is a service we relied on. No relation to the game engine&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was the first time my team had interns, and they did awesome! The onboarding process was immensely helpful, effective and engaging. Thank you!. Still, there are a few things that could be improved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some onboarding tasks (in Embark system) would have been more useful if they were delivered sooner. Others should have been set to be due later.&lt;/li&gt;
&lt;li&gt;Big one: No one sent me a link to the IGOR documentation page in wiki until just a week ago. It had lots of content that would have been helpful for me in my second week. I remember looking though README.md files of the IGOR packages in code.amazon.com. The README.md files didn’t contain documentation, nor a link to documentation&lt;/li&gt;
&lt;li&gt;Also, I don’t think anyone explained to me in the first week what is the difference between IGOR, IGOR Observer, what are the use cases and how many users we have. I don’t think I even received the link to Observer, until I saw it when someone was screen sharing.&lt;/li&gt;
&lt;li&gt;And I didn’t even know what Unity was until 2 days ago
A list of common resources and helpful links would have been great too.&lt;/li&gt;
&lt;li&gt;When I saw how many internal websites there are, I asked my onboarding buddy, if there is some sort of internal search engine to search all those pages, he said there isn’t one. But it does exist, as I know now. Fortunately, internal search was mentioned in one of the embark tasks&lt;/li&gt;
&lt;li&gt;I know now that each member on a team has more expertise in a certain area. Some are better in Vue, some are great with CSS. Some are back-end wizards. Some can debug CDKs and Pipelines. If I had been given a small spreadsheet with who is specializing in what, it would have saved me a lot of time and friction. Instead, I was often addressing my questions to a person who wasn’t always most qualified to answer them, leading to wasted time&lt;/li&gt;
&lt;li&gt;Someone should have told me sooner that Quip exists&lt;/li&gt;
&lt;li&gt;I appreciate that my manager tried to sit me next to the outage response team (as our software product is for quick communication and insights during outages) so that they could help me. But, their help didn’t prove necessary. In fact, they were often quite loud (both because of their pagers, and because of how chatty they are), thus I often had to take meetings away from my desk&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Not fault of the team, but:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I didn’t receive my IT equipment until the day before my flight. That was a bit stressful. Also, why would Amazon ship a giant monitor to my home, if I am going to work from the office in a different State? Why is shipping to the office not an option?&lt;/li&gt;
&lt;li&gt;Although I enjoyed working in a fully-remote team, I didn’t like that I was kept in the dark about the team being fully remote until 2 weeks before the start date. Also, until the first meeting with Matt, all I knew about my project and location was “You will be working in a Consumer organization in Austin, Texas”. Since I was booking airbnb two month ahead, so as to ensure space is still available, I had to book without knowing which office I would be working in (making sure the office is within a walking distance from my room was crucial for me). Many Amazon offices are not marked on Google Maps making things even more difficult&lt;/li&gt;
&lt;li&gt;Most of the intern events were either Seattle-only, or fully virtual. There have been very few in-person events outside of the Seattle area. Maybe all interns should just work from Seattle?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Things learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Learned the value of writing tests. Can’t go without them anymore&lt;/li&gt;
&lt;li&gt;Seen in practice why aiming for more readable and simple code is important&lt;/li&gt;
&lt;li&gt;Received experience with code reviews&lt;/li&gt;
&lt;li&gt;I did lots of “first time” things during the internship: First time booking an airbnb, working in a big office, visiting California, booking a hotel, getting regular feedback on all code, working with charting libraries, creating a dashboard&lt;/li&gt;
&lt;li&gt;The fact that the team was remote is a plus. Very well managed thanks to tea time meetings, daily standup meetings, daily slack checkup messages, 1:1s and other regular meetings.
Sometimes my manager wasn't fully organized, but he was quick to follow that with a joke, which was awesome&lt;/li&gt;
&lt;li&gt;Synchronous code review sessions were extremely helpful. I had my first such code review meeting at the end of the second week. It lasted for almost 3 hours. I received a lot of great feedback (and, I had to rewrite a lot of code after the meeting 😊)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Things that were harder than expected
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Shipping IT equipment to the right place&lt;/li&gt;
&lt;li&gt;Pull Requests (having to wait for feedback, agreeing on the correct solution). Plus, the UI of Pull Requests has a lot of usability problems (i.e, being unable to link to a code line, or unable to see the code around the comment)&lt;/li&gt;
&lt;li&gt;Approximating the estimated time for getting a story completed (also, having to account for writing tests and code review process)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Things that were easier than expected
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I thought I would be expected to work 80 hour weeks. Instead, I was told to work less and write code slower 😂. This left me with enough time to do another full time job and enroll in one university class.&lt;/li&gt;
&lt;li&gt;There are a lot of training courses available discounted or free for employees. Also, there are a lot of internal-only courses. Access to all of this content was way easier than expected. Super cool!&lt;/li&gt;
&lt;li&gt;Scheduling a 1:1 was very easy. Everyone is available and willing to meet and help/discuss/teact.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This was part 2 of my series on Amazon internship.&lt;/p&gt;

&lt;p&gt;See Part 1: &lt;a href="https://dev.to/maxpatiiuk/lessons-learned-from-an-amazon-internship-5e5b"&gt;50 Lessons learned from an Amazon Internship &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, see &lt;a href="https://max.patii.uk/projects/spacetime" rel="noopener noreferrer"&gt;my intern project&lt;/a&gt;&lt;/p&gt;

</description>
      <category>amazon</category>
      <category>internship</category>
    </item>
    <item>
      <title>50 Lessons learned from an Amazon Internship</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sun, 18 Jun 2023 03:00:12 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/lessons-learned-from-an-amazon-internship-5e5b</link>
      <guid>https://dev.to/maxpatiiuk/lessons-learned-from-an-amazon-internship-5e5b</guid>
      <description>&lt;p&gt;I did a summer internship as an SDE at Amazon. During that time, I got to talk to Principal Engineers and other highly experienced individuals. Below are the lessons learned based on talking to them and other experiences I had at Amazon.&lt;/p&gt;

&lt;p&gt;This is Part 1 of my series on Amazon internship.&lt;/p&gt;

&lt;p&gt;See Part 2: &lt;a href="https://dev.to/maxpatiiuk/reflection-on-the-amazon-internship-14k9"&gt;Reflection on the Amazon Internship&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, see &lt;a href="https://max.patii.uk/projects/spacetime" rel="noopener noreferrer"&gt;my intern project&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Career
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The biggest and scariest lesson is to beware that you could have 10 years of experience, or you could repeat first year 10 times. Make sure to be learning from mistakes and constantly improving (learning, reflecting, challenging yourself). Make sure you stop to learn lessons from things you do.&lt;/li&gt;
&lt;li&gt;When talking to a very smart L7, he said it took 3 tries to get promoted to L6, and 2 tries to get promoted to L7. He said that most people fail on the first attempt - otherwise, you got promoted too late. Trying to get a promotion is a good way to get feedback&lt;/li&gt;
&lt;li&gt;Toxic environment can lead to learning bad patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  T vs I shaped person
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you have very narrow expertise? Can you stay in the front-end only? Or do you get into leadership?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not much place for a narrow experience person. Need someone who knows the general principles and leadership and can adapt to different situations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparing for promotion
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;As an L4, as soon as you are done with onboarding, start preparing for L5 and behaving like an L5 - and collect evidence of that throughout&lt;/li&gt;
&lt;li&gt;Always keep in mind the things that you have to improve&lt;/li&gt;
&lt;li&gt;Dedicate x hours a week to learning new things&lt;/li&gt;
&lt;li&gt;Reach out to manager, product engineers and coworkers to get feedback&lt;/li&gt;
&lt;li&gt;Look into code written/work done by people several levels higher than you&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Promotion
&lt;/h3&gt;

&lt;p&gt;When leadership considers you for promotion, they would ask an important questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this the person we want people to model after? "There is an L5 and an L6 way of delivering this project"&lt;/li&gt;
&lt;li&gt;Are they holding the bar high on pull requests?&lt;/li&gt;
&lt;li&gt;Are they properly mentoring junior people?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get promoted, you must be the kind of person that raises the bar. Yes, it's hard to determine where the bar is right now. And yet, the bar is constantly rising. So, you need to keep up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Communication
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Talking to leadership
&lt;/h3&gt;

&lt;p&gt;Learn to talk to leadership. From a selfish perspective, that will help with getting recognized and promoted. From a customer-oriented perspective, leadership will help you get unblocked and be a valuable source of information.&lt;/p&gt;

&lt;p&gt;When presented with a challenge that requires investment of time/resources to resolve, don't start out defeated - don’t assume leadership is going to decline the proposal. If you clearly explain the pros and cons of taking action vs not taking action and alternatives, sound management will agree. You can sell leadership on taking time to refactor code, or write documentation, or take a team retreat to unwind and grow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your work should be self-explanatory
&lt;/h3&gt;

&lt;p&gt;Realize that your contributions to the team are transitory. Today you are here, tomorrow there is someone else working on this project.&lt;/p&gt;

&lt;p&gt;This is an important mindset shift. It makes you realize that in the broadest sense, your value to the team is only in the understandability of the code you write.&lt;/p&gt;

&lt;p&gt;Realize that you have only so many hours in a day, so being a single person on a project is not scalable. Your teammates are there to scale the project. You must code in a way that is consumable by another team member.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working in isolation in a company is very rare. You are always dealing with people&lt;/li&gt;
&lt;li&gt;Some things help build/break trust. You need to stop routinely to examine your interactions. Building trust would go a long way&lt;/li&gt;
&lt;li&gt;For everything, there is: People Process, Tech Process&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Don't leak implementation details&lt;/li&gt;
&lt;li&gt;Isolate complexity into functions/files to make it clear&lt;/li&gt;
&lt;li&gt;Be willing to throw out each line of code (because a better way comes around, or requirements change)&lt;/li&gt;
&lt;li&gt;Write lots of smaller docs -&amp;gt; less stuff to throw away if things change&lt;/li&gt;
&lt;li&gt;Think through, and make sure you are doing the right thing&lt;/li&gt;
&lt;li&gt;Imagine the ideal. Then think how to get there. If not practical, imagine a practical ideal&lt;/li&gt;
&lt;li&gt;A GraphQL-like API is easily extensible. Aim for your code to be like that. VS a message-passing based API, which is harder to document, test and understand&lt;/li&gt;
&lt;li&gt;Research what it takes to not turn your code into an unmaintainable ball of spaghetti&lt;/li&gt;
&lt;li&gt;Research responsible VS irresponsible technical debt. Examples:

&lt;ul&gt;
&lt;li&gt;slow SQL query VS leaky abstraction&lt;/li&gt;
&lt;li&gt;inefficient VS bad API&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Customizability
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Do you make things adaptable and customizable from the ground up or is it more efficient to just satisfy current use cases and then modify it as needed?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If a small group of users, should be good enough by default. Otherwise, add customization to cover their use cases. But don't add useless customization as that just adds complexity needlessly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agile
&lt;/h3&gt;

&lt;p&gt;In the simplest terms, Agile is about how close can we stay to our users/customers.&lt;/p&gt;

&lt;p&gt;If you are not showing software to real users, hard to know if you are on the right track.&lt;/p&gt;

&lt;p&gt;Oftentimes, user needs something much simpler than what we end up implementing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best practices
&lt;/h3&gt;

&lt;p&gt;I was shocked when I was told that they don't follow best practices and instead do what seems best for the problem at hand - kind of makes sense in retrospect because we are not in a perfect world and there is not enough time to write perfect code, and even if you did that, the environment changes all the time so the code would get out of date, and best practices have to be generic and may not apply to your project.&lt;/p&gt;

&lt;p&gt;Be mindful of prior art, BUT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The idea of best practice is transient&lt;/li&gt;
&lt;li&gt;Can be a bit of a trap. best practices change&lt;/li&gt;
&lt;li&gt;Software development is a field of pragmatic sufficiency. The software doesn't have a lifetime of having correctness matter. Be mindful of dogmatic implementation of that&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Along the way, make sure you are not losing sight of the business purpose&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1337691496888360961-684" src="https://platform.twitter.com/embed/Tweet.html?id=1337691496888360961"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1337691496888360961-684');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1337691496888360961&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Before starting a project, think about what's the success criteria. I know you can build this, but does it satisfy the criteria, it is scalable. What are your requirements?&lt;/li&gt;
&lt;li&gt;Instead of just doing a task, ask why it's the right one&lt;/li&gt;
&lt;li&gt;Use FlowCharts, Sequence Diagrams, Plant UML diagrams&lt;/li&gt;
&lt;li&gt;It's important to know what your system is not. Be explicit about things that are out of scope. Learn to say no to feature requests that are beyond the scope or you risk bloating your system and will regret that. "Respond with if you need this, you need something separate, some solutions: ...".&lt;/li&gt;
&lt;li&gt;Be careful with "Scope creep"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You are not going to become an expert in things you are not using -&amp;gt; if you want to learn it, you got to use it.&lt;/li&gt;
&lt;li&gt;Keep peripheral knowledge of things, rather than dive deep into everything. This allows to use the right job for everything. Learning software/libraries/languages is not as valuable as learning concepts - concepts stay relevant for life, while software gets replaced and libraries get deprecated&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Meetings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Stand Up should only be about things that are important for the group (risks to timelines and opportunities, scope adjustments). Less important things (progress report) should be reported offline. Unimportant things like "I had 3 meetings", "I completed an HR training" should not even be mentioned so as not to waste everyone's time. Brainstorming sessions and code review should be separate from Stand Up meetings.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This was Part 1 of my series on Amazon internship.&lt;/p&gt;

&lt;p&gt;See Part 2: &lt;a href="https://dev.to/maxpatiiuk/reflection-on-the-amazon-internship-14k9"&gt;Reflection on the Amazon Internship&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, see &lt;a href="https://max.patii.uk/projects/spacetime" rel="noopener noreferrer"&gt;my intern project&lt;/a&gt;&lt;/p&gt;

</description>
      <category>amazon</category>
      <category>internship</category>
    </item>
    <item>
      <title>6 big issues with Vue.js</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sun, 18 Jun 2023 02:06:24 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/6-big-issues-with-vuejs-3he5</link>
      <guid>https://dev.to/maxpatiiuk/6-big-issues-with-vuejs-3he5</guid>
      <description>&lt;p&gt;I have been a full-time React.js developer for 3 years and a Vue.js developer for 3 months. Here are the issues I have with Vue.js, and why I will stick with React.js for future projects.&lt;/p&gt;

&lt;p&gt;TLDR:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vue.js mutates data, a lot&lt;/li&gt;
&lt;li&gt;Vue.js needlessly uses custom syntax, rather than vanilla JS&lt;/li&gt;
&lt;li&gt;Vue.js has poor IDE support. I.e, WebStorm didn't get full support until very recently.&lt;/li&gt;
&lt;li&gt;Poor TypeScript support (especially inside the templates)&lt;/li&gt;
&lt;li&gt;Lots of implicit behavior&lt;/li&gt;
&lt;li&gt;Lots of function overloading&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The anti-patterns are considered features
&lt;/h2&gt;

&lt;p&gt;It's interesting how the best practices for Vue.js and React.js are the opposites of each other in so many cases.&lt;/p&gt;

&lt;p&gt;As far as watchers, it's a React best practice to have several smaller, rather than one big. (&lt;a href="https://legacy.reactjs.org/docs/hooks-effect.html#tip-use-multiple-effects-to-separate-concerns" rel="noopener noreferrer"&gt;official doc&lt;/a&gt;, &lt;a href="https://blog.logrocket.com/useeffect-hook-complete-guide/#using-multiple-effects-separate-concerns" rel="noopener noreferrer"&gt;LogRocket post&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Similarly, React recommends to not use contexts (provide/inject in vue) &lt;a href="https://legacy.reactjs.org/docs/context.html#before-you-use-context" rel="noopener noreferrer"&gt;unless absolutely necessary&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Additionally, it's an anti-pattern to have useMemo everywhere (computed in Vue) (&lt;a href="https://blog.logrocket.com/rethinking-hooks-memoization/" rel="noopener noreferrer"&gt;LogRocket&lt;/a&gt;, &lt;a href="https://blog.bitsrc.io/when-using-usememo-is-a-really-bad-idea-a2bdeb909812" rel="noopener noreferrer"&gt;Bitsrc&lt;/a&gt;, &lt;a href="https://medium.com/swlh/should-you-use-usememo-in-react-a-benchmarked-analysis-159faf6609b7" rel="noopener noreferrer"&gt;Kevin Van Ryckegem&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It's also &lt;a href="https://reactjs.org/docs/jsx-in-depth.html#:~:text=Spread%20attributes%20can%20be%20useful%20but%20they%20also%20make%20it%20easy%20to%20pass%20unnecessary%20props%20to%20components%20that%20don%E2%80%99t%20care%20about%20them%20or%20to%20pass%20invalid%20HTML%20attributes%20to%20the%20DOM.%20We%20recommend%20using%20this%20syntax%20sparingly" rel="noopener noreferrer"&gt;inadvisable to blindly pass all props&lt;/a&gt; from parent to child, where as Vue has first class support for fallthrough props.&lt;/p&gt;

&lt;p&gt;And the whole SFC (single-file component) concept is an anti-pattern. There is an ESLint rule for react that restricts files to a single component, but that is considered a bad practice by most.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1301891979266138114-242" src="https://platform.twitter.com/embed/Tweet.html?id=1301891979266138114"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1301891979266138114-242');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1301891979266138114&amp;amp;theme=dark"
  }



 &lt;/p&gt;

&lt;p&gt;The fact that SFC requires default imports rather than named imports is bad too. (&lt;a href="https://www.lloydatkinson.net/posts/2022/default-exports-in-javascript-modules-are-terrible/" rel="noopener noreferrer"&gt;A short article from Lloyd Atknson&lt;/a&gt;, &lt;a href="https://blog.neufund.org/why-we-have-banned-default-exports-and-you-should-do-the-same-d51fdc2cf2ad" rel="noopener noreferrer"&gt;Another great article from Kris Kaczor&lt;/a&gt;, &lt;a href="https://basarat.gitbook.io/typescript/main-1/defaultisbad" rel="noopener noreferrer"&gt;TypeScript Deep Dive&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  The custom syntax
&lt;/h2&gt;

&lt;p&gt;10 years ago, when Vue.js was getting started, JavaScript was way more limited that in it today. There was no lambda functions, no map/filter and no const. I know, those were the dark times.&lt;/p&gt;

&lt;p&gt;Given that, Vue.js team did what seemed at the time like a good idea and created their own syntax for templates.&lt;/p&gt;

&lt;p&gt;Unfortunately, there are large negative consequences:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your favorite IDE might not support Vue.js syntax. That can mean anything from broken syntax, to no inline TypeScript suggestions.&lt;/li&gt;
&lt;li&gt;Formatters/Linters and Minifierrs don't work out of the box unless they support this syntax.&lt;/li&gt;
&lt;li&gt;You have to learn yet another way of doing the same thing. You have to waste time learning yet another syntax for looping (v-for) rather than using a more familiar &lt;code&gt;.map()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Additional build steps are required.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Given these negatives, I would have expected Vue.js team to shift their users to native JS and JSX in version 3, but was shocked to find out they are still discouraging usage of JSX in favor of SFC (somehow, Vue.js manages to struggle with optimizing JSX more than with a template string).&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Mutation
&lt;/h2&gt;

&lt;p&gt;After more than 50 years of developing software, most have finally agreed that data mutation should be minimized as it has some large negative side effects (pun intended). Code with mutation is more likely to contain bugs, is harder to test, harder to debug and harder to reuse.&lt;/p&gt;

&lt;p&gt;See and &lt;a href="https://blog.sapegin.me/all/avoid-mutation/" rel="noopener noreferrer"&gt;an excellent article from Artem Sapegin&lt;/a&gt; &lt;a href="https://techblog.commercetools.com/mutating-objects-what-can-go-wrong-7b89d4b8b1ac" rel="noopener noreferrer"&gt;a post from Islam Farg&lt;/a&gt; to find out more.&lt;/p&gt;

&lt;p&gt;Now, what if I mention that React.js avoids mutation like a plague, where that's what you do all the time in Vue.js?&lt;/p&gt;

&lt;p&gt;The compositions API (copied from React.js) is a small step in a right direction, but too little too late.&lt;/p&gt;

&lt;h2&gt;
  
  
  An ocean full of implicit behavior and function overloading
&lt;/h2&gt;

&lt;p&gt;Similarly to data mutation, implicit behavior is discouraged if you want a chance at writing readable and maintainable code. It's okay to abstract away complexity, but not at the cost of bugs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vue.js tracks the dependencies of computed properties implicitly - great for writing less code, bad for controlling your code, explicitly seeing what the behaviour is and avoiding bugs (i.e, conditionals in computed could lead to data that is not properly updated).&lt;/li&gt;
&lt;li&gt;There is half a dozen overloads for &lt;code&gt;watch()&lt;/code&gt; alone. In comparison to React's no overloads for useEffect - a single signature to rule them all (besides the weird no-dependencies case that should be avoided).&lt;/li&gt;
&lt;li&gt;Syntax for v-bind, v-for and v-on has a lot of variations.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>vue</category>
      <category>react</category>
    </item>
    <item>
      <title>Shortcomings of GitHub Copilot</title>
      <dc:creator>Max Patiiuk</dc:creator>
      <pubDate>Sun, 18 Jun 2023 01:19:29 +0000</pubDate>
      <link>https://dev.to/maxpatiiuk/shortcomings-of-github-copilot-1ge</link>
      <guid>https://dev.to/maxpatiiuk/shortcomings-of-github-copilot-1ge</guid>
      <description>&lt;p&gt;&lt;strong&gt;TLDR ✨: I didn’t have much luck with GitHub copilot on larger code snippets - I don’t like the code quality. It was trained on whole bunch of average code, and that's what it produces. It's like having a smart intern, rather than a senior mentor. It’s awesome for 1-3 line auto completion though.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With all the buzz around GitHub Copilot and how much more productive it makes you I was quick to try it out. After using it for a year, I have a few observations to share.&lt;/p&gt;

&lt;p&gt;One of the most exciting use cases was automating the test-writing. Tests are super important, yet I won't be the first to say that it's not the most thrilling part of software development.&lt;/p&gt;

&lt;p&gt;With just a small prompt, GitHub Copilot can generate the entire test case:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyki9w2psufnpvum6dsk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyki9w2psufnpvum6dsk.jpeg" alt="An entire test case generated by GitHub Copilot when given just a test name" width="800" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And another one:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffo07p2hlgd9o5uc1ikpz.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffo07p2hlgd9o5uc1ikpz.jpeg" alt="GitHub Copilot writing a test for a failing request" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, I was immensely excited about what this will do to my productivity ... until I looked closer at the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problems with above code
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;It looks like the solution uses React Testing Library. React Testing Library &lt;a href="https://testing-library.com/docs/queries/about#priority" rel="noopener noreferrer"&gt;discourages usage of test ids&lt;/a&gt;, in favor of finding elements by their semantic meaning or label - that makes tests less brutal, and tests accessibility at the same time. In my codebase, I have no test ids, almost zero ids, and almost zero class names (excluding tailwind).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fireEvent&lt;/code&gt; is no longer a recommended way to mock events in Tests. See &lt;a href="https://testing-library.com/docs/user-event/intro#differences-from-fireevent" rel="noopener noreferrer"&gt;@testing-library/user-event&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;IPLookupResultContainers&lt;/code&gt; variable is assigned to elements on the page (&lt;code&gt;querySelectorAll&lt;/code&gt;). Then why does the test calls &lt;code&gt;.toBeInTheDocument()&lt;/code&gt; for them afterward?&lt;/li&gt;
&lt;li&gt;Some people don't like snapshots, but I think it might work nicely in this case - just take the snapshot of the page after the results are loaded - snapshots can also catch refactoring mistakes (i.e, you changed a valid class name to a typo accidentally).&lt;/li&gt;
&lt;li&gt;Prefer StrictPascalCase and strictCamelCase over PascalCase or camelCase for variable naming. That means no consecutive capitalized letters - ever. That prevents abominations like XMLHttpRequest, where two acronyms are inconsistently capitalized. Not capitalizing acronyms improves readability (HTTPServerError vs HttpServerError) and prevents inconsistency in capitalization.&lt;/li&gt;
&lt;li&gt;This is a matter of preference, but I would have split this test into one that tests the fetching logic and mocks the network request, and another that receives mocked data and just outputs it to the screen.&lt;/li&gt;
&lt;li&gt;While it's a common convention to use "it" instead of "test" inside of "describe", I find it quite silly. Why have inconsistency? Why do I have to refactor all my "test" calls into "it" if I decide to wrap tests in "describe" and refactor them back when I decide to put them outside of "describe"?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For most of these things, I have ESLint rules so it catches these mistakes in my code and that of my teammates. Even better when ESLint can do an auto fix.&lt;/p&gt;

&lt;p&gt;The code snippet encapsulated what I have been seeing in GitHub Copilot so far:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It has a big bias for what's most common, even if it's no longer recommended (I have seen it use "let" or even "var" instead of "const").&lt;/li&gt;
&lt;li&gt;It's slow to catch up to newer conventions because it's trained on a ton of code and so the law of averages comes into play.&lt;/li&gt;
&lt;li&gt;It also doesn't always handle the edge cases just because the code Copilot is copying from does not cover the edge cases.&lt;/li&gt;
&lt;li&gt;I also saw GitHub copilot trying to style a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; like a button 😢.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Still, the fact that it can produce semi-working code at all is very impressive in the grand scheme of things.&lt;/p&gt;

&lt;p&gt;I don't know how they would solve this problem though. By definition, there is a ton more average code and junior developers than great code and senior devs. Similarly, there would be way less code for newer shiny things than for established older practices. Thus, it would be hard for GitHub to 1. discriminate between average and great code, 2. find enough great code to train on.&lt;/p&gt;

&lt;p&gt;And then add to it the fact that a lot of code quality things are subjective and differ between languages. Heck, I was shocked that some of React best practices are considered code smell in Vue and vice versa (&lt;a href="https://dev.to/maxpatiiuk/6-big-issues-with-vuejs-3he5"&gt;see my article on this&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;When &lt;a href="https://dev.to/maxpatiiuk/lessons-learned-from-an-amazon-internship-5e5b"&gt;I did an internship at Amazon&lt;/a&gt;, I was shocked when I was told that they don't follow best practices and instead do what seems best for the problem at hand - kind of makes sense in retrospect because we are not in a perfect world and there is not enough time to write perfect code, and even if you did that, the environment changes all the time so the code would get out of date, and best practices have to be generic and may not apply to your project.&lt;/p&gt;

&lt;p&gt;2026 update: &lt;a href="https://dev.to/maxpatiiuk/ai-generated-code-lacks-common-sense-29bo"&gt;Refreshed thoughts on the state of the art LLMs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>githubcopilot</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
