<?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: john-easyagile</title>
    <description>The latest articles on DEV Community by john-easyagile (@johnfolder).</description>
    <link>https://dev.to/johnfolder</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%2F613319%2F48b85b3f-fceb-4f61-8401-7bad5b63482b.jpg</url>
      <title>DEV Community: john-easyagile</title>
      <link>https://dev.to/johnfolder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnfolder"/>
    <language>en</language>
    <item>
      <title>Empowering Developers: Why I Built Emulative, a VSCode Extension for TypeScript Type Mocking</title>
      <dc:creator>john-easyagile</dc:creator>
      <pubDate>Thu, 13 Apr 2023 05:33:29 +0000</pubDate>
      <link>https://dev.to/johnfolder/empowering-developers-why-i-built-emulative-a-vscode-extension-for-typescript-type-mocking-53m2</link>
      <guid>https://dev.to/johnfolder/empowering-developers-why-i-built-emulative-a-vscode-extension-for-typescript-type-mocking-53m2</guid>
      <description>&lt;p&gt;As a developer, I'm passionate about finding ways to make coding faster, easier, and more enjoyable. One of the challenges that us developers face is writing tests for our code. Testing is crucial for ensuring that your code works as intended, catches bugs early, and allows you to refactor with confidence. However, writing tests can also be a time-consuming and tedious task, especially when it comes to mocking data.&lt;/p&gt;

&lt;p&gt;Mocking data is the process of creating fake or simulated data that mimics the real data that your code interacts with. Mocking is essential for unit testing, integration testing, and end-to-end testing, as it allows you to isolate and test individual parts of your code without relying on external dependencies or environments. However, mocking can also be a difficult and error-prone task, as it requires you to create complex data structures that match the shape and types of your code.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;a href="https://marketplace.visualstudio.com/items?itemName=EasyAgile.emulative&amp;amp;ssr=false#overview"&gt;&lt;strong&gt;Emulative&lt;/strong&gt;&lt;/a&gt;, a VSCode extension that helps developers speed up testing by creating mock objects representing TypeScript types. Emulative is designed to empower developers to focus on writing tests instead of struggling with mock data.&lt;/p&gt;

&lt;p&gt;I built Emulative with the developer community in mind. I wanted to create a tool that would be useful, intuitive, and accessible for all types of developers, from beginners to experts. I believe that testing should be an integral part of the development process, not an afterthought or a chore. Testing helps developers to catch bugs early, prevent regressions, and ensure that their code is reliable and maintainable. Testing also helps developers to learn and understand their code better, as it forces them to think about edge cases, assumptions, and behaviours.&lt;/p&gt;

&lt;p&gt;Emulative is a tool that can help developers of all levels to write better tests faster. With Emulative, you can easily generate mock data for most TypeScript types, including primitives, arrays, objects and interfaces. Emulative uses TypeScript's type system to infer the shape and values of the mock data, so that you don't have to manually create and maintain it. &lt;/p&gt;

&lt;p&gt;I built Emulative because I wanted to make a positive impact on the developer community. &lt;a href="https://github.com/Easy-Agile/emulative"&gt;Emulative is open-source&lt;/a&gt; and free to use, and I welcome &lt;a href="https://github.com/Easy-Agile/emulative/issues"&gt;feedback, suggestions&lt;/a&gt;, and contributions from anyone who shares my passion for coding and testing.&lt;/p&gt;

&lt;p&gt;Happy testing!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>testing</category>
    </item>
    <item>
      <title>4 hacks for writing frontend tests 10x faster (probably!)</title>
      <dc:creator>john-easyagile</dc:creator>
      <pubDate>Fri, 02 Sep 2022 03:20:25 +0000</pubDate>
      <link>https://dev.to/johnfolder/4-hacks-for-writing-frontend-tests-10x-faster-probably-ioo</link>
      <guid>https://dev.to/johnfolder/4-hacks-for-writing-frontend-tests-10x-faster-probably-ioo</guid>
      <description>&lt;p&gt;&lt;em&gt;We all know writing unit tests is important but sometimes it feels like it can take up more time than the feature work itself. I’ve found a couple of handy hacks that I feel have increased my speed when writing tests whilst also improving their quality and, being the kind fellow I am, I’m going to share those with you:&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hack 1: Use Testing Playground
&lt;/h2&gt;

&lt;p&gt;I guess the first tip in this article is - use &lt;a href="https://testing-library.com/"&gt;Testing Library&lt;/a&gt;. I didn’t make this its own point because it is already so popular. But if you are not using it yet, make sure you do!&lt;/p&gt;

&lt;p&gt;Unit testing with Testing Library is really easy and intuitive. Despite this, it can still be challenging to find the right queries or to understand why an element isn't being matched. &lt;/p&gt;

&lt;p&gt;Enter &lt;a href="https://testing-playground.com/"&gt;Testing Playground&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Testing Playground allows you to render a component in a sandbox providing you with direct visual feedback of the component. It also allows you to interact with the rendered component to come up with the best queries to select elements. And, like Testing Library, everything it does is with accessibility (a11y) in front of mind so it teaches you about the importance of a11y and best practices while you use it.&lt;/p&gt;

&lt;p&gt;There are many ways you can use Testing Playground including a &lt;a href="https://chrome.google.com/webstore/detail/testing-playground"&gt;chrome extension&lt;/a&gt; and a &lt;a href="https://testing-playground.com/"&gt;browser based app&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The best way I have found which has been an absolute time saver for me though is by invoking &lt;a href="https://testing-library.com/docs/queries/about/#screenlogtestingplaygroundurl"&gt;&lt;code&gt;screen.logTestingPlaygroundURL()&lt;/code&gt;&lt;/a&gt; right from the test block itself. I usually find myself doing this as soon as I get the component rendering, just to get the lay of the land and work out what parts of it my test might like to interact with.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rdC6F86T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0s3uwgldsn3w4gladuoh.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rdC6F86T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0s3uwgldsn3w4gladuoh.gif" alt="Code in an IDE" width="880" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hack 2: Use test.todo
&lt;/h2&gt;

&lt;p&gt;Please don’t jump down my throat, but I have tried &lt;a href="https://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven Development&lt;/a&gt; and didn’t like it. Like anarchism, I think it sounds awesome in theory, but found that it actually slowed down my development cycle when I tried to implement it. &lt;/p&gt;

&lt;p&gt;I still like the idea of getting some thinking about testing down before I finish building a feature though and have settled on a process that, for me, seems to work well and keep my development moving along.&lt;/p&gt;

&lt;p&gt;I now use Jest’s &lt;code&gt;test.todo&lt;/code&gt; to record what I am going to test as I am planning to and building out a feature (Big thanks to &lt;a href="https://dev.to/karltaylor/use-test-todo-when-writing-jest-tests-4dbd"&gt;Karl&lt;/a&gt; for first introducing me to the idea!).&lt;/p&gt;

&lt;p&gt;My usual process goes a bit like this. First I capture the requirements spelled out for me by my awesome Product Owner (Hi Biz!) in &lt;code&gt;test.todo&lt;/code&gt; form, like a todo list. Then, as I am building and encounter other edge cases and important testing areas I add these as &lt;code&gt;test.todo&lt;/code&gt;’s too. That way, when it comes to testing time, I have thought through a lot of what I am going to test and am less likely to miss testing edge cases or important functional requirements.&lt;/p&gt;

&lt;p&gt;A simple example for a &lt;code&gt;test.todo&lt;/code&gt; for the following &lt;code&gt;&amp;lt;UserDetails /&amp;gt;&lt;/code&gt; component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";

export interface User {
  firstName: string;
  lastName: string;
  username: string;
  emailAddress: string;
  SEN: string;
}

export interface ShowHideUserDetailsProps {
  showDetails: boolean;
  user: User;
}

const UserDetails = ({ showDetails, user }: ShowHideUserDetailsProps) =&amp;gt; (
  &amp;lt;&amp;gt;
    {showDetails ? (
      &amp;lt;div&amp;gt;
        &amp;lt;h1&amp;gt;User Details&amp;lt;/h1&amp;gt;
        &amp;lt;ul&amp;gt;
          &amp;lt;li&amp;gt;{user.firstName}&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;{user.lastName}&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;{user.username}&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;{user.emailAddress}&amp;lt;/li&amp;gt;
          &amp;lt;li&amp;gt;{user.SEN}&amp;lt;/li&amp;gt;
        &amp;lt;/ul&amp;gt;
      &amp;lt;/div&amp;gt;
    ) : (
      &amp;lt;div&amp;gt;
        &amp;lt;h1&amp;gt;Privacy Protected&amp;lt;/h1&amp;gt;
      &amp;lt;/div&amp;gt;
    )}
  &amp;lt;/&amp;gt;
);
export default UserDetails;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Might be as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe('&amp;lt;UserDetails /&amp;gt;', () =&amp;gt; {
  test.todo('Should show user details when show details is true');

  test.todo('Should NOT show user details when show details is false');
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Hack 3: Use builder functions
&lt;/h2&gt;

&lt;p&gt;I used to find myself creating objects for each test to mock out values for testing. Then I wrote another component which used the same object and mocked it out again there. There’s got to be a better way, I thought. And Matt Smith at FinoComp introduced me to one. &lt;/p&gt;

&lt;p&gt;I now use builder functions which return commonly used object types in testing and which allow properties to be overridden everywhere. There is certainly a little bit of extra time needed to set them up but I find that, once they are done, the next time you have to interact with that object you are so glad they are there. For example, for a given TS interface:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export interface User {
  firstName: string;
  lastName: string;
  username: string;
  emailAddress: string;
  SEN: string;
}

export interface ShowHideUserDetailsProps {
  showDetails: boolean;
  user: User;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might have a builder function that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export const buildShowHideUserDetailsProps = (overrides?: Partial&amp;lt;ShowHideUserDetailsProps&amp;gt;): ShowHideUserDetailsProps =&amp;gt; {
  const defaultShowHideUserDetailsProps = {
    showDetails: false,
    user: {
      firstName: "Jazmyne",
      lastName: "Jacobs",
      username: "Kylee_Skiles37",
      emailAddress: "Rashawn13@gmail.com",
      SEN: "SEN-123456"
    }
  };

  return { ...defaultShowHideUserDetailsProps, ...overrides};
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are some limitations to this pattern, however, as they become less useful with deeply nested object types. Additionally, they do require some upkeep when object types change in the codebase which brings me to my next point...&lt;/p&gt;

&lt;h2&gt;
  
  
  Hack 4: Use a tool to mock your Typescript types
&lt;/h2&gt;

&lt;p&gt;Look, I’m going to be straight here. This is the part where I plug my own work but at least I left it for last, right?&lt;/p&gt;

&lt;p&gt;Whenever I found myself creating another mock object for testing I kept looking at my Typescript types and thinking, can’t something look at that and do it for me? This sent me down a search for a solution and I was so stoked to find &lt;a href="https://github.com/google/intermock"&gt;intermock&lt;/a&gt; which is a command line tool that does just that. While it is still a work in progress and has some limitations I have found it super helpful when writing tests. &lt;/p&gt;

&lt;p&gt;I did find using the combination of the CLI and copy/pasting from the terminal a little cumbersome though. How could I make this even easier I thought.&lt;/p&gt;

&lt;p&gt;Enter my VSCode extension, &lt;a href="https://marketplace.visualstudio.com/items?itemName=EasyAgile.emulative&amp;amp;ssr=false#overview"&gt;Emulative&lt;/a&gt;. Simply select your type name, run a command through the Command Palette in VSCode and you can use Emulative to produce Typescript objects, Json objects or the aforementioned builder functions from Typescript types. These are automatically copied to the clipboard but the plain objects can also be sent to a new scratch file. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OcMSTP9L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bro0etybexhi9puuuewb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OcMSTP9L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bro0etybexhi9puuuewb.gif" alt="A VsCode plugin in action" width="880" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But wait, there’s more! Where I work at &lt;a href="https://www.easyagile.com/"&gt;Easy Agile&lt;/a&gt; we have a bunch of properties we work with from Jira which aren’t accurately represented by &lt;code&gt;string&lt;/code&gt; or &lt;code&gt;number&lt;/code&gt;. With Emulative you can set up key/value pairs which will overwrite any matching properties which are found in your types. &lt;/p&gt;

&lt;p&gt;Shout out to Easy Agile for giving me the time, resources and encouragement during an &lt;a href="https://www.easyagile.com/blog/why-i-m-stoked-on-inception-weeks/"&gt;Inception Week&lt;/a&gt; to work on Emulative!&lt;/p&gt;

&lt;p&gt;Well, that’s it for me, I hope you find some of these tips and tricks useful for speeding up front end testing.&lt;/p&gt;

&lt;p&gt;Either way please feel free to sound off in the comments about nifty tricks you have found to improve your unit testing speed (or just how wrong I am about TDD).&lt;/p&gt;




&lt;p&gt;Hi 👋 I'm John, a developer and psychologist at &lt;a href="https://www.easyagile.com/"&gt;Easy Agile&lt;/a&gt;. When I'm not building products customers love to use, you will usually find me in the surf with my wife and daughter, spending too much time agonising over my coffee grind size or walking my golden retriever Norman.&lt;/p&gt;

&lt;p&gt;If you want to ask me more about Inception Weeks or chat about anything else agile, software development (or surfing!) reach out on &lt;a href="https://twitter.com/john_folder"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>testing</category>
    </item>
    <item>
      <title>Why I'm stoked on Inception Weeks 🤙 (and your employee's will be too!)</title>
      <dc:creator>john-easyagile</dc:creator>
      <pubDate>Thu, 21 Oct 2021 08:30:25 +0000</pubDate>
      <link>https://dev.to/johnfolder/why-im-stoked-on-inception-weeks-and-your-employees-will-be-too-556m</link>
      <guid>https://dev.to/johnfolder/why-im-stoked-on-inception-weeks-and-your-employees-will-be-too-556m</guid>
      <description>&lt;p&gt;One of the things that most intrigued me about &lt;a href="https://www.easyagile.com/"&gt;Easy Agile&lt;/a&gt; when I was looking to apply was the opportunity to take part in regular Inception Weeks.&lt;/p&gt;

&lt;p&gt;For those of you not familiar with the concept, it is, at least as defined by Easy Agile, one week in every five where employees across the company can work on a project of their own design. The only guardrail being that the Inception Week project will leave us thinking “how did we ever live without this?!”&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Deliver value, let it be messy, give us the opportunity to get feedback" Dave Elkan, Easy Agile co-CEO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The aim of Inception Weeks is always to ship real value at the end of the period with a favourite quote of mine from our co-CEO Dave “Deliver value, let it be messy, give us the opportunity to get feedback”. Despite this Easy Agile also prescribes to the mantra of learning by failing, giving room for employees to be experimental and stretch themselves in their projects.&lt;/p&gt;

&lt;p&gt;It sounded too good to be true, like some Silicon Valley fantasy world that would only ever be found on TV. Surely no company would actually let me work on whatever I wanted for such a large chunk of my working time? What would the benefit be to them?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fn74rrBl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rlzpfcww1oq1lu7rabfq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fn74rrBl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rlzpfcww1oq1lu7rabfq.gif" alt='Bart Simpson asks "Whats in it for me?"'&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My first Inception Week felt like it came around fast when I first started at Easy Agile. Despite this I was ready. Although I was new to the company I was not new to their applications, having used &lt;a href="https://www.easyagile.com/products/user-story-maps/"&gt;Easy Agile User Story Maps&lt;/a&gt; daily in my previous role. I knew exactly what I wanted to work on, a way to help teams to estimate their capacity from their previous velocity when in team planning. I searched the Inception Week backlog (where these ideas are captured) thinking that surely I had stumbled onto something new but, alas, there are no original ideas. Turns out our co-CEO Nick had already come up with the idea at least two years before I started.&lt;/p&gt;

&lt;p&gt;Never mind that though, I dived into the project with vigour, coming out of my first Inception Week with a working prototype I was able to demonstrate to the team. More than that, I quickly ramped up my knowledge about the codebase since I was working on my own idea with the permission to be messy and fail. I can’t imagine another approach that would have got me up to speed so quickly as a productive and useful member of the team. While the work I did has not (yet) made it to production, it has informed similar functionality in other Easy Agile applications, improved our combined knowledge of the area and will be useful as a prototype we can demo to customers when building such a feature becomes a business priority.&lt;/p&gt;

&lt;p&gt;The next of my Inception Week projects, &lt;a href="https://devpost.com/software/easy-agile-jira-hero"&gt;Easy Agile Jira Hero&lt;/a&gt;, was arguably an even greater success for myself and Easy Agile as it has just &lt;a href="https://blog.developer.atlassian.com/codegeist-2021-winning-forge-apps/"&gt;won third place&lt;/a&gt; in Atlassian’s Codegeist hackathon’s IT Category using a cutting edge development platform called Forge. I am hopeful that this outcome will help extend Easy Agile’s reputation as a company that is not afraid of trying new things while being one of the premier providers of software in the Atlassian ecosystem. On top of that, as a company and individuals, we gained invaluable knowledge around Forge applications we can use to better service our customers in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Vg5onkeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qn10vwc0sodb3hh3vxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vg5onkeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qn10vwc0sodb3hh3vxb.png" alt="Easy Agile Jira Hero logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although the initial idea was barebones, it was elevated through the work of my amazing teammates. We had a blast making it too, building our cohesiveness as a team and having fun indulging our inner nerds with a vintage 8 bit design concept complete with parallax’s and funky animations.&lt;/p&gt;

&lt;p&gt;My most recent Inception Week has helped me grow significantly as a developer as I worked on an application outside of the browser for the first time in my career. Building on the work of the awesome folks who built &lt;a href="https://github.com/google/intermock"&gt;intermock&lt;/a&gt;, I adapted their tool to be used within the VSCode IDE with the extension &lt;a href="https://github.com/Easy-Agile/emulative"&gt;Emulative (coming soon to a marketplace near you!&lt;/a&gt;). In doing so, I am hoping to do my (very) small part to improve the lives of my fellow developers by building upon the tool chain that so many others have built in order to make the work we do easier and more rewarding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kt1WAa_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fmo97dbebig71g077rao.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kt1WAa_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fmo97dbebig71g077rao.gif" alt="Gif demonstrating a software application"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking back on my Inception Weeks with Easy Agile I can now easily see their benefit to both the employees and the business.&lt;/p&gt;

&lt;p&gt;As employees, Inception Weeks empowered us to think creatively, learn and grow. They also contribute to a wonderful cadence of work. They allow us to take the foot off the pedal of the usual feature development cycle, complete with cutting out all meetings, leading to improved mental health and motivation.&lt;/p&gt;

&lt;p&gt;The business benefits too, in varied ways, big and small which are both expected and unexpected.&lt;/p&gt;

&lt;p&gt;Inception Weeks no doubt leads to a healthier, happier and more productive workforce. They also contribute enormously to developing a positive and inclusive team culture by breaking down the walls between teams as we form new teams for a week around things we are passionate about.&lt;/p&gt;

&lt;p&gt;Another way Easy Agile benefits as a business relates to the quote attributed to Henry Ford “If I had asked people what they wanted, they would have said faster horses.” Easy Agile is good at building awesome stuff that their customers want. But in an environment as competitive as software in general, and the Atlassian ecosystem in particular, innovation is particularly important. Inception Weeks empower the team to identify their own problems and come up with creative solutions leading to new tools, features and even products for the business.&lt;/p&gt;

&lt;p&gt;If you are a business involved in the software space, or any space really, I recommend you take a serious look into how Inception Weeks could become part of your business. Your future self and your employees will thank you for it.&lt;/p&gt;

&lt;p&gt;Also, if Easy Agile’s Inception Weeks sound as awesome to you as they did to me take a look at our open positions, &lt;a href="https://www.easyagile.com/careers"&gt;we are hiring&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;Hi 👋 I'm John, a Developer and Psychologist at Easy Agile. When I'm not building products customers love to use, you will usually find me in the surf with my wife and daughter, spending too much time agonising over my coffee grind size or walking my golden retriever Norman.&lt;/p&gt;

&lt;p&gt;If you want to ask me more about Inception Weeks or chat about anything else agile, software development (or surfing!) reach out on &lt;a href="https://twitter.com/john_folder"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>agile</category>
      <category>programming</category>
      <category>career</category>
      <category>vscode</category>
    </item>
    <item>
      <title>My journey from psychologist to software developer</title>
      <dc:creator>john-easyagile</dc:creator>
      <pubDate>Wed, 14 Apr 2021 10:58:23 +0000</pubDate>
      <link>https://dev.to/johnfolder/my-journey-from-psychologist-to-software-developer-2i1n</link>
      <guid>https://dev.to/johnfolder/my-journey-from-psychologist-to-software-developer-2i1n</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.easyagile.com/blog/from-psychologist-to-software-developer/"&gt;Easy Agile&lt;/a&gt; blog on 23 March 2021&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We’re checking the surf and haven’t talked in a while. Two sets of eyes locked on the ocean, is it worth paddling out this windy winter morning? &lt;/p&gt;

&lt;p&gt;“Where are you working now?” you ask distractedly. “I’m actually a software developer.” &lt;/p&gt;

&lt;p&gt;Your eyes break from the swell, instinctively looking for signs of trauma or burnout. “Wow, you couldn’t have picked something more different!” you say, a little taken aback.&lt;/p&gt;

&lt;p&gt;I have had some version of this conversation over and over since I made the switch from psychology to coding. People are often confused by how certain I am that I made the right choice, despite the fact that in my mid-thirties and around the birth of my first baby I discarded a lucrative career I spent a lot of time and effort pursuing, and to which I seemed to be well suited.&lt;/p&gt;

&lt;p&gt;The truth is that making that change when I did vastly improved my health and my family's happiness. It was a privilege to work with my clients and share their innermost secrets, hopes and dreams. It was also extremely traumatic and disheartening, and was wearing me down. Then one day my wife said, “you don’t have to be a psychologist you know?” It may seem obvious, but that short sentence opened my mind.&lt;/p&gt;

&lt;p&gt;I started to think about what else I might like to do. I’d always envied friends of mine who were carpenters or bricklayers and seemed to get so much satisfaction in gradually mastering their craft. Problem is, I am terrible with tools and can’t hammer a nail to save my life. A chat with a friend who is a coder where he spoke about his craft in the same way got me thinking.&lt;/p&gt;

&lt;p&gt;I took a free online course to test the waters and was instantly hooked. I had to fight myself to go to bed at a decent time every night as I learned more and more about topics like CSS, browsers, clean code and asynchronous javascript. A couple of weeks later I started my masters in Information Technology and threw myself into it.&lt;/p&gt;

&lt;p&gt;Ok, I thought, there is no way better to learn than on the job so I reached out to every company I could find within driving distance, offering to do anything even tangentially related to coding to get my foot in the door.&lt;/p&gt;

&lt;p&gt;Thankfully, the Wollongong tech community (Hey there &lt;a href="https://www.siligongvalley.com/"&gt;Siligong!&lt;/a&gt;) is open minded and two awesome companies, first FinoComp and now Easy Agile were able to look past my non-traditional background to see my potential.&lt;/p&gt;

&lt;p&gt;I’m now a bonafide front end developer and am absolutely stoked to work everyday, expanding my toolset and honing my craft to build awesome products for our customers which improve their lives.&lt;/p&gt;

&lt;p&gt;To anyone out there who is considering a career change, it’s never too late. It changed my life for the better and it could change yours too.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The journey of a thousand miles begins with one step” Lao Tzu.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(Oh, you should definitely paddle out in that surf too. No matter the conditions a surf is always a good idea.)&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>psychology</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Foo Bar Nah</title>
      <dc:creator>john-easyagile</dc:creator>
      <pubDate>Tue, 13 Apr 2021 01:20:07 +0000</pubDate>
      <link>https://dev.to/johnfolder/foo-bar-nah-51ga</link>
      <guid>https://dev.to/johnfolder/foo-bar-nah-51ga</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://www.easyagile.com/blog/foo-bar-nah/"&gt;Easy Agile&lt;/a&gt; blog on 9 April 2021&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I bent over my desk in frustration, suppressing the urge to scream so as not to upset the rhythmic clack-clack of my coworkers. I’d been frustrated all morning by a particularly nasty React infinite re-rendering issue that I just couldn’t get working. The urge to scream came when, my own toolbox exhausted, I turned to Google.&lt;/p&gt;

&lt;p&gt;You see, it looked like someone else had come across the same issue and had decided to record a solution for prosperity (and internet points). I eagerly scanned the page for the sample code that would save my morning. Finding it, my eyes were drawn to the dreaded fooBarBaz and I knew my morning was about to get a whole lot worse before it got better.&lt;/p&gt;

&lt;p&gt;I actually love the history of programming and the little easter eggs fellow developers have passed down (my personal favourite - &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/418"&gt;I am a teapot&lt;/a&gt;). These help to make this job interfacing with computers much more fun and human. I can appreciate that the practice of using fooBarBaz in naming example functions and variables has a long and storied tradition dating back at least to the &lt;a href="https://tools.ietf.org/html/rfc3092"&gt;Tech Model Railroad Club at MIT circa 1960&lt;/a&gt;. I acknowledge that the use of fooBarBaz is primarily not to introduce any distractions from the point which is being demonstrated. I also think that we should pretty much stop using them.&lt;/p&gt;

&lt;p&gt;I am always awed by the amount of information my fellow developers have left out there for me on the internet. So many people in this field seem to have an innate need to help others, leading them to put in countless hours to fill Stack Overflow and blogs with useful information. I can only imagine that the people putting in their time and effort to this end are hoping that their efforts will help as many people as possible. fooBarBaz gets in the way of that.&lt;/p&gt;

&lt;p&gt;Let me take off my developer hat for a second and put on my recently discarded, slightly misshapen and battered psychologist one. Interweaving complex facts into stories is a time tested technique which facilitates learning. Here in Australia, the technique has been &lt;a href="https://theconversation.com/the-memory-code-how-oral-cultures-memorise-so-much-information-65649"&gt;used for tens of thousands of years by the Australian Aboriginal and Torres Strait Islander peoples&lt;/a&gt; to help them to remember important and complex information such as the locations of waterholes across vast tracts of inhospitable desert. Our brains are networks of interconnected neurons so we are more likely to hold on to what we have learned  when we are able to integrate new information into our current knowledge base. The modern term for this is &lt;a href="https://en.wikipedia.org/wiki/Learning#Associative_learning"&gt;associative learning&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Additionally, as I’m sure you’ll remember from school, keeping learning interesting has been &lt;a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5839644/"&gt;demonstrated&lt;/a&gt; to be a powerful motivator which energises learning. &lt;/p&gt;

&lt;p&gt;When we take all this time and effort to communicate with our fellow developers we can and should harness the advantage of associative learning and intrinsic motivation to make sure that the information we are putting out there is as useful as possible to as many people as possible. To this end I believe that we should give as much thought to meaningful naming when creating example code as we do in our own codebases. &lt;/p&gt;

&lt;p&gt;Marijn Haverbeke’s Eloquent Javascript regularly comes at the &lt;a href="https://hackr.io/blog/javascript-books"&gt;top&lt;/a&gt; of lists of books you should read when learning Javascript (JS). It is no coincidence that he is also a master at using meaningful names to help people to better understand coding principles. When teaching new programmers about string comparison in JS he uses the following example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log("Itchy" != "Scratchy");
// → true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Marijn piggybacks off our existing knowledge about Springfield’s favourite cartoon characters to give extra meaning and interest to this example. We know that Itchy and Scratchy are a mouse and cat respectively and so most definitely not the same.&lt;/p&gt;

&lt;p&gt;Consider the same example but rendered with the dreaded Foo/Bar instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log("Foo" != "Bar");
// → true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To seasoned developers, this might be easy enough to parse: you’ve read hundreds of examples like this and so have learned the association between Foo and Bar and internalised it. But this creates a barrier for learning for new developers who have not yet internalised this rule and instead increases the mental load for them to understand the concept. It also misses out on creating that little spark of interest or joy to help pique the reader's interest and so increase their motivation to understand the underlying concept.&lt;/p&gt;

&lt;p&gt;I am not saying there is absolutely no place for fooBarBaz (although I think their utility is limited). The best way to use these terms is to emphasise that anything could be put in a certain place. An example of this is when we’re talking about arguments and parameters in JS functions. You see, there is no type checking in vanilla JS and so if we have a function like the following that takes a parameter and simply logs its value to the console, it doesn’t matter what type of argument we pass in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const consoleLogParameter = (foo) =&amp;gt; {
  console.log(foo);
};

const bar = “bar”;
const baz = 42;

consoleLogParameter(bar);
// → “bar”;

consoleLogParameter(baz);
// → 42;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I believe that these terms have the most utility in this case as their purpose is to emphasise that their type doesn’t matter. I would also add the caveat to this that using these terms in this way is only suitable when you are producing content for experienced developers who are going to have built a working understanding of these terms. &lt;/p&gt;

&lt;p&gt;Even if this is aimed at experienced developers, I still believe that more meaningful names would be better in this example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const consoleLogParameter = (anyTypeOfData) =&amp;gt; {
  console.log(anyTypeOfData);
};

const name = “Homer Simpson”;
const age = 39;

consoleLogParameter(name);
// → “Homer Simpson”;

consoleLogParameter(age);
// → 39;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another example where more meaningful variable names would be useful is in relation to &lt;a href="https://en.wikipedia.org/wiki/Metasyntactic_variable"&gt;metasyntactic variables&lt;/a&gt;. These variables are commonly found in source code and are intended to be modified or substituted before real-world usage. Whilst these variables are only placeholders, I believe that it is also better to use a variable name which offers more context to your developer comrade to assist them when they are reading and implementing the code in future.&lt;/p&gt;

&lt;p&gt;We work in a wonderful profession with a rich history, where many people are willing to donate their time to helping to educate and mentor their fellow programmers. Using meaningful variable names in place of fooBarBaz is one way that we can ensure that this effort is worthwhile and helps as many people as possible. It lowers the barriers to entry for the profession, helping to create a &lt;a href="https://2020.stateofjs.com/en-US/demographics/"&gt;more diverse&lt;/a&gt; and welcoming programming community.&lt;/p&gt;

&lt;p&gt;So ditch the fooBarBaz (but not the Teapot) and go forth and spark joy!&lt;/p&gt;




&lt;p&gt;Hi 👋 I'm &lt;a href="https://twitter.com/john_folder"&gt;John&lt;/a&gt;, a Developer and Psychologist at &lt;a href="https://www.easyagile.com/"&gt;Easy Agile&lt;/a&gt;. When I'm not building products customers love to use, you will usually find me in the surf with my wife and daughter, spending too much time agonising over my coffee grind size  or walking my golden retriever Norman.&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>programming</category>
      <category>psychology</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
