<?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: Sean Massa</title>
    <description>The latest articles on DEV Community by Sean Massa (@endangeredmassa).</description>
    <link>https://dev.to/endangeredmassa</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%2F100538%2F95c880ab-99ce-4f14-a514-ed71ca33f9fc.jpeg</url>
      <title>DEV Community: Sean Massa</title>
      <link>https://dev.to/endangeredmassa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/endangeredmassa"/>
    <language>en</language>
    <item>
      <title>Theme Pact: Goal Setting Framework with no Goals</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Thu, 02 Feb 2023 00:00:00 +0000</pubDate>
      <link>https://dev.to/endangeredmassa/theme-pact-goal-setting-framework-with-no-goals-3lb</link>
      <guid>https://dev.to/endangeredmassa/theme-pact-goal-setting-framework-with-no-goals-3lb</guid>
      <description>&lt;p&gt;Setting goals seems important, but never feels effective. I never have enough data to estimate proper terms for a goal to make it motivating instead of ignorable or daunting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should my goal be to reduce build times by 15% or 20%?&lt;/li&gt;
&lt;li&gt;Should I achieve this by the end of the month or quarter?&lt;/li&gt;
&lt;li&gt;What happens if I or the business decide that’s not important between then and now?&lt;/li&gt;
&lt;li&gt;What happens if I literally can’t complete this because of technical or logistical blockers?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ll spare you my long (and boring) history with struggling to answer these questions and deal with the consequences of them. The point is that I need to either find a way to work within the typical framework or find a new one that works for me.&lt;/p&gt;

&lt;p&gt;I’ve tried the first approach for many years. It’s time to try the second.&lt;/p&gt;

&lt;h1&gt;
  
  
  Theme Pact Framework
&lt;/h1&gt;

&lt;p&gt;Pulling from several sources, my framework for goal setting includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Theme:&lt;/strong&gt; a guiding light, a default decision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PACT Goals:&lt;/strong&gt; specific personal outputs I commit to&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Habits:&lt;/strong&gt; systems for making sure I achieve those outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;James Clear (of &lt;a href="https://jamesclear.com/atomic-habits" rel="noopener noreferrer"&gt;Atomic Habits&lt;/a&gt; fame) really summarizes the framework compared to traditional approaches.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You do not rise to the level of your goals, you fall to the level of your systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I like this model because you control the direction and personal outputs. Success is therefore under your control. You won’t fail because of external forces made your original goals impossible.&lt;/p&gt;

&lt;p&gt;By leveraging the power of direction, defaults, and habits, this framework makes success happen as a matter of course. Well, that’s the theory.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is a Theme?
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This concept comes from the &lt;a href="https://www.thethemesystem.com/" rel="noopener noreferrer"&gt;Theme System&lt;/a&gt;, developed by &lt;a href="https://twitter.com/imyke" rel="noopener noreferrer"&gt;Myke Hurley&lt;/a&gt; and &lt;a href="https://twitter.com/cgpgrey/" rel="noopener noreferrer"&gt;CGP Grey&lt;/a&gt; through &lt;a href="https://www.relay.fm/cortex" rel="noopener noreferrer"&gt;Cortex&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Myke and CGP Grey define the Theme System in intentionally vague terms. They want users to use their framework to build a more specific system for themselves.&lt;/p&gt;

&lt;p&gt;The themes themselves are defined with a name, description, and a set of ideal outcomes. They call them “yearly themes” for convenience, but these can be seasons, quarters, or whatever works best for you.&lt;/p&gt;

&lt;p&gt;For my purposes, I decided a theme has to be:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;North Star:&lt;/strong&gt; A theme is a North Star. It’s a default position. When you come to a decision, you ask yourself, does one of the choices lead me towards my north star? If so, that is your default decision. You can still obviously choose something else, but defaults have incredible power.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resonant:&lt;/strong&gt; A theme resonates with you as a deep desire for a high-level focus on a direction. This can be some major thing you want to change, improve, or maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexible:&lt;/strong&gt; A theme is flexible. It should not be overly specific. It can adjust to life (and sometimes world) changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infallible:&lt;/strong&gt; A theme is infallible. You cannot fail. It’s a direction, not a destination.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is a PACT Goal?
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This concept comes from &lt;a href="https://nesslabs.com/smart-goals-pact" rel="noopener noreferrer"&gt;SMART goals are not so smart: make a PACT instead&lt;/a&gt;&lt;/em&gt; by &lt;a href="https://twitter.com/anthilemoon" rel="noopener noreferrer"&gt;Anne-Laure Le Cunff&lt;/a&gt; through &lt;a href="https://twitter.com/ness_labs" rel="noopener noreferrer"&gt;Ness Labs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Anne-Laure defines a PACT Goal as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Purposeful:&lt;/strong&gt; A PACT Goal calls out to a purpose in your life, similar to how a Theme should be Resonant. Aligning your PACT goals to your Theme will accomplish this by proxy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actionable:&lt;/strong&gt; A PACT Goal is be actionable. It focuses on outputs instead of outcomes to keep you in control of your progress on this goal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous:&lt;/strong&gt; A PACT Goal is continuous. It is something you can do periodically and frequently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trackable:&lt;/strong&gt; A PACT Goal is trackable. There should be some measure of either (1) whether or not you did a thing or (2) how many times you did a thing.&lt;/p&gt;

&lt;p&gt;I extend this further to include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accountable:&lt;/strong&gt; My PACT Goals are accountable. I share my goal with someone who can prod me when I’m not making progress on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Habitual:&lt;/strong&gt; My PACT Goals are habitual. They either rely on existing habits to trigger new behavior or define new habits I’ll need to develop in order to accomplish the goal.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is a Habit?
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This concept comes from &lt;a href="https://jamesclear.com/atomic-habits" rel="noopener noreferrer"&gt;Atomic Habits&lt;/a&gt;&lt;/em&gt; by &lt;a href="https://jamesclear.com/" rel="noopener noreferrer"&gt;James Clear&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;James defines a habit as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cue:&lt;/strong&gt; The trigger for the habit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Craving:&lt;/strong&gt; What you want that the habit will provide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response:&lt;/strong&gt; The behavior you perform after the Cue triggers the habit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reward:&lt;/strong&gt; The result of engaging in the habitual behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cues need to be obvious. The best cues are location and time.&lt;/p&gt;

&lt;p&gt;Response needs to be easy. Something you can do quickly and without much effort, if at all possible. James suggests putting a 2-minute limit on this.&lt;/p&gt;

&lt;p&gt;Craving and Reward are two sides of the same coin. You need to make the habit result in something that you will enjoy in the short term so that you repeat it, leading to the desired long-term change.&lt;/p&gt;

&lt;p&gt;I focus mostly on setting new good habits here, but James makes it clear that you can use a similar system to break bad habits.&lt;/p&gt;

&lt;h1&gt;
  
  
  Setting a Theme Pact
&lt;/h1&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define your Theme&lt;/li&gt;
&lt;li&gt;Define the duration (a quarter, season, year, etc.)&lt;/li&gt;
&lt;li&gt;Set your PACT Goals&lt;/li&gt;
&lt;li&gt;If any of your PACT Goals have blocker habits: define habit breakers&lt;/li&gt;
&lt;li&gt;If any of your PACT Goals needs support from a new habit: define new habits&lt;/li&gt;
&lt;li&gt;Track your progress&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Outcomes
&lt;/h1&gt;

&lt;p&gt;My first stab at this was too much all at once. I did form some useful habits around my theme, but I couldn’t keep up with everything I tried to do.&lt;/p&gt;

&lt;p&gt;I (re-)discovered that smaller iterations are better. If you are going from zero to Theme Pact, I suggest iteratively adding pieces until you are comfortable with a given piece. To start, define a theme OR work on forming one good habit OR work on breaking one bad habit.&lt;/p&gt;

&lt;h1&gt;
  
  
  Resources
&lt;/h1&gt;

&lt;p&gt;If you want to learn more about these topics, I recommend the following.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Theme System: &lt;a href="https://www.thethemesystem.com/" rel="noopener noreferrer"&gt;https://www.thethemesystem.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PACT Goals: &lt;a href="https://nesslabs.com/smart-goals-pact" rel="noopener noreferrer"&gt;https://nesslabs.com/smart-goals-pact&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Power of Habit: &lt;a href="https://charlesduhigg.com/the-power-of-habit/" rel="noopener noreferrer"&gt;https://charlesduhigg.com/the-power-of-habit/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>web3</category>
      <category>crypto</category>
      <category>offers</category>
    </item>
    <item>
      <title>Conventional Comments: Streamlining Feedback</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate>
      <link>https://dev.to/endangeredmassa/conventional-comments-streamlining-feedback-5jl</link>
      <guid>https://dev.to/endangeredmassa/conventional-comments-streamlining-feedback-5jl</guid>
      <description>&lt;p&gt;The idea behind &lt;a href="https://conventionalcomments.org/" rel="noopener noreferrer"&gt;Conventional Comments&lt;/a&gt; on Code Reviews is that structure can convey a lot meaning quickly.&lt;/p&gt;

&lt;p&gt;This process helps convey understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what change is suggested&lt;/li&gt;
&lt;li&gt;why it matters&lt;/li&gt;
&lt;li&gt;how important it is to change now&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can use the process &lt;a href="https://conventionalcomments.org/" rel="noopener noreferrer"&gt;as documented by the author&lt;/a&gt;, but I like using the following the following customized version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streamlined Conventional Comments
&lt;/h2&gt;

&lt;p&gt;All comments must be resolved before merging, but resolution can look different for different kinds of comments.&lt;/p&gt;

&lt;p&gt;All comments are also non-blocking unless otherwise specified.&lt;/p&gt;

&lt;h3&gt;
  
  
  Format
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;label&amp;gt; ([blocking-status]): &amp;lt;subject&amp;gt;

[details]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;label: this is a single label that signifies what kind of comment (see above) is being left: 

&lt;ul&gt;
&lt;li&gt;question&lt;/li&gt;
&lt;li&gt;preference&lt;/li&gt;
&lt;li&gt;suggestion&lt;/li&gt;
&lt;li&gt;convention&lt;/li&gt;
&lt;li&gt;requirement&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;blocking-status (optional) 

&lt;ul&gt;
&lt;li&gt;(blank): does not block merging&lt;/li&gt;
&lt;li&gt;non-blocking: does not block merging&lt;/li&gt;
&lt;li&gt;soft-blocking: does not block merging, but the comment should be resolved in a follow-up code change&lt;/li&gt;
&lt;li&gt;blocking: blocks merging&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;subject: brief and explicit description, no need for padded language&lt;/li&gt;

&lt;li&gt;details (optional): the context, reasoning, and conversational messaging&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;question (non-blocking):&lt;/strong&gt; Were you able to find a case when &lt;code&gt;paging.next&lt;/code&gt; doesn’t exist?&lt;/p&gt;

&lt;p&gt;When I tested analyzing temporary failures, the URL for next always seemed to exist and be the same across all subsequent polls. I ended up having to check whether &lt;code&gt;items.length === 0&lt;/code&gt; (&lt;code&gt;events.length === 0&lt;/code&gt;) instead to break out of the loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;suggestion (non-blocking):&lt;/strong&gt; extract functions&lt;/p&gt;

&lt;p&gt;In the model hooks especially, I suggest extracting functions aggressively. This makes it easier to see each concept that happens as the result of a hook.&lt;/p&gt;

&lt;p&gt;What do you think about something like this?&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;beforeCreate: async function(model, options) {
ensureEmailMxDomain(model);
ensureLatLong(model);
}

&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;convention (blocking):&lt;/strong&gt; use &lt;code&gt;last_email_interaction_at&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Our convention for database column names says that dates should end in &lt;code&gt;_at&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I marked this as “blocking” because migrations are expensive and risky in this database. We should minimize the number of migrations where possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;requirement (blocking):&lt;/strong&gt; invert conditional &lt;code&gt;if (found)&lt;/code&gt; should be &lt;code&gt;if (!found)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It looks like the code and test are accidentally checking that the file was found, but I think here we expect the file to not be found.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Takeaways
&lt;/h1&gt;

&lt;p&gt;This structure makes it clear to others what needs to be done. It’s also a good forcing function for the author to consider the feedback they provide more carefully.&lt;/p&gt;

&lt;p&gt;The best part is that readers don’t have to know about the structure to understand feedback written in this style.&lt;/p&gt;

&lt;h1&gt;
  
  
  Related Topics
&lt;/h1&gt;

&lt;p&gt;See &lt;a href="//./2022-03-14-detangling-the-code-review.md"&gt;Detangling the Code Review&lt;/a&gt; for details about different kinds of feedback.&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>crypto</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Detangling the Code Review: Questions, Preferences, Suggestions, Conventions, Requirements</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate>
      <link>https://dev.to/endangeredmassa/detangling-the-code-review-questions-preferences-suggestions-conventions-requirements-4nm9</link>
      <guid>https://dev.to/endangeredmassa/detangling-the-code-review-questions-preferences-suggestions-conventions-requirements-4nm9</guid>
      <description>&lt;p&gt;Teams can have more effective code reviews if they default to approval and have a framework for delivering and managing feedback.&lt;/p&gt;

&lt;h1&gt;
  
  
  Responsibility
&lt;/h1&gt;

&lt;p&gt;As a team member, you have the following responsibilities to your teammates regard code reviews:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;respond to code review requests within half a business day with your review or a note about needing more time&lt;/li&gt;
&lt;li&gt;review code with compassion and respect&lt;/li&gt;
&lt;li&gt;review code thoroughly, thinking through possible impacts and edge cases&lt;/li&gt;
&lt;li&gt;after approving code, you take on a share of the responsibility for that code operating correctly in production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a code change author requesting review, you have the following responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drive progress on the code review being merged&lt;/li&gt;
&lt;li&gt;find appropriate reviewers for your code change&lt;/li&gt;
&lt;li&gt;make your code easy to review 

&lt;ul&gt;
&lt;li&gt;submit smaller code changes, when possible&lt;/li&gt;
&lt;li&gt;write detailed descriptions of why your changes were made in review requests&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;respond quickly to feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Understanding Code Review Comments
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Your goal is to approve the code change if at all possible.&lt;/strong&gt; This builds momentum, shows progress, and even in cases where the author needs to make a change, allows their original contribution to be impactful.&lt;/p&gt;

&lt;p&gt;There are different types of Code Reviews comments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Questions&lt;/strong&gt; are simply that, questions about the code change. They can vary in severity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preferences&lt;/strong&gt; are personal, non-functional tweaks to the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suggestions&lt;/strong&gt; are alternate, functional ways to fulfill the requirements. Ideally they come with some reasoning or pros/cons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conventions&lt;/strong&gt; are project- or team-based rules to follow. They work best if they are automatically enforceable. That way, no human has to comment about these issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Requirements&lt;/strong&gt; are what needs to be done for the code to accomplish its purpose. The code change must meet its requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Question Comments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes you need more context. Question Comments are a great place to ask for more information because others may have the same question and/or the answer may add context that other reviewers can use.&lt;/p&gt;

&lt;p&gt;When asking questions, make it clear how important it is to get an answer. You may have a mild curiosity or a serious concern.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Blocking?&lt;/em&gt; If you need to know the answer because you consider the code change to meet the requirements, block merging. Otherwise, do not block merging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preference Comments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There’s a time and place for discussing preferences in a codebase, but that’s not during Code Review. When reviewing code, focus on correctness instead.&lt;/p&gt;

&lt;p&gt;When you want to discuss code preferences, bring it up during existing team meetings or schedule a new meeting to discuss this.&lt;/p&gt;

&lt;p&gt;All of these are preferences, not facts about what’s best, in most programming languages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where to put optional spaces before/after other syntax&lt;/li&gt;
&lt;li&gt;indentation value (tabs/2-space/4-space)&lt;/li&gt;
&lt;li&gt;anything else that’s not pointing out a failure to meet a Convention or Requirement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Blocking?&lt;/em&gt; If you insist on commenting with a preference, it should never block merging the code change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggestion Comments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When the code change meets the requirements, but it could do so &lt;em&gt;better&lt;/em&gt; in some way, you can comment with a suggestion. If the code change meets the requirements in theory, but in practice there will still be significant problems, then it’s still a Requirements Comment.&lt;/p&gt;

&lt;p&gt;All Suggestion Comments should clearly describe what the suggested code change is, why it’s better, and why it might be worse.&lt;/p&gt;

&lt;p&gt;This is the fuzziest type of comment because complexity and human judgement creep in. You could suggest a code change because the original code would be slow (for a certain definition) and the suggested change is faster. But maybe that code is only ever run on a handful of items in a place where some delay would be fine, anyway. Is it worth making the code faster? Is the faster code harder to read? Maybe we’re not making the right tradeoff in this case.&lt;/p&gt;

&lt;p&gt;Be mindful of the pros and cons of each approach when making Suggestion Comments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Blocking?&lt;/em&gt; If the suggestion is an alternative approach that is debatably better, do not block merging. If the suggested code change is significantly better (in your opinion), recommend that they adopt it now or submit a new code change immediately after.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Convention Comments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are authoring rules that programmers should follow when working in a given codebase that are based on (1) what currently exists in that codebase and (2) agreed-upon rules of the team that owns that codebase.&lt;/p&gt;

&lt;p&gt;As many of these as possible should be automatically enforced in the CI test suite. These tests should be runnable in local development environments as well. Ideally, these are also checked in real-time in the dev’s editor. Linting is the most common example of automating this, but it can include performance tests, generative tests, and more.&lt;/p&gt;

&lt;p&gt;Not all conventions will be automatable. These are often related to naming variables and functions.&lt;/p&gt;

&lt;p&gt;Code Review should only include comments on conventions when they are not automatable. Even then, they should never be blocking comments. Conventions can always be cleaned up immediately after merging a code change that breaks them without affecting the functionality of the system.&lt;/p&gt;

&lt;p&gt;Preferences can become Conventions after discussing the issue with the team. These are best batched into infrequent discussions to avoid Convention thrashing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Blocking?&lt;/em&gt; If you are commenting about a failure to meet a Convention, it should rarely block merging the code change. You can recommended they submit a new code change immediately after to remedy the convention violation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements Comments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are absolute requirements for a given task for which a code change is made. The code change must fulfill those requirements without introducing new bugs.&lt;/p&gt;

&lt;p&gt;If the code change meets the requirements in theory, but in practice there will still be significant problems, then you should still consider your comment to be a Requirements Comment.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Blocking?&lt;/em&gt; Failure to meet requirements or introducing new bugs are the only guaranteed way to block a code change from being merged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This structure gives you a shared set of language and expectations to make code review a more efficient process.&lt;/p&gt;

&lt;p&gt;However, there is room for flexibility. When the site is down, feel free to toss these ideas out the window. When you have a good reason to deviate from this, just explain way.&lt;/p&gt;

&lt;h1&gt;
  
  
  Code Review Framework: Conventional Comments
&lt;/h1&gt;

&lt;p&gt;The idea behind &lt;a href="https://conventionalcomments.org/"&gt;Conventional Comments&lt;/a&gt; on Code Reviews is that structure can convey a lot meaning quickly.&lt;/p&gt;

&lt;p&gt;This process helps convey understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what change is suggested&lt;/li&gt;
&lt;li&gt;why it matters&lt;/li&gt;
&lt;li&gt;how important it is to change now&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can use the process &lt;a href="https://conventionalcomments.org/"&gt;as documented by the author&lt;/a&gt;, but I like using the following the following customized version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streamlined Conventional Comments
&lt;/h2&gt;

&lt;p&gt;All comments must be resolved before merging, but resolution can look different for different kinds of comments.&lt;/p&gt;

&lt;p&gt;All comments are also non-blocking unless otherwise specified.&lt;/p&gt;

&lt;h3&gt;
  
  
  Format
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;label&amp;gt; ([blocking-status]): &amp;lt;subject&amp;gt;

[details]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;label: this is a single label that signifies what kind of comment (see above) is being left: 

&lt;ul&gt;
&lt;li&gt;question&lt;/li&gt;
&lt;li&gt;preference&lt;/li&gt;
&lt;li&gt;suggestion&lt;/li&gt;
&lt;li&gt;convention&lt;/li&gt;
&lt;li&gt;requirement&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;blocking-status (optional) 

&lt;ul&gt;
&lt;li&gt;(blank): does not block merging&lt;/li&gt;
&lt;li&gt;non-blocking: does not block merging&lt;/li&gt;
&lt;li&gt;soft-blocking: does not block merging, but the comment should be resolved in a follow-up code change&lt;/li&gt;
&lt;li&gt;blocking: blocks merging&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;subject: brief and explicit description, no need for padded language&lt;/li&gt;
&lt;li&gt;details (optional): the context, reasoning, and conversational messaging&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;question (non-blocking):&lt;/strong&gt; Were you able to find a case when &lt;code&gt;paging.next&lt;/code&gt; doesn’t exist?&lt;/p&gt;

&lt;p&gt;When I tested analyzing temporary failures, the URL for next always seemed to exist and be the same across all subsequent polls. I ended up having to check whether &lt;code&gt;items.length === 0&lt;/code&gt; (&lt;code&gt;events.length === 0&lt;/code&gt;) instead to break out of the loop.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;suggestion (non-blocking):&lt;/strong&gt; extract functions&lt;/p&gt;

&lt;p&gt;In the model hooks especially, I suggest extracting functions aggressively. This makes it easier to see each concept that happens as the result of a hook.&lt;/p&gt;

&lt;p&gt;What do you think about something like this?&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;beforeCreate: async function(model, options) {
    ensureEmailMxDomain(model);
    ensureLatLong(model);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;convention (blocking):&lt;/strong&gt; use &lt;code&gt;last_email_interaction_at&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Our convention for database column names says that dates should end in &lt;code&gt;_at&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I marked this as “blocking” because migrations are expensive and risky in this database. We should minimize the number of migrations where possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;requirement (blocking):&lt;/strong&gt; invert conditional &lt;code&gt;if (found)&lt;/code&gt; should be &lt;code&gt;if (!found)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It looks like the code and test are accidentally checking that the file was found, but I think here we expect the file to not be found.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Takeaways
&lt;/h1&gt;

&lt;p&gt;The type of comment (Question, Preference, Convention, Suggestion, or Requirement) should lead to whether or not resolution of that comment should block merging the code change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Question: non-blocking or blocking; depends on context&lt;/li&gt;
&lt;li&gt;Preference: non-blocking; don’t comment with this unless you can’t help yourself&lt;/li&gt;
&lt;li&gt;Suggestion: non-blocking or soft-blocking&lt;/li&gt;
&lt;li&gt;Convention: soft-blocking&lt;/li&gt;
&lt;li&gt;Requirement: blocking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However feedback on code changes is provided, they should be communicated with compassion. You should consider how your comments will be received based on team context and experience level of the author. Dr. McKayla goes into much more detail on &lt;a href="https://www.michaelagreiler.com/respectful-constructive-code-review-feedback/"&gt;compassionate code review&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Detangling the Standup: Status Reports, Team Planning, Context Sharing, and Community Building</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Tue, 04 Jan 2022 00:00:00 +0000</pubDate>
      <link>https://dev.to/endangeredmassa/detangling-the-standup-status-reports-team-planning-context-sharing-and-community-building-3ph</link>
      <guid>https://dev.to/endangeredmassa/detangling-the-standup-status-reports-team-planning-context-sharing-and-community-building-3ph</guid>
      <description>&lt;p&gt;Standups are often applied without understanding the problem they are solving. Broken down by potential problem being solved, this becomes more obvious:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;One Solution&lt;/th&gt;
&lt;th&gt;Typically Called&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;unclear project or task status&lt;/td&gt;
&lt;td&gt;Status Report meetings&lt;/td&gt;
&lt;td&gt;Standup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inefficient team collaboration&lt;/td&gt;
&lt;td&gt;Team Planning meetings&lt;/td&gt;
&lt;td&gt;Standup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unclear team problems and/or solutions&lt;/td&gt;
&lt;td&gt;Context Sharing meetings&lt;/td&gt;
&lt;td&gt;Standup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;team member silos or other lacks of communication&lt;/td&gt;
&lt;td&gt;Community Building meetings&lt;/td&gt;
&lt;td&gt;Standup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Because of this, we have new problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Not clearly solving a specific problem&lt;/li&gt;
&lt;li&gt;Not solving a problem with the best solution&lt;/li&gt;
&lt;li&gt;A daily interruption to deep work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What follows is a pragmatic and ideal approach to resolving this situation. The pragmatic approach is to understand so you can excel within that system. The ideal solution tries to change the system to better serve the team.&lt;/p&gt;

&lt;p&gt;Note that the value of each process will vary by team composition and project management strategies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote (similar time zones) vs. Remote (various time zones) vs in-person&lt;/li&gt;
&lt;li&gt;Cross-functional vs function-specific&lt;/li&gt;
&lt;li&gt;More vs. less experienced&lt;/li&gt;
&lt;li&gt;Kanban vs. Sprint vs. Project vs. Waterfall styles&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Pragmatic Approach
&lt;/h1&gt;

&lt;p&gt;Figure out what kind of standup you have will help you understand its purpose. That will help you accept the value it provides, even if it’s not for you.&lt;/p&gt;

&lt;p&gt;You can then try to fulfill that purpose to the best of your ability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status Report “Standups”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Individual contributions to these meetings focus on what was done, what’s on track (or not), and what’s up next. They are generally less useful to the individual contributors on a team.&lt;/p&gt;

&lt;p&gt;These contributions are most useful to the team lead and/or stakeholders to understand the status of the project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yesterday I was working on the “Sign In With Google” story, but hit a weird issue with the integration. I spent a few hours debugging it. I should finish it this morning. Today, I’ll finish that story and pick up the next one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Context Sharing “Standups”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Individual contributions to these meetings focus on what was done, how, and/or why. They include specifics.&lt;/p&gt;

&lt;p&gt;These contributions are generally more useful to the individual contributors on a team. They are less useful to the team lead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yesterday I was working on the “Sign In With Google” story, but hit a weird issue with the integration. I spent a few hours debugging it. Turns out, the documentation was wrong about how to differentiate between bad credentials and bad integration.&lt;/p&gt;

&lt;p&gt;In my debugging, I built up a wrapper component that smooths over the confusing parts and more clearly validates inputs based on our needs. Make sure you use it in our other apps if you need to implement Google sign in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Community Building “Standups”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Individual contributions to these meetings pay lip service to the premise of a “Standup”, but spend a non-trivial amount of time on socializing.&lt;/p&gt;

&lt;p&gt;These contributions may feel like a waste of time, but are likely useful to all team members. This kind of meeting can build the team community.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yesterday I was working on the “Sign In With Google” story and I’ll keep working on it today.&lt;/p&gt;

&lt;p&gt;Last night I took my kids to a trampoline park for the first time. It was bonkers, but a lot of fun. I ended up jumping just as much as the kids.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Team Planning “Standups”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Individual contributions to these meetings focus on what needs to be done, especially before/after/together with other team members today or in the very near future.&lt;/p&gt;

&lt;p&gt;These contributions are generally more useful to the individual contributors on a team, but the team lead needs to know as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yesterday I was working on the “Sign In With Google” story, but hit a weird issue with the integration. I spent a few hours debugging it. I’m still not sure what the problem is. Can someone pair with me on this today, ideally this morning?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Ideal Approach
&lt;/h1&gt;

&lt;p&gt;The best approach to tackling the Standup confusion is to make a list of these kinds of problems, decide if your team has any of those problems (solved for, or not), then ensure you have good solutions for the problems your team has.&lt;/p&gt;

&lt;p&gt;For example, say your team has a Status Report “Standup”. You would break out the problems:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Potential Problem&lt;/th&gt;
&lt;th&gt;We Have Problem?&lt;/th&gt;
&lt;th&gt;Current Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;unclear project or task status&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;Status Report “Standup”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unclear team problems and/or solutions&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;team member silos or other lacks of communication&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;MISSING&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inefficient team collaboration&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In this example, you believe that your team only really has two (of these) problems that need solving: “unclear project or task status” and “team member silos or other lacks of communication”.&lt;/p&gt;

&lt;p&gt;The current Status Report “Standup” is solving the “unclear project or task status” problem. If you wanted to get rid of this meeting and solve that problem in another way, you could work with the Project Manager and/or Team Lead to find out why your project management system can’t produce this without a daily update from individual contributors. From there, you could experiment with other solutions that fill that gap.&lt;/p&gt;

&lt;p&gt;The problem “team member silos or other lacks of communication” is not being solved at all! You could propose that the team schedule other meetings with this explicit purpose. Or, if you want to expand the current “Standup”, you could make socializing an explicit part of that meeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternate Solutions to “Standups”
&lt;/h2&gt;

&lt;p&gt;If you have these kinds of “Standup”, consider proposing these alternative solutions.&lt;/p&gt;

&lt;p&gt;Almost all of these solutions reduce the number of meetings team members have. The effect of this will vary per person, but in general, it provides more uninterrupted time for deep work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status Reports&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smaller Tasks:&lt;/strong&gt; During project planning, break the larger tasks into smaller tasks that can be accomplished individually. Bonus points for making these smaller tasks deployable and valuable to the system or users. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; With larger tasks, you can spend a long time on one task with no discernible progress in the project management software. With smaller tasks, you can see (for example) 3 out of 5 smaller tasks for a larger chunk of work in the project management software.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More Status Labels:&lt;/strong&gt; In your project management software, you may need more statuses that can track where a task is. These could include Deployed to Staging, QA Review, and Ready for Design vs. Ready for Dev. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; Detailed status labels can make it clearer to stakeholders what the progress is as well as who’s responsible for moving it forward.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous Status Reports:&lt;/strong&gt; Status reports don’t really need to be made in a synchronous team meeting. Instead, have a rule that status reports be submitted in email or chat every morning. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; This provides a similar amount of value to stakeholders and leads without requiring a meeting.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Team Planning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smaller Tasks:&lt;/strong&gt; During project planning, break the larger tasks into smaller tasks that can be accomplished individually. Bonus points for making these smaller tasks deployable and valuable to the system or users. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; If you have larger tasks that have more complex requirements, it is more likely that the task will rely on others’ work in some way. Breaking tasks into smaller pieces makes each individual step less likely to conflict with something else. It also makes it easier to see connections between tasks.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily Strategy Meetings:&lt;/strong&gt; Yes, this is not exactly an alternative to the Team Planning “Standup”, more a refocusing of it. Define the meeting to be about planning the strategy of the day, explicitly. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; Instead of spending time on the ceremony of the standup, you are spending time on solving the problem at hand.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Context Sharing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous Communication:&lt;/strong&gt; Add more context in pull requests, code comments, documentation, email, and/or chat systems. It’s important to have some team guidelines on when and where to do this. It really shouldn’t (only) be communicated in a meeting. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; Context that’s documented in an expected place is far more value for a far longer period of time than spoken briefly in a meeting.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frameworks/Conventions:&lt;/strong&gt; You can remove the need for some types of context sharing by establishing conventions or using frameworks. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; This allows future solutions to conventionalized problems to not need (1) novel solutions per problem or (2) sharing context of problem-specific solutions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Community Building&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Augment Standup:&lt;/strong&gt; Make it known and acceptable to socialize during Standup. Add an optional question to your format that’s more personal, like “do anything fun recently?”. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; Teams often work better if the members have a rapport. This should not be mandated, but should be encouraged.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtual Breaks:&lt;/strong&gt; Set up specific times (like Tuesdays/Thursdays from 10am - 12pm) where people can join a virtual break room call. People can hang out, work, and/or chat in that space. 

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Why It’s Better:&lt;/em&gt; Especially for remote teams, it can be easy to feel disconnected from your team. Having time specifically set aside for socializing can make it happen more smoothly.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Take Away
&lt;/h1&gt;

&lt;p&gt;Standups are not bad, just often misapplied. Understand the problems you need solved and what the best solutions might be. If that’s a standup-style meeting, then go for it. I just don’t think it should be the default.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Detangling the Manager: Supervisor, Team Lead, Mentor</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Fri, 03 Dec 2021 00:00:00 +0000</pubDate>
      <link>https://dev.to/endangeredmassa/detangling-the-manager-supervisor-team-lead-mentor-gha</link>
      <guid>https://dev.to/endangeredmassa/detangling-the-manager-supervisor-team-lead-mentor-gha</guid>
      <description>&lt;p&gt;&lt;strong&gt;Main Idea (tl;dr)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The core argument follows. The most important parts are bold.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Manager (title) is usually some combination of (roles) Supervisor, Team Lead, and Mentor.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;These roles cannot be played well together because they have conflicting incentives: 

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supervisor: benefit the company&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team Lead: benefit the team&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mentor: benefit the individual&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;There’s a critical conflict between Supervisor and Mentor that makes it really tough to tell your Manager you need help doing your job.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ideal Solution: Make sure all roles are: 

&lt;ul&gt;
&lt;li&gt;played at all&lt;/li&gt;
&lt;li&gt;played well&lt;/li&gt;
&lt;li&gt;played by separate people&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pragmatic Solution: As the Manager, be mindful: 

&lt;ul&gt;
&lt;li&gt;that you should be playing each role&lt;/li&gt;
&lt;li&gt;of when you are playing a specific role&lt;/li&gt;
&lt;li&gt;to assess yourself in each role&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Note that everything I say here has been exhaustively experienced, internalized, and formalized with &lt;a href="https://twitter.com/trek/"&gt;Trek Glowacki&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Conflicting Roles and Incentives&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;The term Manager means a lot of different things to different companies. It can include Project Manager, Product Manager, Technical Lead, Team Lead, Mentor, Coach, Supervisor, as well as Individual Contributor. Most often, in my experience, a manager is responsible for at least these roles: Supervisor, Mentor, and Team Lead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supervisor Manager:&lt;/strong&gt; They are most concerned with ensuring the cost of employees is justified by their output. They are incentivized to benefit the company.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team Lead Manager:&lt;/strong&gt; They are most concerned with the performance of the team as a whole. They provide team vision and quality. They are incentivized to benefit the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mentor Manager:&lt;/strong&gt; They are most concerned with helping team members become better versions of themselves, in a professional context. They are incentivized to benefit the individual.&lt;/p&gt;

&lt;p&gt;For each type of manager, they play their secondary roles to a lesser degree, sometimes being absent entirely. There are managers that can play all three roles reasonably well, but they seem very rare.&lt;/p&gt;

&lt;p&gt;The Mentor role is most often absent and most often needed. It also exposes the strongest conflict between these three roles. Mentor directly conflicts with Supervisor: When you feel like you are not doing a good job, you should be able to talk to a Mentor about it, but a Supervisor may judge you for it, affecting your opportunities and compensation.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Ideal Solution: Separate Roles for Separate People&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I think the clearest solution is to split the roles, but that option isn’t possible for every organization. Either your company is too small or too rigid in organizational structure. If you can’t split up the roles, see the next section on a Pragmatic Solution. If you can split the roles, read on!&lt;/p&gt;

&lt;p&gt;Manager is not a role. It’s a position in a hierarchy, a title. Instead of having titled managers, make sure you have people playing the different necessary roles. I’ve found the following breakdown to be effective.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Department Head as Supervisor:&lt;/strong&gt; A Department Head is a good place to have someone playing the Supervisor role. That means you will have no other supervisors in the department. For this to be successful, the person playing this role has to do a good job setting expectations across the department. This can be done through progression and review systems. It’s not easy, but it’s also the most important role to split out from the product team’s day-to-day work because of the detrimental nature of the conflict between this and other roles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team Member as Team Lead:&lt;/strong&gt; Teams should not grow so large that the person playing the Team Lead role has to focus 100% of their time on that role’s responsibilities. That leaves time for them to contribute to the team’s work on the product itself. I’ve found that a 50-50 split between Team Lead and Individual Contributor roles often works well, but it will ebb and flow throughout a project or team’s lifespan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Company Member as Mentor:&lt;/strong&gt; Anyone in the company with the understanding of their mentee’s role can play the Mentor role. This could be a more senior engineer in another team or your current team’s project manager. This does not need to be kept within a team boundary. This can be a 100% focus role, but that will be rare until a company is quite large. This is more likely a 25-50% role for someone playing a different role.&lt;/p&gt;

&lt;p&gt;For those playing multiple roles, expectations should be set appropriately. It’s all too easy to expect an Individual Contributor to perform similarly to others on a team even though they are also a mentor or a team lead.&lt;/p&gt;

&lt;p&gt;This works! The role conflict melts away, leading to a happier, more productive department.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Pragmatic Solution: Strategies for Playing Conflicting Roles&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Companies aren’t always large or flexible enough to split up the Manager’s roles into multiple people.&lt;/p&gt;

&lt;p&gt;The core strategy to resolve the internal conflict is to try to only wear one role’s hat at a time. While doing this, you still have to acknowledge the conflict between the roles you play. You also need to acknowledge this to your teammates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Act as Different People:&lt;/strong&gt; In 1:1s, you are sometimes playing the Mentor or the Supervisor role. If possible, schedule separate meetings per role you are playing. For example, this could be a performance review meeting as a Mentor and a compensation adjustment meeting as a Supervisor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Develop a Leadership Voice:&lt;/strong&gt; In product management, project management, and status meetings, you are often playing the Team Lead role, but sometimes also the Individual Contributor role. Make sure that your suggestions are made as one or the other. For example, you might share a project management decision from your work with the department head and other Team Leads. You may suggest a fellow engineer explore a different technical approach to their work. One is broadcasting a decision, the other is suggesting an option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay Self-aware:&lt;/strong&gt; In other ad-hoc interactions, you may be playing any of these roles. Recognize that your suggestions can come across as commands. Be explicit with teammates about which roles you are playing when.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Assessment &lt;strong&gt;of Your Many Hats&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If your company doesn’t have clear expectations per role, you should write them out for yourself.&lt;/p&gt;

&lt;p&gt;Given your roles’ expectations, do a self review as each one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supervisor&lt;/li&gt;
&lt;li&gt;Team Lead&lt;/li&gt;
&lt;li&gt;Mentor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, ask each Team Member to review your performance of each role they interact with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supervisor&lt;/li&gt;
&lt;li&gt;Team Lead&lt;/li&gt;
&lt;li&gt;Mentor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Performance Review itself is a topic for another day. The import part here is that each role is reviewed separately.&lt;/p&gt;

&lt;h1&gt;
  
  
  Continued Learning
&lt;/h1&gt;

&lt;p&gt;For me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;@&lt;a href="https://twitter.com/endangeredmassa"&gt;endangeredmassa&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wherewithall.com/"&gt;https://wherewithall.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lethain.com/"&gt;https://lethain.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docondev.com/"&gt;https://docondev.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>business</category>
      <category>process</category>
      <category>management</category>
    </item>
    <item>
      <title>Delegating when only you can do the work</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Tue, 02 Mar 2021 17:33:33 +0000</pubDate>
      <link>https://dev.to/latticefyi/delegating-when-only-you-can-do-the-work-18d1</link>
      <guid>https://dev.to/latticefyi/delegating-when-only-you-can-do-the-work-18d1</guid>
      <description>&lt;p&gt;&lt;em&gt;by &lt;a href="https://dev.to/trek"&gt;Trek&lt;/a&gt; and &lt;a href="https://dev.to/endangeredmassa"&gt;Sean&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Leaders often end up in the situation where they accumulated more responsibilities then they can execute alone. Delegation is the answer, but you can't just had someone a new task and expect them to succeed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do you delegate when only you can do the work?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are three steps to this no longer being your problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drive Collaboration:&lt;/strong&gt; The first step of delegation is collaboration. Identify a team member who you want to be able to do this task. Ask them to help you complete the task. The goal here is to get them comfortable understanding what you are doing and how you do it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navigate Collaboration:&lt;/strong&gt; After the team member has a handle on the task, have them do the task while you assist. You are still there to make sure it's done properly, but make sure they are the one actually doing the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delegate Execution:&lt;/strong&gt; After the team member can handle the task without your help, delegate it!&lt;/p&gt;

&lt;p&gt;You are still (probably) responsible for this task being completed, but not for executing it.&lt;/p&gt;




&lt;p&gt;If you want to hear more about this and related topics, &lt;a href="https://lattice.fyi/"&gt;sign up for our newsletter&lt;/a&gt;! We will never sell your information. We send ~1 email per week.&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>management</category>
    </item>
    <item>
      <title>How to Run Strength-finding Interviews</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Wed, 25 Mar 2020 19:54:48 +0000</pubDate>
      <link>https://dev.to/endangeredmassa/how-to-run-strength-finding-interviews-2m3g</link>
      <guid>https://dev.to/endangeredmassa/how-to-run-strength-finding-interviews-2m3g</guid>
      <description>&lt;p&gt;&lt;em&gt;I was on DojoLIVE! to discuss &lt;a href="https://www.youtube.com/watch?v=c5DMXsBTS0E"&gt;Strength-finding Interviews&lt;/a&gt;. Check it out!&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;In an effort to highlight candidates at their best, &lt;a href="https://dev.to/trek"&gt;Trek&lt;/a&gt; and I have been running Strength-finding Interviews over the past few years. Over the course of 2 companies, 94 phone screens, 27 interviews, 14 offers, and 9 hires we've refined this approach into something that increases our confidence in no-hires and success in yes-hires. Approximately half of the candidates provided unsolicited positive feedback about the process, even when they were not made an offer.&lt;/p&gt;

&lt;p&gt;The key difference between a Strength-finding Interview and traditional interviews is that the interview format is customized per candidate to assess their individual strengths. You can still maintain consistency of assessment by making sure strengths are always tested in the same way and that certain core strengths are always tested.&lt;/p&gt;

&lt;p&gt;What follows is a walk-through of the process as a guide for how to do this yourself. You can expect to gain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more confidence in positive and negative hiring decisions&lt;/li&gt;
&lt;li&gt;more enjoyable and fair interview experience for candidates&lt;/li&gt;
&lt;li&gt;better word of mouth about your interview process, even among candidates you don't hire&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, we'll focus on the most unique aspect of the Strength-finding Interview process: Negotiating an Interview Format.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Job and a Candidate
&lt;/h2&gt;

&lt;p&gt;Let's assume we have an open position for a Web Software Engineer position we'd like to fill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📋 Job: Web Software Engineer&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;FlashRecruit is a funded recruitment technology startup with massive traction (SaaS based) looking for a Software Engineer (for full stack development) to join our growing team! We're building chat-based (and other) software to make the job seeking and recruiting experiences better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opportunity&lt;/strong&gt;&lt;br&gt;
You are invited to join us on this adventure! There is a unique opportunity here to not only be a part of what we're building, but to influence the direction we take. You will be able to contribute your different skill sets to the various problems we'll solve together.&lt;/p&gt;

&lt;p&gt;In this role specifically, you'll be collaborating with the development team to build new features, new products, and iterate on our processes. These efforts will directly lead to happier customers and more sales for the business.&lt;/p&gt;

&lt;p&gt;We'd love to tell you more about what to expect, but the team is small and growing. It's hard to predict what the future will hold. Joining now gives you an opportunity to shape that future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;br&gt;
We work in the recruiting software landscape, which is complex and crowded. We're doing something unique in the space by offering the ability to chat with a recruiter before applying to a job, which is exciting. We're not stopping there.&lt;/p&gt;

&lt;p&gt;We're also a small startup, which means you'll likely wear different hats at different times. We expect you to spend most of your time writing software, but sometimes other related hats will be necessary.&lt;/p&gt;

&lt;p&gt;We have an office in Oakbrook, which you are free to use if you like, but the engineering team is fully remote. The company fully embraces remote work. You will be collaborating with others that could be working anywhere in the US (for now). Because of this, communication is key. This includes screen sharing, remote pair programming, writing documentation, virtual meetings, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expectations of You&lt;/strong&gt;&lt;br&gt;
There aren't many technical requirements. We don't want to exclude you based on something you could learn quickly enough on the job. Instead, we'd like to focus on the skills that we find to be critical to happiness and success in self and team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Improvement:&lt;/strong&gt; For each other item, you don't have to already be great. The core expectation and real requirement is that you improve over time. The processes and expectations in place will facilitate that, but you should be motivated to continuous improvement as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt; Writing software is the core of this role. You should write software that is tested, modifiable, and clear. We have no expectations around computer science concepts, but you should be open to learning about anything relevant to the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worked on Web Software:&lt;/strong&gt; You should have built web applications or the systems supporting them before. Experience with our entire stack is not necessary. It is helpful to have some experience with at least one of these:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Node.js (API)
  &lt;/li&gt;
&lt;li&gt;Ember (Web Client)
  &lt;/li&gt;
&lt;li&gt;React Native (Mobile Apps)
  &lt;/li&gt;
&lt;li&gt;Heroku/S3/RDS (Infrastructure)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Collaborate:&lt;/strong&gt; You should work well in a collaborative environment. As a team, we'll be building software, reviewing code, deciding on architecture, and iterating on our processes. You don't have to do all of these things, but we'd like you to be involved with the team more than just executing individual task after task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write:&lt;/strong&gt; Because we fully embrace remote work, you will often be writing messages, pull request descriptions, the occasional document, and more. Technical Writing is an important skill in general, but especially in a remote environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give Feedback:&lt;/strong&gt; You should give feedback on the product, team, and team members. Feedback should be specific, actionable, and timely. For individuals, it should also be directly related to the job they are expected to perform. You should also be mindful or biases when giving feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Receive Feedback:&lt;/strong&gt; You should respond well to valid feedback. Responding well can mean many things, including disagreement. We want to build a strong, trust-and-respect-based relationship across the team that allows us to give feedback about actions, not judgements about people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Competitive compensation
  &lt;/li&gt;
&lt;li&gt;Equity in a funded, early-stage startup poised for exponential growth
  &lt;/li&gt;
&lt;li&gt;Full-time W2 employment
  &lt;/li&gt;
&lt;li&gt;Health Care Plan that's good for families and individuals
  &lt;/li&gt;
&lt;li&gt;Flexible time to allow for a work-life balance that works for you and your family
  &lt;/li&gt;
&lt;li&gt;Minimum Required PTO with suggested 4-weeks per year
  &lt;/li&gt;
&lt;li&gt;Intentionally Guided Culture based on inclusion and respect
  &lt;/li&gt;
&lt;li&gt;Remote work
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you aren't sure if you should apply, please apply anyway. Don't self-select yourself out. We'd be happy to discuss any concerns you have with the job post matching your skill set.&lt;/p&gt;

&lt;p&gt;FlashRecruit is committed to creating a diverse environment and is proud to be an equal opportunity employer. All applicants will receive consideration for employment without regard to race, color, religion, gender, gender identity or expression, sexual orientation, national origin, genetics, disability, age, or veteran status.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Side Note: I used &lt;a href="https://textio.com/"&gt;text.io&lt;/a&gt; in the writing of this job post and I'm very happy with the results!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Jessie decides to apply for our job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👩🏾‍💻 Candidate: Jessie&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Education: Self-taught&lt;br&gt;
Experience: 4 years web development&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Worked on chat software before&lt;/li&gt;
&lt;li&gt;Designed and implemented APIs in Node.js&lt;/li&gt;
&lt;li&gt;Implemented web applications in React&lt;/li&gt;
&lt;li&gt;Wrote API documentation&lt;/li&gt;
&lt;li&gt;Managed API project by breaking down tasks and communicating across teams&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Negotiating an Interview Format
&lt;/h2&gt;

&lt;p&gt;This starts with a request for information from the candidate. The request boils down to "what are your strengths that overlap with our needs?"&lt;/p&gt;

&lt;p&gt;We sent Jessie the following email in response to their application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✉️ Subject: FlashRecruit Interview Process&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;To: Jessie&lt;/em&gt;&lt;br&gt;
&lt;em&gt;From: Sean&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Hello Jessie!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Welcome to Phase 2 of our interview process!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phase 1: [Audio Call] Confirm Expectations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phase 2: [Email] Interview Negotiation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Phase 3: [Video Call] Strength Finding Interview&lt;/li&gt;
&lt;li&gt;Phase 4: [Variable] Follow Ups&lt;/li&gt;
&lt;li&gt;Phase 5: [Video Call] Meet the Founders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal here is to really highlight your strengths. Take some time think about what your strengths are, what our problem domain looks like, and how those overlap.&lt;/p&gt;

&lt;p&gt;Our stack is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js (API)&lt;/li&gt;
&lt;li&gt;Ember (Web Client)&lt;/li&gt;
&lt;li&gt;React (Deprecated Web Client)&lt;/li&gt;
&lt;li&gt;React Native (Mobile Apps)&lt;/li&gt;
&lt;li&gt;Heroku/S3/RDS (Infrastructure)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our problem space is the recruiting software landscape. We're currently focused on improving our job board and streamlining customer on-boarding.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;integrating with third party APIs&lt;/li&gt;
&lt;li&gt;building and running recurring processing tasks&lt;/li&gt;
&lt;li&gt;consuming XML feeds&lt;/li&gt;
&lt;li&gt;iterating a relational-database-backed API&lt;/li&gt;
&lt;li&gt;iterating a web client for a job board&lt;/li&gt;
&lt;li&gt;iterating a web chat widget&lt;/li&gt;
&lt;li&gt;rethinking the job board&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please send me your thoughts on what your strengths are and what would best highlight them. This doesn't have to be lengthy. We'll work together to get a set list in place. Then we'll tailor the interview to that list.&lt;/p&gt;

&lt;p&gt;Example Strengths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Modeling a user and authentication system with a focus on security&lt;/li&gt;
&lt;li&gt;Finding and fixing poor DB performance&lt;/li&gt;
&lt;li&gt;Turning a bug report into an actionable bug fix&lt;/li&gt;
&lt;li&gt;TDDing a feature end to end&lt;/li&gt;
&lt;li&gt;Refactoring a too-large model&lt;/li&gt;
&lt;li&gt;Breaking down large tasks into smaller ones&lt;/li&gt;
&lt;li&gt;Optimizing a UX flow&lt;/li&gt;
&lt;li&gt;Designing new views&lt;/li&gt;
&lt;li&gt;Documenting a gnarly part of the system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, we'll schedule the actual interview. We like to book 4 hours for that, but if that large of a block of time doesn't work, we can split it up.&lt;/p&gt;

&lt;p&gt;If coding in an interview setting won't show you at your best, we can provide a homework problem for you to tackle or you can provide a suitable work sample. In those alternative cases, the scheduled interview would involve talking through homework or work sample.&lt;/p&gt;

&lt;p&gt;If you have any questions or concerns about any of this, please let me know.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;br&gt;
~Sean Massa&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The candidate then responds with their strengths. If they shared some relevant strengths, select a couple to build into the interview. If not, either (1) select less relevant strengths as a way to assess their ability to master something or (2) follow up with them to see if there are other strengths you could focus on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✉️ Subject: My Strengths&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;To: Sean&lt;/em&gt;&lt;br&gt;
&lt;em&gt;From: Jessie&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;These are my strengths that seem to overlap with your needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Technical Writing&lt;/li&gt;
&lt;li&gt;API Design&lt;/li&gt;
&lt;li&gt;Outside-in TDD of a Feature&lt;/li&gt;
&lt;li&gt;System Architecture Design&lt;/li&gt;
&lt;li&gt;Breaking Large Tasks into Smaller Tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't typically do well programming in an interview setting. My past work is all private, which means I have no work samples I can provide. Can we do the homework problem you mentioned instead? I'm most comfortable with Node.js for APIs and Jade templates or React for web apps.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;br&gt;
~Jessie&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Interview Modules
&lt;/h3&gt;

&lt;p&gt;Interview Modules are how you can find balance between consistent and adaptive interview experiences for candidates. The format is flexible around which modules are chosen, but a given module should remain as consistent as possible across candidates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Selection:&lt;/strong&gt; Some modules will still apply to most candidates. In our interviews, we typically do the same 2 modules for everyone, then leave room for 2 other modules to be flexible towards the candidate's strengths. Modules should also span technical implementation skills as well as collaboration/communication skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Format:&lt;/strong&gt; Collaboration is very important. If the candidate is comfortable with it, try to make at least 1 large module involve collaboration with a team member. That doesn't have to be live coding in a high-pressure situation. Collaboration could be talking through an architectural design, planning a project, triaging (not necessarily fixing) a bug, or the like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Construction:&lt;/strong&gt; As you use this process more, you'll build more and more modules. This will require some work, but it's also worth the effort. When building modules, try to make them as realistic as possible. The domain should be the same or analogous to your domain by default, although you can shift this per candidate too. The tasks should be representative of the work required to do the job. Try to be flexible on technology choices, as well. Candidates will do a better job if they can pick tools they know to solve a problem.&lt;/p&gt;

&lt;p&gt;For our job, we could really use someone with strong API Design and high-quality execution. We also want to assess how well they will work in a remote environment.&lt;/p&gt;

&lt;p&gt;Let's set up an interview that highlights the candidate's "API Design" and "Testing". We already asked for a technical writing sample and the homework problem includes a writing section as well. We can dig further into how well the candidate works in a remote environment during the Q&amp;amp;A.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✉️ Subject: Interview Agenda&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;To: Jessie&lt;/em&gt;&lt;br&gt;
&lt;em&gt;From: Sean&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;We're excited for your interview!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proposed Interview Format&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's a breakdown of the interview format we'd like to use. Let me know if you have any comments, questions, or concerns.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intro and Overview (15m)&lt;/li&gt;
&lt;li&gt;Homework Discussion: Chat App (1hr)&lt;/li&gt;
&lt;li&gt;Break (10m)&lt;/li&gt;
&lt;li&gt;Collaborate: API Design (1hr)&lt;/li&gt;
&lt;li&gt;Collaborate: Refactoring and Testing (45m)&lt;/li&gt;
&lt;li&gt;Break (5m)&lt;/li&gt;
&lt;li&gt;Two-directional Q&amp;amp;A (45m)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Intro and Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll walk through the general landscape of FlashRecruit's industry and architecture. This will help us get things flowing before digging into the other modules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Homework Discussion: Chat App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Strength:&lt;/em&gt; Technical Implementation&lt;/p&gt;

&lt;p&gt;We'll discuss the decisions you made and the product you produced for the homework assignment. This will include what you would plan to do if you had more time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Strength: "Designed and implemented APIs in Node.js"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We’ll take a page from our system and talk through how we’d go about architecting the API of it from scratch. We’ll dig into general strategy, URL schemes, wire formats, resource relationships, data backing, performance monitoring and optimization, and wherever else you have related skill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collaborate: Refactoring and Testing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Strengths: Refactoring and Testing&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We'll discuss refactoring and testing strategies in general and with a specific example from our system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two-directional Q&amp;amp;A&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ll take this time to ask more specific questions about each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Please do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provide a technical writing sample&lt;/li&gt;
&lt;li&gt;confirm the interview format&lt;/li&gt;
&lt;li&gt;provide availability for a 4-hour block in the next week or so&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;The candidate agrees to the format and sends the requested information. Now we build the assessment scorecard for this candidate.&lt;/p&gt;

&lt;p&gt;Each module can assess multiple skills, some deeply and others less so. There can also be a lot of overlap. A scorecard format helps us gather notes from multiple sources about a specific skill.&lt;/p&gt;

&lt;p&gt;Below are the modules we're going to run along with the skills we can capture signals for in those modules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📝 Assessment Plan: Jessie&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Homework Discussion: Chat App&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;UI Component Architecture&lt;/li&gt;
&lt;li&gt;UI Component Development&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;CSS Implementation&lt;/li&gt;
&lt;li&gt;Technical Writing&lt;/li&gt;
&lt;li&gt;Breaking Down Tasks&lt;/li&gt;
&lt;li&gt;Maintainable Code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaborate: API Design&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;API Design&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Technical Writing&lt;/li&gt;
&lt;li&gt;Collaboration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaborate: Refactoring and Testing&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Working with Existing Code&lt;/li&gt;
&lt;li&gt;Culture: Empathy and Understanding for Past Decisions&lt;/li&gt;
&lt;li&gt;Collaboration&lt;/li&gt;
&lt;li&gt;Maintainable Code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two-directional Q&amp;amp;A&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Giving Feedback&lt;/li&gt;
&lt;li&gt;Receiving Feedback&lt;/li&gt;
&lt;li&gt;Remote Work&lt;/li&gt;
&lt;li&gt;Collaboration&lt;/li&gt;
&lt;li&gt;Continuous Learning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  That's It, for Now!
&lt;/h1&gt;

&lt;p&gt;You may be able to imagine how we take that scorecard through to the execution of the interview, but either way, there will be future posts in this series that cover the rest of the process.&lt;/p&gt;

&lt;p&gt;I hope you found Strength-finding Interviews useful. This is the result of research, experimentation, and iteration across years of work, quite often in collaboration with &lt;a href="https://dev.to/trek"&gt;Trek&lt;/a&gt;. You can read &lt;a href="https://medium.com/@trek/tired-engineering-interviews-hired-engineering-auditions-5f9f00147a57"&gt;Trek's earlier take&lt;/a&gt; on this format, as well.&lt;/p&gt;

&lt;p&gt;I consider this to be an evolving process. If you have questions or feedback, please let me know! Please send it to &lt;a href="https://twitter.com/endangeredmassa"&gt;@endangeredmassa&lt;/a&gt;, &lt;a href="//mailto:endangeredmassa@gmail.com"&gt;endangeredmassa@gmail.com&lt;/a&gt;, or comment below!&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@trek/tired-engineering-interviews-hired-engineering-auditions-5f9f00147a57"&gt;Tired: Engineering Interviews; Hired: Engineering Auditions. ~Trek Glowacki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://larahogan.me/blog/onsite-interview-loop-template/"&gt;Interview Loop Template ~Lara Hogan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gallupstrengthscenter.com/"&gt;Gallup's Clifton Strengths Finder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hiring</category>
      <category>interview</category>
      <category>career</category>
    </item>
    <item>
      <title>An Incremental Approach to Linting to Your Projects</title>
      <dc:creator>Sean Massa</dc:creator>
      <pubDate>Tue, 08 Aug 2017 00:00:00 +0000</pubDate>
      <link>https://dev.to/endangeredmassa/an-incremental-approach-to-linting-to-your-projects-10g3</link>
      <guid>https://dev.to/endangeredmassa/an-incremental-approach-to-linting-to-your-projects-10g3</guid>
      <description>&lt;p&gt;I have gone through the process of adding linting to existing, large projects a couple of times. I’ve learned some lessons about how to approach this so that it’s not disruptive to the team doing other work. Follow these steps to get robust linting into your project without pulling team velocity to a halt!&lt;/p&gt;

&lt;h1&gt;
  
  
  What’s So Great About Linting?
&lt;/h1&gt;

&lt;p&gt;The really great benefits to code linting are that it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fixes potential bugs&lt;/li&gt;
&lt;li&gt;removes unnecessary code&lt;/li&gt;
&lt;li&gt;enforces internal coding style&lt;/li&gt;
&lt;li&gt;(optionally) enforces community coding style&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consistency of code removes the need to make decisions (individually and as a team) about hundreds of small things where the actual decision doesn’t necessarily matter, but having a decision is valuable. With linting, your team can have those conversations once, then enforce them throughout the life of the project. And yes, those can change over time, but it’s much easier to update a rule and fix all of the violations at once!&lt;/p&gt;

&lt;p&gt;It can also be valuable to adopt coding styles shared by a larger community. Your language, framework, or tools’ communities will have their own conventions. Aligning with those can help alliviate friction when a developer switches context between internal and external code as well as when a developer changes jobs internally or externally.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Do I Get Started?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Collect Existing Conventions
&lt;/h3&gt;

&lt;p&gt;You may already have a styleguide or a set of explicit or implicit conventions. Whatever you already have in place, document it as preparation for a Code Convention team meeting. Don’t worry, we’ll only have one meeting in this process!&lt;/p&gt;

&lt;h3&gt;
  
  
  Discuss Conventions
&lt;/h3&gt;

&lt;p&gt;Take those notes to a team meeting to talk about what the conventions are and what you’d like them to be. Try to stick to higher-level issues (indentation, spacing, keyword use) rather than every single possible decision.&lt;/p&gt;

&lt;p&gt;Your conventions will directly and indirectly inform many linting rules, but there are far too many of them to have the team agree on every single one. Starting with a solid base set of rules will allow you to (1) make fewer decisions and (2) leave your team room to make decisions where it matters to them. See the last section for my personal recommendations on linting tools and configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforce Passing Conventions
&lt;/h3&gt;

&lt;p&gt;One tool or ruleset at a time, install and configure it to run. Ideally, integrate this into your build process and test suite.&lt;/p&gt;

&lt;p&gt;You will probably see a lot of linting failures at this point. Go through the list and disable all rules where there is at least one falure. Now you should see no failures. Keep a list somewhere of which rules are turned off because they fail (as opposed to turned off because you disagree with them). We’ll need those later!&lt;/p&gt;

&lt;p&gt;Commit this and submit it for review. What you have now is a set of rules that are enforced and all currently pass linting check as well as a TO DO list of rules to turn on. This should be low-impact to the team while still enforcing the linting rules you were already following.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix Failing Conventions
&lt;/h3&gt;

&lt;p&gt;One (or a few related) rule(s) at a time, enable the rules and fix all of the failures. Some tools like eslint will fix some of the failures for you (&lt;code&gt;eslint . --fix&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Submit the changes for review. Team members can disagree and have a conversation in the pull request, but hopefully the earlier discussions make this uncommon.&lt;/p&gt;

&lt;p&gt;Repeat this step until all rules are back on!&lt;/p&gt;

&lt;h1&gt;
  
  
  The Result
&lt;/h1&gt;

&lt;p&gt;We now have a process for incremental maitenance work that we can do in small chunks to improve the state of the code. As long as your team has the appropriate slack time dedicated to maintenance, you’ll get through all of this work in no time!&lt;/p&gt;

&lt;h1&gt;
  
  
  I Want More!
&lt;/h1&gt;

&lt;p&gt;There are a lot of great linters out there. Here’s a list to get you started!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://eslint.org/"&gt;eslint&lt;/a&gt; (with &lt;a href="http://eslint.org/docs/user-guide/configuring#using-eslintrecommended"&gt;eslint:recommended&lt;/a&gt;) &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/airbnb/javascript"&gt;airbnb-base&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/benmosher/eslint-plugin-import"&gt;eslint-plugin-import&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/browse/keyword/eslint"&gt;others…&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;ember &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ember-cli/ember-cli-eslint"&gt;ember-cli-eslint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ember-a11y/ember-a11y-testing"&gt;ember-a11y-testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rwjblue/ember-cli-template-lint"&gt;ember-cli-template-lint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tomasbasham/ember-cli-scss-lint"&gt;ember-cli-scss-lint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;other&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sasstools/sass-lint"&gt;sass lint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dequelabs/axe-core"&gt;axe (a11y)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/web/tools/lighthouse/"&gt;lighthouse (PWA/Performance)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

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

</description>
      <category>linting</category>
    </item>
  </channel>
</rss>
