<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.0">Jekyll</generator><link href="https://blog.harrison.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.harrison.dev/" rel="alternate" type="text/html" /><updated>2021-10-08T15:07:46+00:00</updated><id>https://blog.harrison.dev/feed.xml</id><title type="html">hharnisc.github.io</title><subtitle>Jekyll source for personal blog.</subtitle><entry><title type="html">Twilio Console: A Large Scale Migration to Jamstack</title><link href="https://blog.harrison.dev/2021/10/05/twilio-console-jamstack-migration.html" rel="alternate" type="text/html" title="Twilio Console: A Large Scale Migration to Jamstack" /><published>2021-10-05T00:00:00+00:00</published><updated>2021-10-05T00:00:00+00:00</updated><id>https://blog.harrison.dev/2021/10/05/twilio-console-jamstack-migration</id><content type="html" xml:base="https://blog.harrison.dev/2021/10/05/twilio-console-jamstack-migration.html">&lt;p&gt;Twilio’s sustained growth over the last decade has led to several architectural iterations of the Twilio Console. With each iteration, comes changes to handle the biggest problems of the time. The next generation of the Twilio Console is no exception! In this talk, we’ll walk through why and how we went about migrating from the legacy Console to the new Console experience safely (spoiler, iframes were involved) and the impact this has had on our customers and the organization.&lt;/p&gt;</content><author><name></name></author><summary type="html">Twilio’s sustained growth over the last decade has led to several architectural iterations of the Twilio Console. With each iteration, comes changes to handle the biggest problems of the time. The next generation of the Twilio Console is no exception! In this talk, we’ll walk through why and how we went about migrating from the legacy Console to the new Console experience safely (spoiler, iframes were involved) and the impact this has had on our customers and the organization.</summary></entry><entry><title type="html">Transparent Salaries</title><link href="https://blog.harrison.dev/2020/02/15/transparent-salaries.html" rel="alternate" type="text/html" title="Transparent Salaries" /><published>2020-02-15T00:00:00+00:00</published><updated>2020-02-15T00:00:00+00:00</updated><id>https://blog.harrison.dev/2020/02/15/transparent-salaries</id><content type="html" xml:base="https://blog.harrison.dev/2020/02/15/transparent-salaries.html">&lt;p&gt;Transparent salaries have come up again in Tech Twitter under the &lt;a href=&quot;https://twitter.com/search?q=%23KnowYourWorth&quot;&gt;#KnowYourWorth&lt;/a&gt; hashtag. There is interesting discussion going on around why are there compensation differences between US and non-US salaries, &lt;em&gt;is sharing your salary a good idea?&lt;/em&gt; and selection bias. I’d also like to share some of my personal experiences as someone who’s had their salary posted publicly (while at Buffer) and worked at companies who are less transparent about salaries. Please note that these are my own opinnions and I belong to a group that is both privledged and overrepresented in tech.&lt;/p&gt;

&lt;h2 id=&quot;knowyourworth&quot;&gt;#KnowYourWorth&lt;/h2&gt;

&lt;p&gt;Let’s start with this Tweet:&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Pay inequality is a big problem in tech, especially for underrepresented groups like women and minorities. The best way you can help is by sharing yours. I’ll go first.&lt;br /&gt;&lt;br /&gt;🏫: B.A. - C.S.&lt;br /&gt;⏳: 5.5 years&lt;br /&gt;🏷: Staff/G06&lt;br /&gt;🌎: NYC&lt;br /&gt;💸: $205k base, $500k equity over 4 yrs&lt;a href=&quot;https://twitter.com/hashtag/KnowYourWorth?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#KnowYourWorth&lt;/a&gt;&lt;/p&gt;&amp;mdash; Zac Sweers (@ZacSweers) &lt;a href=&quot;https://twitter.com/ZacSweers/status/1228205724255154177?ref_src=twsrc%5Etfw&quot;&gt;February 14, 2020&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Lots going on here so lets dig in. (Sorry in advance for being intrusive Zac)&lt;/p&gt;

&lt;h3 id=&quot;location&quot;&gt;Location&lt;/h3&gt;

&lt;p&gt;Location is probably the single biggest factor in compensation. Zac lives in New York, which has one of the highest (if not the highest) cost of living in the US at 129% higher than the national average. If you’re curious, this post about &lt;a href=&quot;https://www.businessinsider.com/what-its-like-living-in-new-york-100000-salary-reality-2019-2&quot;&gt;what its like to make 6 figures in NYC&lt;/a&gt; is enlightening. NYC has a very healthy tech scene (second only to the Bay Area), so there are usually multiple companies with competing offers for in demand software engineers.&lt;/p&gt;

&lt;p&gt;When you compare compensation between EU and US it is not an apples to apples comparison. In the US, healthcare is privitized and there are much less social programs that act as a safety net. Public transit is either non-existent or needs major improvements in every US city. There’s too much to say for a single blog post here, so the TL;DR is that EU salaries are going to look low since it’s hard to get a decent comparison of benefits.&lt;/p&gt;

&lt;h3 id=&quot;responsibilities&quot;&gt;Responsibilities&lt;/h3&gt;

&lt;p&gt;Someone with the title of Staff Engineer (usually) has to work accross teams, is solving problems on the scale of years and is a mentor/guide to multiple engineers. Every role is different, but a good Staff Engineer brings a huge amount of value to a company, they are a force multiplier in some sense. One very rough way to get a sense of an employee’s value is to look at the average amount of revenue per employee and compare. Zac works at Slack, so I grabbed the best numbers I could find:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$140 million annual revenue / 1700 employees = $82,352.94 rev per employee per year
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This number can be impacted by a number of things including the percentage of engineers, public perception and numerous choices made by C level execs. What we can do with this number is to compare it to Zac’s yearly compensation.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(($500k / 4 years) + $205k) / $82,352.94 = ~4.0071
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So Zac’s salary represents the yearly revenue generated from about 4 engineers. Which, so long as Zac is fulfillng the responsibilities of a Staff level engineer, makes sense. A good Staff Engineer is going to influence 100s of not 1000s of decisions at a company during their tunure.&lt;/p&gt;

&lt;p&gt;Comparitively, Buffer which operates differently to Slack, has a revenue per employee closer to $250K:&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Here are the &lt;a href=&quot;https://twitter.com/buffer?ref_src=twsrc%5Etfw&quot;&gt;@Buffer&lt;/a&gt; financials / metrics for October 2019.&lt;br /&gt;&lt;br /&gt;- We crossed a key milestone of $22m in ARR 👌&lt;br /&gt;- Our highest monthly growth rate in around 1.5 years 🚀&lt;br /&gt;&lt;br /&gt;Thread with more thoughts ⬇️ &lt;a href=&quot;https://t.co/LdIWuISagr&quot;&gt;pic.twitter.com/LdIWuISagr&lt;/a&gt;&lt;/p&gt;&amp;mdash; Joel Gascoigne (@joelgascoigne) &lt;a href=&quot;https://twitter.com/joelgascoigne/status/1194735213588312064?ref_src=twsrc%5Etfw&quot;&gt;November 13, 2019&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;There are a number of reasons to have a high revenue per employee – it is much easier to be cash positive (humans are expensive) and it affords you more choices. Too much revenue per employee and you leave opportunites on the table (or off depending on where you’re from). This is all important context when you’re negotiating your salary if you have this information availible.&lt;/p&gt;

&lt;h2 id=&quot;is-sharing-your-salary-a-good-idea&quot;&gt;Is Sharing Your Salary A Good Idea?&lt;/h2&gt;

&lt;p&gt;In my opinnion &lt;strong&gt;it is the right thing to do, but it should not be your responsibility as an employee&lt;/strong&gt;. Hiding salaries is an excuse to pay people differently for the same job and is an easy place for bias to impact compensation. With transparent salaries, candidates can see compensation up front and waste a lot less of everyone’s time. Instead of individuals posting salaries it would be better to share detailed reports of salary information &lt;a href=&quot;https://docs.google.com/spreadsheets/d/11s9VSyf4yaYUsqBKLaVH78NL8wdl8gXoj5BGAzjIFuc/edit#gid=671465451&quot;&gt;like Buffer does&lt;/a&gt;. This takes the burden off of employees, especially those from underrepresented groups, and places it on the company.&lt;/p&gt;

&lt;p&gt;There are arguments to be made that your current salary can be used against you, but would you want to work for a company that does that? It seems like a red flag that the company doesn’t treat employees very well. I’ve had the opposite experience in that I could reference my compensation at my previous role with clear signals early on “we can’t pay you at that rate” or “we’re in the right ballpark and can be competetive”. This was my experience and your milage will vary.&lt;/p&gt;

&lt;h2 id=&quot;selection-bias&quot;&gt;Selection Bias&lt;/h2&gt;

&lt;p&gt;As you’re reading the #KnowYourWorth posts remember that there is &lt;a href=&quot;https://en.wikipedia.org/wiki/Selection_bias&quot;&gt;selection bias&lt;/a&gt; going on. You’re more likely to get people who are proud or upset with their salaries and people who live in SF or NY. So if you’re reading these and getting upset, keep in mind that you’re probably seeing people who are on some extreme, the outliers. Chances are you’re doing well, especially when compared to other industries.&lt;/p&gt;

&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</content><author><name></name></author><category term="Transparancy" /><summary type="html">Transparent salaries have come up again in Tech Twitter under the #KnowYourWorth hashtag. There is interesting discussion going on around why are there compensation differences between US and non-US salaries, is sharing your salary a good idea? and selection bias. I’d also like to share some of my personal experiences as someone who’s had their salary posted publicly (while at Buffer) and worked at companies who are less transparent about salaries. Please note that these are my own opinnions and I belong to a group that is both privledged and overrepresented in tech.</summary></entry><entry><title type="html">Effective Syncs With Distributed Teams</title><link href="https://blog.harrison.dev/2019/06/02/effective-syncs-with-distributed-teams.html" rel="alternate" type="text/html" title="Effective Syncs With Distributed Teams" /><published>2019-06-02T00:00:00+00:00</published><updated>2019-06-02T00:00:00+00:00</updated><id>https://blog.harrison.dev/2019/06/02/effective-syncs-with-distributed-teams</id><content type="html" xml:base="https://blog.harrison.dev/2019/06/02/effective-syncs-with-distributed-teams.html">&lt;p&gt;Over the past few years I’ve participated or lead syncs in fully distributed, partially distributed and centrally located teams. I’ve learned that doing effective syncs in a distributed team is similar to doing them in a centrally located team. However, there are a few differences that make distributed team syncs a little more difficult than a centrally located team sync. I’ll share a process that has been borrowed from many different sources and tweaked over time with new teammates and companies.&lt;/p&gt;

&lt;h2 id=&quot;why-do-this&quot;&gt;Why Do This?&lt;/h2&gt;

&lt;p&gt;Effective syncs lay the foundation for strong communication channels and opportunities to build trust between team members. When everyone understands the shared goals and knows what they need to do, the team can move in the same direction. Getting everyone aligned is arguably one of the most important goals of any team or organization since it reduces wasted effort and increases velocity. A great deep dive on this subject is &lt;a href=&quot;https://www.amazon.com/dp/B0058DRUV6/&quot;&gt;Good to Great: Why Some Companies Make the Leap…And Others Don’t&lt;/a&gt; by Jim Collins, which provides several case studies on companies that have exhibited these behaviors sustainably.&lt;/p&gt;

&lt;h2 id=&quot;define-the-process&quot;&gt;Define The Process&lt;/h2&gt;

&lt;p&gt;The first step to laying the foundation for communication and trust is to define a process to run team syncs. The driver for the meeting should be a real time collaborative document like &lt;a href=&quot;https://docs.google.com/&quot;&gt;Google Docs&lt;/a&gt;, &lt;a href=&quot;http://notion.so&quot;&gt;Notion&lt;/a&gt; or &lt;a href=&quot;https://www.dropbox.com/paper&quot;&gt;Dropbox Paper&lt;/a&gt;. This is important because it allows the entire team to follow along and participate before, during and after the meeting. Participants should join the call individually and preferably on a headset to keep the noise down.&lt;/p&gt;

&lt;h3 id=&quot;before&quot;&gt;Before&lt;/h3&gt;

&lt;p&gt;If you don’t already have a shared document, create one with the template below. If you do have a shared document create a new entry at the top of the document with the same template. Update the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YYYY-MM-DD&lt;/code&gt; with the date the sync will take place. Share this with all the participants as early as possible and ask team members to add agenda items. It’s also best practice to create a recurring weekly meeting with a link to the agenda. Syncs should last between 30 minutes (for teams around 4) and no longer than an hour (for teams around 8). The longer agenda items are on the list will mean that agenda items get more exposure. Participants will have more time to think about each item. About an hour before the meeting prompt participants (a calendar or slack reminder is great for this) to add missing agenda items to the list. Five minutes before the meeting starts send out the link for the video call in a shared channel.&lt;/p&gt;

&lt;h3 id=&quot;during&quot;&gt;During&lt;/h3&gt;

&lt;p&gt;The meeting leader should start the meeting on time, this is a signal that peoples time is respected – also late participants can catch up with the meeting notes. Starting at the top of the agenda, clearly state the contents of the agenda item and ask the person who wrote it if they would like to provide more context. Some agenda items can be announcements while others may require more discussion or possibly be an action item for next week. The leader should help guide the conversation if it gets off topic or unproductive. The timekeeper should be providing signals for spending too much time on a given topic. The recorder should be writing down what was talked about and adding action items.&lt;/p&gt;

&lt;p&gt;There are few recurring agenda items that serve as a reminder to ensure that the current and future meetings go smoothly. Before talking about this weeks agenda items the team should choose meeting roles (other than the leader) and go through the status of last weeks action items. If any of the action items from last week remain they should be moved to the next weeks action items or chosen not to be done by the team. After this weeks agenda has been talked through the team should go through next weeks action items. The goal is to make sure each action has someone assignee and the list is prioritized. This helps each team member understand their next tasks. The very last item should be to choose a leader for the next week.&lt;/p&gt;

&lt;h3 id=&quot;after&quot;&gt;After&lt;/h3&gt;

&lt;p&gt;If there are action items that are related to longer term goals, the leader should link the action item to the longer term goals. (This depends on how longer term goals are communicated and prioritized) The leader should also create the next weeks agenda with the date of the next sync and share it with the team. As each team member completes their respective action items, they mark the item complete with the checkbox. This allows everyone to track progress and quickly communicate status. During the week as team members think of things to talk about they can add items to the shared agenda for the next week.&lt;/p&gt;

&lt;h2 id=&quot;template&quot;&gt;Template&lt;/h2&gt;

&lt;p&gt;Here’s a template written in Markdown that can be used to drive distributed team syncs:&lt;/p&gt;

&lt;div class=&quot;language-md highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gh&quot;&gt;# YYYY-MM-DD&lt;/span&gt;

&lt;span class=&quot;gu&quot;&gt;## Agenda&lt;/span&gt;

Meeting leader: @harrison
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; [ ] choose meeting roles (other than leader)
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; [ ] go over last weeks action items
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; [ ] &lt;span class=&quot;gs&quot;&gt;**add action items here**&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; [ ] make sure this weeks action items have an assignee and are prioritized
&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; [ ] choose meeting leader for next week

&lt;span class=&quot;gu&quot;&gt;## Notes&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; What did the team talk about?
&lt;span class=&quot;p&quot;&gt;  -&lt;/span&gt; some more context

&lt;span class=&quot;gu&quot;&gt;## Action Items&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;
-&lt;/span&gt; [ ] Action items from the meeting @harrison

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

&lt;h2 id=&quot;meeting-roles&quot;&gt;Meeting Roles&lt;/h2&gt;

&lt;p&gt;Shoutout to &lt;a href=&quot;https://twitter.com/vaurorapub&quot;&gt;@vaurorapub&lt;/a&gt; for teaching us about meeting roles while at Buffer.&lt;/p&gt;

&lt;p&gt;There are a few variations of this but there are essentially four roles:&lt;/p&gt;

&lt;h3 id=&quot;the-leader&quot;&gt;The Leader&lt;/h3&gt;

&lt;p&gt;Develops the agenda, guides the group through the meeting and ensures that the team has equal speaking opportunities.&lt;/p&gt;

&lt;h3 id=&quot;the-recorder&quot;&gt;The Recorder&lt;/h3&gt;

&lt;p&gt;Ensures everyone has access to the agenda (before, during and after), takes notes during the meeting and records action items during the meeting.&lt;/p&gt;

&lt;h3 id=&quot;the-timekeeper&quot;&gt;The Timekeeper&lt;/h3&gt;

&lt;p&gt;Ensures that the team is spending the appropriate amount of time on each agenda item. When agenda items go long, this person can interject and request an action item for a followup meeting or move on if the conversation is unproductive. The timekeeper can also contribute to the conversation.&lt;/p&gt;

&lt;h3 id=&quot;the-participant&quot;&gt;The Participant&lt;/h3&gt;

&lt;p&gt;Understands the agenda before the meeting and clarifies agenda items that they added during the meeting. Contributes to the conversation around agenda items.&lt;/p&gt;

&lt;p&gt;For a more in depth description here &lt;a href=&quot;https://www.conferencecalling.com/blog/meeting-roles&quot;&gt;an article that goes in detail on each meeting role&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;gotchas&quot;&gt;Gotchas&lt;/h2&gt;

&lt;p&gt;Here are some gotchas that I’ve experienced with some ideas on how to address each one. You might find some of your own along the way depending on your team and company.&lt;/p&gt;

&lt;h3 id=&quot;large-teams&quot;&gt;Large Teams&lt;/h3&gt;

&lt;p&gt;With team syncs larger than 8, the number of agenda items and amount of discussion around each item tend to grow. This makes it difficult to have meetings under an hour. Through personal experience, 1 hour is the maximum amount of time you can keep the attention of a small group. If possible, the best thing to do is to split the group into smaller teams. It’s likely that there is already a natural point of division in work.&lt;/p&gt;

&lt;h3 id=&quot;partially-distributed-teams&quot;&gt;Partially Distributed Teams&lt;/h3&gt;

&lt;p&gt;In a partially distributed team, some members work in a central location while others are working “remote”. The “remote” team members end up getting treated second class (likely not on purpose) and it is more difficult to contribute to the sync. Some of the difficulties can be fixed by enabling team members from the central location to work from home so they can get the “remote” experience. People will quickly point out things like &lt;em&gt;the audio quality is not good enough with a single laptop in the center of the room&lt;/em&gt; and &lt;em&gt;every time I try to talk I get cut off&lt;/em&gt;. Some things can be solved with better tech while others are solved with empathy from being “remote”.&lt;/p&gt;

&lt;h3 id=&quot;timezones&quot;&gt;Timezones&lt;/h3&gt;

&lt;p&gt;When a team is split in very difficult timezone splits (8 hours apart or more) it can be difficult to find a time that works for everyone. There are tools that can help you find the best time for example: https://www.timeanddate.com/worldclock/meeting.html When the best time ends up being a bad compromise for everyone it can be helpful to ask teammates if they are ok with an early or a late meeting. Someone being a morning person or a night owl can make all the difference! The best solution might be to alternate between ideal timezones for different teammates.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;While this process has been tested in a few different companies and team setups, it should be viewed as a starting point for your own team syncs. Every team is going to be different and what works for one might not work for another. It’s important to listen to the team and use their feedback to improve the process. If you do make changes, it is best to change one thing at a time and observe. Using the scientific method you can keep doing things that are working and revert things that are not until you’re happy with the process.&lt;/p&gt;</content><author><name></name></author><category term="Remote Work" /><category term="Productivity" /><summary type="html">Over the past few years I’ve participated or lead syncs in fully distributed, partially distributed and centrally located teams. I’ve learned that doing effective syncs in a distributed team is similar to doing them in a centrally located team. However, there are a few differences that make distributed team syncs a little more difficult than a centrally located team sync. I’ll share a process that has been borrowed from many different sources and tweaked over time with new teammates and companies.</summary></entry><entry><title type="html">Getting The Most Out Of Kubernetes</title><link href="https://blog.harrison.dev/2018/12/11/getting-the-most-out-of-kubernetes.html" rel="alternate" type="text/html" title="Getting The Most Out Of Kubernetes" /><published>2018-12-11T00:00:00+00:00</published><updated>2018-12-11T00:00:00+00:00</updated><id>https://blog.harrison.dev/2018/12/11/getting-the-most-out-of-kubernetes</id><content type="html" xml:base="https://blog.harrison.dev/2018/12/11/getting-the-most-out-of-kubernetes.html">&lt;p&gt;So you’ve carefully crafted your first Kubernetes service, and you’re ready to deploy it to production. Well, not quite: there are still some important unknowns to understand before your service will be ready for production traffic. It’s still unclear how the new service behaves when it’s being pushed, and it’s possible that Kubernetes will kill the service before serving a single request. While at Buffer, we developed a technique to optimize Kubernetes deployment limits by using load testing to identify optimal values for resource limits. When the service is under heavy load there are a few key metrics to watch to identify bottlenecks. These key metrics can be used to adjust resource limits. This real world approach allowed us to safely and efficiently switch our production traffic to our Kubernetes cluster and can be applied to any application.&lt;/p&gt;</content><author><name></name></author><summary type="html">So you’ve carefully crafted your first Kubernetes service, and you’re ready to deploy it to production. Well, not quite: there are still some important unknowns to understand before your service will be ready for production traffic. It’s still unclear how the new service behaves when it’s being pushed, and it’s possible that Kubernetes will kill the service before serving a single request. While at Buffer, we developed a technique to optimize Kubernetes deployment limits by using load testing to identify optimal values for resource limits. When the service is under heavy load there are a few key metrics to watch to identify bottlenecks. These key metrics can be used to adjust resource limits. This real world approach allowed us to safely and efficiently switch our production traffic to our Kubernetes cluster and can be applied to any application.</summary></entry><entry><title type="html">20 Questions To Ask Before Joining A Startup</title><link href="https://blog.harrison.dev/2018/11/25/twenty-questions-to-ask-before-joining-a-startup.html" rel="alternate" type="text/html" title="20 Questions To Ask Before Joining A Startup" /><published>2018-11-25T00:00:00+00:00</published><updated>2018-11-25T00:00:00+00:00</updated><id>https://blog.harrison.dev/2018/11/25/twenty-questions-to-ask-before-joining-a-startup</id><content type="html" xml:base="https://blog.harrison.dev/2018/11/25/twenty-questions-to-ask-before-joining-a-startup.html">&lt;p&gt;When I first joined a startup in 2012 I did my best to ask the right questions when interviewing. My engineering background prepared me for engineering tasks and helped me write a resume, but it didn’t prepare me well for how to evaluate a startup offer. While this might be obvious to some, this is what I wish I knew when trying to break into the startup scene.&lt;/p&gt;

&lt;h2 id=&quot;foundation&quot;&gt;Foundation&lt;/h2&gt;

&lt;p&gt;Making sure you’ve got what you need in your day to day is critical. Unless you are independently wealthy, &lt;strong&gt;don’t take a job that can’t cover cost of living or does not provide health insurance&lt;/strong&gt;. This means you need to spend some time to create your monthly budget (good to do this even if you aren’t interviewing). A good rule of thumb is 25% of take home pay should go towards housing and up to 40% in the Bay Area. 40% can be done if you minimize costs like going out or have a second income.&lt;/p&gt;

&lt;p&gt;If the job requires relocation it is very common for startups to offer relocation packages. I’ve moved across the country twice and it cost around $3000-$6000 for things like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;relocation cubes (&lt;a href=&quot;https://www.upack.com/&quot;&gt;https://www.upack.com/&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;shipping a car (&lt;a href=&quot;https://www.uship.com/vehicles/&quot;&gt;https://www.uship.com/vehicles/&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;if not shipping a car, hotel while traveling&lt;/li&gt;
  &lt;li&gt;food while traveling&lt;/li&gt;
  &lt;li&gt;hotel for a few nights while finding more permanent housing&lt;/li&gt;
  &lt;li&gt;registration fees (license plate, sticker, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both times we moved we packed ourselves, which we could do because we were both healthy 20 somethings. So adjust if you plan on hiring movers.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1. What is the base yearly salary?
2. What are details of the health, eye and dental insurance plans?
3. Does the company offer relocation? (if you need it)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;equity&quot;&gt;Equity&lt;/h2&gt;

&lt;p&gt;The amount of equity in the offer depends on experience and the stage of the company. This part of the guide will focus on options, since at the time of writing options are the most common way for startups to offer equity. &lt;a href=&quot;https://a16z.com/2016/08/24/options-ownership/&quot;&gt;Here’s an article on how options work&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first goal is to understand the percentage of shares the company is offering. It is pretty common to get a written offer with the raw number of shares. While helpful, this is only part of the equation, since the number of shares doesn’t mean much if there are hundreds of millions of shares already issued.&lt;/p&gt;

&lt;p&gt;Here’s a nice formula from Buffer that shows one way of determining startup equity amounts: &lt;a href=&quot;https://open.buffer.com/buffer-open-equity-formula/&quot;&gt;https://open.buffer.com/buffer-open-equity-formula/&lt;/a&gt;. This formula is helpful because it takes risk into account by considering the number of people in the company. The smaller the company the larger amount of risk, and a greater reward if things work out.&lt;/p&gt;

&lt;p&gt;Lets say you’re a relatively new engineer (2-3 years experience) and joining a company with less than 10 employees. A fair amount of equity would be likely be around 0.3% - 0.7%.&lt;/p&gt;

&lt;p&gt;In the recent years it has become more common for companies offer a 10 year exercise window on stock options. This means employees have 10 years to decide to buy or pass on stock options once they’ve vested, which is a great! However it is still pretty standard to see a 90 day exercise window. The effect is that after leaving the company, employees have to make the decision to buy or pass up on purchasing vested stock options. This could be a difficult choice for someone who doesn’t have much cash on hand. Companies that have shorter exercise windows end up benefiting the people who are present during an exit. Here’s some more information if you’re interested in learning more: &lt;a href=&quot;https://blog.colony.io/on-creating-a-better-employee-equity-plan-d89bcab4a4e2/&quot;&gt;https://blog.colony.io/on-creating-a-better-employee-equity-plan-d89bcab4a4e2/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is also important to note that early employees experience more dilution events. An example of a dilution event would be raising another round of funding. This is another reason why joining a company early should offer more equity. If you joining a company around a Series A raise, you can usually expect to see around 20% - 30% dilution.&lt;/p&gt;

&lt;p&gt;The next item to consider is the strike price, which is the purchase price for the options when they vest. The strike price is often determined by the board, so it might not be possible to get this before starting. What’s important about the strike price is that it is the starting point, so the company needs to grow for you to make money from selling options. If you can’t get the strike price, make sure you believe the company will grow. Early employees often get a better (lower) strike price, to compensate for the risk.&lt;/p&gt;

&lt;p&gt;After understanding the percentage of shares the company is offering and the number of issued shares, it is possible to get an idea of the potential value of the options. Here’s a helpful startup equity calculator: &lt;a href=&quot;https://comp.data.frontapp.com/&quot;&gt;https://comp.data.frontapp.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most importantly, the majority of startups fail. The equity could be worth nothing, which is another reason why it is so important to have a strong foundation.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;4. How many total options are offered?
5. What is the total number of issued shares?
6. What is the vesting schedule?
7. What is the exercise window of vested options?
8. What is the strike price? (You might not get an answer to this one)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;funding&quot;&gt;Funding&lt;/h2&gt;

&lt;p&gt;There are many factors in startup funding to consider. While getting information about cash on hand and burn rate are important, it is beneficial to understand who is investing along with some history on their past investments.&lt;/p&gt;

&lt;p&gt;Let’s start with the basics. Ask for total amount of funding, how much cash the company has on hand (preferably that day) and the burn rate. With this information you can get a picture of the scale the company is operating as well as how quickly they’re spending cash.&lt;/p&gt;

&lt;p&gt;After learning about operating costs and spending, dig into who has invested into the company. The investors can have a profound impact on the company culture and the direction of the company. Tools like &lt;a href=&quot;https://angel.co/&quot;&gt;AngelList&lt;/a&gt; and &lt;a href=&quot;https://www.crunchbase.com/&quot;&gt;Crunchbase&lt;/a&gt; provide information about previous investments. Individual investors can usually be found on LinkedIn.&lt;/p&gt;

&lt;p&gt;While it may seem a bit forward, ask if the company has failed to make payroll in the last year. If they have struggled to make payroll in the past, this makes choosing the startup a riskier venture and might be a signal that the founders are having trouble raising money.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;9. What is the total amount of funding raised?
10. How much cash is on hand?
11. What is the [burn rate](https://baremetrics.com/academy/burn-rate)?
12. What round of funding has the company raised?
13. Who has invested in the company?
14. In the last year has the company failed to make payroll?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;board&quot;&gt;Board&lt;/h2&gt;

&lt;p&gt;Just like the investors, the board can have a huge impact on the direction of the company. Determining if the board is healthy for the company is difficult because it is highly subjective. Basically it comes down the deeply unsatisfying &lt;em&gt;it depends&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;When evaluating the board, look for an imbalance in power (or control). If an individual or closely connected group on the board can lock or overturn a decision themselves there is a higher chance that the board is unhealthy. A board with concentrated power is almost the same as an individual making all the decisions. Concentrated power is not objectively bad, especially if you know the people with control well and trust that they will do the right thing.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;15. Who is on the board of directors and how many seats does each member have?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;responsibilities&quot;&gt;Responsibilities&lt;/h2&gt;

&lt;p&gt;A big perk of working at a startup is that the projects are high impact and the people are often at a high bar. There’s not much room to work on things that are unimportant to the business or for people who can’t pull their own weight. People often describe working at a startup like packing ten years into a single years worth of learning. Even if you’re a deep expert in a niche field, daily learning will be critical to get things done. Make sure the prospective projects are interesting and will take your career in the desired direction. If you’re not sure what direction to take your career, chose a role that will expose you to lots of different ideas you &lt;em&gt;might&lt;/em&gt; be interested in. It is not uncommon for someone to find something they love doing and become the person who &lt;em&gt;owns a set of problems or services&lt;/em&gt; related to that thing.&lt;/p&gt;

&lt;p&gt;Startups change at an accelerated pace and is typical for projects to get cancelled (sometimes before the first day!). To get a feel for how often things change, ask questions about &lt;a href=&quot;https://a16z.com/2017/02/18/12-things-about-product-market-fit/&quot;&gt;product market fit&lt;/a&gt;. It is critical that the company is working closely with customers to understand they are solving the right problem. Working with the customer can look like doing customer research, support forums (yes engineers do support sometimes at startups) or some other direct line of contact with the customer. If the company has already identified a product that fits the market, the engineering team is going to be solving whatever problems it needs to in order to build the product. If the company has not found a good fit yet, the focus will be on finding the right problem to solve. The process is commonly referred to as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Lean_startup#Pivot&quot;&gt;pivot&lt;/a&gt; and will likely change the engineering team’s focus.&lt;/p&gt;

&lt;p&gt;After gaining insight on future projects the next step is to get to know potential teammates. Hopefully the company involves potential teammates in the the interview process so you can meet them and ask questions. If the company doesn’t do this you can usually ask to meet with them, especially if they extend you an offer. Consider it a red flag if they won’t let you speak to a potential co-worker. Keep in mind that you’ll be spending lots of time working with these people, so you’ll want to pretty sure that these are people who you can get along with. That’s not to say that everyone will be your new best friend, but there should be a mutual respect. This is one of those occasions where you get to choose who you surround yourself with, so make sure these are quality people. If you get a bad feeling about someone, trust your gut here, there are lots of other startups!&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;16. What projects do you picture I'd work on?
17. Has the company found product market fit?
18. How does the company collect feedback from customers?
19. Who would I be working with to complete the projects?
20. Ask each new potential teammate:
  1. What do you work on?
  2. What about your role are you enjoying?
  3. What could the company improve on?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Technically&lt;/em&gt; there are 23 questions but I grouped the last one together as a question for new potential teammates. Also 23 questions to ask before joining a startup didn’t have as good a ring to it.&lt;/p&gt;

&lt;p&gt;I’d like to add a couple of notes before you go off and send this list of questions to potential employers. Try to get as many questions answered conversationally during the interview and save the unanswered questions for the end. It is ok to send a list of unanswered questions if time ran out during the interview.&lt;/p&gt;

&lt;p&gt;It is unlikely that the interviewers will be able to answer &lt;em&gt;every question&lt;/em&gt; for a number of different reasons, ranging from &lt;em&gt;don’t know&lt;/em&gt; to &lt;em&gt;I can’t answer that&lt;/em&gt;. It might be helpful to mark the questions that are important to you. For instance you might care a lot about &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;equity&lt;/code&gt; but not care as much about the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;board&lt;/code&gt; structure since you know the founders very well.&lt;/p&gt;

&lt;p&gt;This is not the definitive list of questions for everyone but more of a generic starting point. If you took this list and added questions based off your personal experiences you’d be in a better position to pass or accept an offer than if you used only these questions.&lt;/p&gt;

&lt;p&gt;Finally, and most importantly, trust your gut. If you get to the interview and something feels off, it probably is. Just because a startup is doing well doesn’t mean they have their shit together. There are 1000s of startups to choose from and spending a little extra time to find the right one is worth the effort.&lt;/p&gt;</content><author><name></name></author><category term="Startups" /><summary type="html">When I first joined a startup in 2012 I did my best to ask the right questions when interviewing. My engineering background prepared me for engineering tasks and helped me write a resume, but it didn’t prepare me well for how to evaluate a startup offer. While this might be obvious to some, this is what I wish I knew when trying to break into the startup scene.</summary></entry><entry><title type="html">Remote Work Matters For Communities</title><link href="https://blog.harrison.dev/2018/10/26/remote-work-matters-for-communities.html" rel="alternate" type="text/html" title="Remote Work Matters For Communities" /><published>2018-10-26T00:00:00+00:00</published><updated>2018-10-26T00:00:00+00:00</updated><id>https://blog.harrison.dev/2018/10/26/remote-work-matters-for-communities</id><content type="html" xml:base="https://blog.harrison.dev/2018/10/26/remote-work-matters-for-communities.html">&lt;p&gt;A few weeks ago, &lt;a href=&quot;https://twitter.com/rrhoover/&quot;&gt;@rrhoover&lt;/a&gt; sent out a poll asking what people find most important when looking for a job, and remote work came out on top by a wide margin. The results were hardly surprising to me. Watching the discussion about health, parenting and general freedom it sparked, I found myself thinking that’s true - but that’s not it. That’s not why remote work is changing our world for the better.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Let&amp;#39;s say you&amp;#39;re looking for a new job. What&amp;#39;s most important to you? 🤔&lt;/p&gt;&amp;mdash; Ryan Hoover (@rrhoover) &lt;a href=&quot;https://twitter.com/rrhoover/status/1040643457901985793?ref_src=twsrc%5Etfw&quot;&gt;September 14, 2018&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Now this poll isn’t exactly a scientific study - it excluded a few things most people value like fair pay, a strong and ethical team, worthy mission etc. But then I’m not a scientist, and the point is, people care a lot about being remote workers themselves. That’s cool. But we’re missing out on that bigger picture why as a society, we should be supporting companies that do remote work.&lt;/p&gt;

&lt;p&gt;Remote work is not without trade-offs, and it’s not for everyone. That said, there are some non-obvious benefits that can make the world a better place - more than just getting rid of your morning commute.&lt;/p&gt;

&lt;p&gt;My first experience with remote work was at Respondly (since acquired by &lt;a href=&quot;https://buffer.com&quot;&gt;Buffer&lt;/a&gt;) mostly working with other people who were working remote. I was living in the Bay Area with teammates in New Zealand, Germany and other cities in the US. Up to that point I had only worked with local teams in an office and had no expectations. The only real difference I felt was the adjustment to written communication, since I am primarily an audio learner. This was quickly overcome and often better since it is possible to search through all previous conversations.&lt;/p&gt;

&lt;p&gt;Fast forward a couple years and I’m working remotely 100% of the time. I’ve moved away from the Bay Area and still have a fulfilling job in tech. While it hasn’t been easy 100% of the time, I’ve managed to stay disciplined with my schedule. I haven’t fallen into the &lt;em&gt;sweatpants every day&lt;/em&gt; trap you sometimes hear people talk about with remote work (there are days though 😂). I spend time at the local coffee shops, the library and a few restaurants and bars with wifi.&lt;/p&gt;

&lt;h2 id=&quot;investment-in-communities&quot;&gt;Investment In Communities&lt;/h2&gt;

&lt;p&gt;If you think of spending money as a small vote every time you spend it, getting a coffee can be an investment. When you spend money at the local coffee shop more of it &lt;a href=&quot;https://www.amiba.net/resources/multiplier-effect/&quot;&gt;stays in the community longer&lt;/a&gt; if you compare spending at Starbucks or having coffee delivered from Amazon.&lt;/p&gt;

&lt;p&gt;The effect is that tech companies are investing in the communities where the employees live. Over the long term this could open up other opportunities in small towns with a big remote working presence. Some towns have already started to catch on, &lt;a href=&quot;https://www.citylab.com/life/2018/05/remove-work-vermont-money/561626/&quot;&gt;even offering $10,000 to live there&lt;/a&gt; so long as you work in another state. The added opportunities will give people more options, rather than &lt;em&gt;needing&lt;/em&gt; to live in a city. This isn’t to say that everyone should work in a distributed team or live in a small town, just that &lt;em&gt;if&lt;/em&gt; you can do you job from anywhere it should be your choice where to work.&lt;/p&gt;

&lt;h2 id=&quot;being-part-of-the-community&quot;&gt;Being Part Of The Community&lt;/h2&gt;

&lt;p&gt;When you spend time in the community you have to interact with other humans (weird right?!) and conversations happen where ideas are exchanged. This works best when people have different ideas. Tech centers like the Bay Area (and cities in general) have created pockets of like minded people – in both cities and the people who stayed in small towns. You could go political and point out that a lot of problems happen when these groups feel like they’re on different sides. In reality, it ends up being an imaginary line that separates people.&lt;/p&gt;

&lt;p&gt;Giving people the option to stay in their communities is important, and this tweet sums it up perfectly:&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Hey tech companies, you want to have a positive influence on society and politics?&lt;br /&gt;&lt;br /&gt;Let people work remotely from their home towns&lt;br /&gt;&lt;br /&gt;Let people vote in the communities where it matters most&lt;br /&gt;&lt;br /&gt;Let them contribute to those local economies&lt;br /&gt;&lt;br /&gt;Let them support their extended families&lt;/p&gt;&amp;mdash; ɥɔɐoɹ (@roach) &lt;a href=&quot;https://twitter.com/roach/status/1048716567435866112?ref_src=twsrc%5Etfw&quot;&gt;October 6, 2018&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;This all makes me hopeful that things are going to keep getting better, so long as we can keep working together to make this a thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Special shout out to &lt;a href=&quot;https://twitter.com/katie_womers&quot;&gt;@katie_womers&lt;/a&gt; for suggestions and edits!&lt;/strong&gt;&lt;/p&gt;

&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</content><author><name></name></author><category term="Remote Work" /><summary type="html">A few weeks ago, @rrhoover sent out a poll asking what people find most important when looking for a job, and remote work came out on top by a wide margin. The results were hardly surprising to me. Watching the discussion about health, parenting and general freedom it sparked, I found myself thinking that’s true - but that’s not it. That’s not why remote work is changing our world for the better.</summary></entry><entry><title type="html">We Wrote A Book: Atomic Migration Strategy For Web Teams</title><link href="https://blog.harrison.dev/2018/07/09/atomic-migration-stategy-for-web-teams.html" rel="alternate" type="text/html" title="We Wrote A Book: Atomic Migration Strategy For Web Teams" /><published>2018-07-09T00:00:00+00:00</published><updated>2018-07-09T00:00:00+00:00</updated><id>https://blog.harrison.dev/2018/07/09/atomic-migration-stategy-for-web-teams</id><content type="html" xml:base="https://blog.harrison.dev/2018/07/09/atomic-migration-stategy-for-web-teams.html">&lt;p&gt;It all started at &lt;a href=&quot;https://conferences.oreilly.com/fluent/fl-ca-2017&quot;&gt;Fluent Conf 2017&lt;/a&gt; with a talk I gave on &lt;a href=&quot;https://bufferapp.github.io/buffer-talks/2017/06/09/migrating-with-atomic-design.html#1&quot;&gt;Migrating With Atomic Design&lt;/a&gt;. After the talk I was approached by O’Reilly and asked if I wanted to turn the talk into a book. My initial reaction was &lt;strong&gt;hell yes&lt;/strong&gt;, followed quickly by &lt;em&gt;what did I just agree to&lt;/em&gt; 😱. I’m an audio learner and a slow writer, so writing does not come natural to me. However, I really wanted to write a book since I’d never done it before and it seemed like a challenge that would push me outside of my comfort zone. I’d love to share how I went about writing and what went into writing a book with a publisher.&lt;/p&gt;

&lt;h2 id=&quot;getting-help&quot;&gt;Getting Help&lt;/h2&gt;

&lt;p&gt;When thinking about what we had to do at &lt;a href=&quot;https://buffer.com&quot;&gt;Buffer&lt;/a&gt; to get the migration process going, the more I realized this book needed more than the engineering perspective. The migration would not have happened without &lt;a href=&quot;https://twitter.com/katie_womers&quot;&gt;Katie Womersley’s&lt;/a&gt; tirelessly advocating that a migration was the &lt;em&gt;right thing to do right now&lt;/em&gt;. Atomic Migration Strategy for Web Teams needed her perspective, to tell the whole story and be useful. So I asked if she wanted to co-author the book (she said yes 🙌). So we set out and created the outline and submitted the proposal to O’Reilly.&lt;/p&gt;

&lt;h2 id=&quot;actually-writing&quot;&gt;Actually Writing&lt;/h2&gt;

&lt;p&gt;The writing process, not including editing, took about 5 months to complete between October 2017 and February 2018.&lt;/p&gt;

&lt;p&gt;Writing is very draining for me, so my approach to writing is very much about energy management. I had to write every day in the morning, when my mind was most clear and energy was at the max. Looking at the commit data from &lt;a href=&quot;http://gitstats.sourceforge.net/&quot;&gt;gitstats&lt;/a&gt; on the repository you can see that most of the commits were around 9-10 AM:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/atomic-migration-strategy-for-web-teams/commits-hour-of-day.png&quot; width=&quot;100%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Taking a look at the same hourly view across the week you can see that later in the week I’d get started a little later, closer to 10-11 AM:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/atomic-migration-strategy-for-web-teams/commits-hour-of-week.png&quot; width=&quot;100%&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Other than Sunday there are basically zero after hours commits, which I guess that makes Katie and I morning people 🤷&lt;/p&gt;

&lt;p&gt;Katie’s writing style was very different from mine, she would write an entire chapter in one sitting! You wouldn’t see as many commits, but you would see larger diffs in her commits. At one point we talked about if our different approaches to writing stressed each other out, her writing large occasional chunks and me with small daily changes, and we realized we were both writing in the most effective way that worked for us.&lt;/p&gt;

&lt;p&gt;We wrote the book in an O’Reilly tool called &lt;a href=&quot;https://atlas.oreilly.com/&quot;&gt;Atlas&lt;/a&gt;. Atlas is a web application that allows you to write rich text (and a few other formats) and is powered by GIT. It was pretty good working with Atlas, though it had a few minor quirks in the editor. We chose the HTML editor, however I wish we could have had markdown as an option. Since the book was stored in GIT you could clone the repository locally and work in whichever text editor you like and even keep a copy for yourself in Github. Overall the experience was positive and I would totally use Atlas again to write a book.&lt;/p&gt;

&lt;p&gt;Most of the book was written from the local coffee shop &lt;a href=&quot;https://www.google.com/maps/place/Blackberry+Market/@41.874172,-88.0687457,17z/data=!3m1!4b1!4m5!3m4!1s0x880e53120ff84309:0x8c1fdb8c0340506b!8m2!3d41.874172!4d-88.066557&quot;&gt;Blackberry Market&lt;/a&gt;. I work remotely and enjoy working the first half of the day with this view:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/posts/atomic-migration-strategy-for-web-teams/coffee-shop.jpg&quot; width=&quot;100%&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;review-and-edit-process&quot;&gt;Review and Edit Process&lt;/h2&gt;

&lt;p&gt;After writing the initial copy we moved to the review and edit process. This took a couple months to get to after the writing process since the person responsible for our book was transitioning out of the company, the person who took over did an awesome job and picked things up right away. Editing took about 1 month starting in May 2018 and ending in June 2018.&lt;/p&gt;

&lt;p&gt;This is where O’Reilly goes through your &lt;del&gt;code&lt;/del&gt; copy, finds your spelling mistakes and calls you out on your grammatical errors made during moments of weakness. Actually the editors were super friendly and made wonderful suggestions that made the book so other people could read it. I am not great at spelling, anyone who looks at my source code comments can attest to this. Some of the grammatical errors I made also made me question my literacy, but hey, we made it through the process!&lt;/p&gt;

&lt;h2 id=&quot;publishing&quot;&gt;Publishing&lt;/h2&gt;

&lt;p&gt;We made it to the publishing phase 🎉🎉🎉 &lt;em&gt;itshappening.gif&lt;/em&gt; (I won’t actually leave the GIF here since its the most distracting thing ever created)! The book was &lt;a href=&quot;https://www.safaribooksonline.com/library/view/atomic-migration-strategy/9781491999950/&quot;&gt;published as an ebook&lt;/a&gt; on &lt;a href=&quot;https://safaribooksonline.com&quot;&gt;Safari&lt;/a&gt; and was done with the same level of quality that you’d get with a paper copy of the book. My only regret is that we did not get an animal on the cover (I would have picked wolf). If the ebook does well we &lt;em&gt;might&lt;/em&gt; get to expand on it and turn &lt;em&gt;Atomic Migration Strategy for Web Teams&lt;/em&gt; into a hard copy (and hopefully get that wolf cover). But I could not be more happy than how it all turned out, 5 years ago I could not have told you I’d ever be interested in writing a book. Now I’m already thinking about the next one 🙃&lt;/p&gt;

&lt;p&gt;Synopsis for &lt;a href=&quot;https://www.safaribooksonline.com/library/view/atomic-migration-strategy/9781491999950/&quot;&gt;&lt;em&gt;Atomic Migration Strategy for Web Teams&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Atomic Design, created by web designer and consultant Brad Frost, is a system for working with the fundamental building blocks—the atoms—of modern web interfaces. This guide provides hands-on instructions for stitching these simple components together to rewrite your application in a low-risk and nondisruptive way. While the ebook’s examples focus on migrating a frontend application, you can also use these techniques for mobile and backend applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here’s a link to the book on Safari: &lt;a href=&quot;https://www.safaribooksonline.com/library/view/atomic-migration-strategy/9781491999950/&quot;&gt;&lt;em&gt;Atomic Migration Strategy for Web Teams&lt;/em&gt;&lt;/a&gt; we’d love a review if you get a chance to read the book. Any feedback is super helpful, especially if we get a chance to expand or release future editions!&lt;/p&gt;</content><author><name></name></author><category term="Atomic Design" /><category term="Writing" /><summary type="html">It all started at Fluent Conf 2017 with a talk I gave on Migrating With Atomic Design. After the talk I was approached by O’Reilly and asked if I wanted to turn the talk into a book. My initial reaction was hell yes, followed quickly by what did I just agree to 😱. I’m an audio learner and a slow writer, so writing does not come natural to me. However, I really wanted to write a book since I’d never done it before and it seemed like a challenge that would push me outside of my comfort zone. I’d love to share how I went about writing and what went into writing a book with a publisher.</summary></entry><entry><title type="html">Making The Case For Frontend Monorepos</title><link href="https://blog.harrison.dev/2018/06/15/making-the-case-for-frontend-monorepos.html" rel="alternate" type="text/html" title="Making The Case For Frontend Monorepos" /><published>2018-06-15T00:00:00+00:00</published><updated>2018-06-15T00:00:00+00:00</updated><id>https://blog.harrison.dev/2018/06/15/making-the-case-for-frontend-monorepos</id><content type="html" xml:base="https://blog.harrison.dev/2018/06/15/making-the-case-for-frontend-monorepos.html">&lt;p&gt;The industry is shifting to smaller, simpler components with ideas like microservices and component driven development. Monorepos keep all of the related code in one place, which might seem incompatible with with the shift towards modularization. However, in practice, the opposite is true – monorepos allow you to use a standard set of tools and make related changes across components.&lt;/p&gt;

&lt;p&gt;Here are the slides for the talk “Making The Case For Frontend Monorepos” I gave at &lt;a href=&quot;https://2018.syntaxcon.com/&quot;&gt;SyntaxCon 2018&lt;/a&gt;&lt;/p&gt;

&lt;iframe src=&quot;//slides.com/hharnisc/frontend-monorepos/embed&quot; width=&quot;100%&quot; height=&quot;500&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; webkitallowfullscreen=&quot;&quot; mozallowfullscreen=&quot;&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;</content><author><name></name></author><category term="Monorepo" /><summary type="html">The industry is shifting to smaller, simpler components with ideas like microservices and component driven development. Monorepos keep all of the related code in one place, which might seem incompatible with with the shift towards modularization. However, in practice, the opposite is true – monorepos allow you to use a standard set of tools and make related changes across components.</summary></entry><entry><title type="html">The Optimist’s Guide To Coding</title><link href="https://blog.harrison.dev/2018/01/29/the-optimists-guide-to-coding.html" rel="alternate" type="text/html" title="The Optimist’s Guide To Coding" /><published>2018-01-29T00:00:00+00:00</published><updated>2018-01-29T00:00:00+00:00</updated><id>https://blog.harrison.dev/2018/01/29/the-optimists-guide-to-coding</id><content type="html" xml:base="https://blog.harrison.dev/2018/01/29/the-optimists-guide-to-coding.html">&lt;p&gt;Scrolling through my twitter feed, I saw Tweet about how software engineers seem to become less happy over time with coding. Personally I’ve been coding stuff in some capacity for a little over 22 years and still enjoy it just as much as those early days. It made me think about why coding is still fun and seemed like a great opportunity to share some of the things I do to keep it that way.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Looking at my twitter feed, it feels like the longer you&amp;#39;ve been coding professionally, the less you actually like coding.&lt;br /&gt;&lt;br /&gt;For people who&amp;#39;ve been coding for 10+ years, is this how you feel?&lt;/p&gt;&amp;mdash; Saron (@saronyitbarek) &lt;a href=&quot;https://twitter.com/saronyitbarek/status/946562500065083392?ref_src=twsrc%5Etfw&quot;&gt;December 29, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;dedicate-work-time-for-learning-every-day&quot;&gt;Dedicate “Work” Time For Learning Every Day&lt;/h2&gt;

&lt;p&gt;I spend 30-60 minutes at the start of each work day either learning something new or writing about something I recently learned. It is important that this be time set aside from working hours rather than your personal time. I keep finding over and over that a skill I learned last month or last year ends up being super useful today. It is more of an investment and takes a bit for it to pay off. Some examples of learning projects I’ve done in the past:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Build a hello world React app&lt;/li&gt;
  &lt;li&gt;Implement merge sort in an unfamiliar language&lt;/li&gt;
  &lt;li&gt;Take a storytelling class on Kahn Academy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;surround-yourself-with-people-who-are-excited&quot;&gt;Surround Yourself With People Who Are Excited&lt;/h2&gt;

&lt;p&gt;Excitement tends to be infectious. When you’re around a group of people who are enthusiastic about what they’re doing, it tends to rub off. Sometimes it is the little extra push that keeps you motivated to get through a challenging problem. Often times these end up being the people who inspire you to learn something new - providing ideas for the 30-60 minutes of daily learning time.&lt;/p&gt;

&lt;h2 id=&quot;be-a-mentor&quot;&gt;Be A Mentor&lt;/h2&gt;

&lt;p&gt;Few things in software are as rewarding as guiding others through their software engineering journey. Pairing with teammates helps your teammate learn while reinforcing your own skills. More often than not, your teammate will surprise you with the way they solved a problem or used a library you’ve never seen. Most importantly you’re helping someone else level up their skills and grow as an engineer. Over time you’ll end up being surrounded by people who want to learn and grow!&lt;/p&gt;

&lt;h2 id=&quot;stop-doing-things-that-arent-working&quot;&gt;Stop Doing Things That Aren’t Working&lt;/h2&gt;

&lt;p&gt;Over the years, ideas around software come along that seem great at first glance but end up doing more harm than good. One example is the “Software Craftsman” concept. I found that always striving for producing high quality software was making me think more about how to structure the code than the problem. I was over thinking things and spending too much time on problems where a quick and hacky solution would have been enough.&lt;/p&gt;

&lt;p&gt;As a general trend, ideas that always push farther into the perfectionist mindset seem to decrease my levels of happiness. When I started spending more time thinking about the level of quality a project needed, I felt a sense of purpose in why I was coding with high quality – I could justify what I was doing. Done is better than perfect but perfect is never done.&lt;/p&gt;

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

&lt;p&gt;Keep building things that interest you and keep learning! The world has enough consumers but never has enough builders and doers.&lt;/p&gt;</content><author><name></name></author><category term="Software" /><summary type="html">Scrolling through my twitter feed, I saw Tweet about how software engineers seem to become less happy over time with coding. Personally I’ve been coding stuff in some capacity for a little over 22 years and still enjoy it just as much as those early days. It made me think about why coding is still fun and seemed like a great opportunity to share some of the things I do to keep it that way.</summary></entry><entry><title type="html">How I Hacked My Schedule To Get 3 Days Of Deep Work A Week</title><link href="https://blog.harrison.dev/2018/01/08/how-i-hacked-my-schedule.html" rel="alternate" type="text/html" title="How I Hacked My Schedule To Get 3 Days Of Deep Work A Week" /><published>2018-01-08T00:00:00+00:00</published><updated>2018-01-08T00:00:00+00:00</updated><id>https://blog.harrison.dev/2018/01/08/how-i-hacked-my-schedule</id><content type="html" xml:base="https://blog.harrison.dev/2018/01/08/how-i-hacked-my-schedule.html">&lt;p&gt;Over the last year my role at Buffer has changed from an individual contributer to a technical leadership role. While the amount of time I spend coding and doing architecture hasn’t changed much, the way I go about the tasks has changed significantly. Instead of being focused on a project from start to finish, I move around projects as needed. Sometimes a team will get blocked on a tricky problem or need to make a decision that could impact other teams or request technical mentor-ship to level up their skills. I’ll jump in and provide technical context (when I can) and try to help in a why that will reduce the reliance on myself.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The goal is to teach and automate myself out of a job!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A couple of challenges started to crop up as the scope of projects increased. The first was that the frequency of random questions increased. It is important to note that Buffer is a fully distributed team with &lt;a href=&quot;https://open.buffer.com/no-office/&quot;&gt;no physical office&lt;/a&gt;, so the random questions come in the form of private Slack messages. 99% of the questions fell under the important but not urgent category (sometimes they’d find the answer after a bit of searching 🙌). Another challenge was that some teammates thought they couldn’t ask me questions because I wasn’t explicitly on their team. This led to questions being asked when things became urgent, and often required an expensive context switch. While working on cross-team projects, this was making very difficult to get things done. Especially when working on projects that span multiple teams, there is a huge amount of context that needs to be formed in your mind before you start solving the problem. Building context can take hours, &lt;a href=&quot;http://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/&quot;&gt;only to be lost by a random interruption&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After some reflection I realized both of these problems were related. Cross team projects require a clear communication as well as long periods of Deep Work. Deep Work involves minimizing distraction to stay focused on a cognitively demanding task, which allows you to get the most of your time. If you’re interested in learning more about Deep Work, check out Cal Newport’s &lt;a href=&quot;http://calnewport.com/books/deep-work/&quot;&gt;Deep Work: Rules for Focused Success in a Distracted World&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For me personally I can context switch within these two boundaries, but crossing the boundary between communication and coding is very difficult. With that realization, combined with the observation that most of the questions I was getting were non-urgent I reorganized my schedule:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Monday&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Tuesday&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Wednesday&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Thursday&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Friday&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Pairing, syncs, etc.&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;X&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;X&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Deep Focus Work&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;X&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;X&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;X&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;I’ve been doing this since mid November and have already noticed some changes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Teammates from multiple teams have requested pairing sessions&lt;/li&gt;
  &lt;li&gt;The number of non-urgent questions has gone down (almost to 0)&lt;/li&gt;
  &lt;li&gt;Urgent communication is much more visible through Slack&lt;/li&gt;
  &lt;li&gt;I’ve been able to complete several long standing tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is important to note that deep work time can be interrupted by things that are both urgent and important. Ignoring pager alerts would be bad for everyone! However, treating every question as urgent is likely to do more harm than good. Depending on how you work, this may or may not work for you. I chose to organize my schedule this way to minimize the type of context switches that were holding me back and make time for important things like pairing/mentoring. Being able to organize your own schedule is a wonderful perk of remote work. Figuring out what works for you can be a challenge, and can even change over time. It’s more than setting aside time for work, its also deciding what you’ll do with the time you set aside.&lt;/p&gt;</content><author><name></name></author><category term="Remote Work" /><category term="Schedule" /><summary type="html">Over the last year my role at Buffer has changed from an individual contributer to a technical leadership role. While the amount of time I spend coding and doing architecture hasn’t changed much, the way I go about the tasks has changed significantly. Instead of being focused on a project from start to finish, I move around projects as needed. Sometimes a team will get blocked on a tricky problem or need to make a decision that could impact other teams or request technical mentor-ship to level up their skills. I’ll jump in and provide technical context (when I can) and try to help in a why that will reduce the reliance on myself.</summary></entry></feed>