<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog &#8211; PhilFreo.com</title>
	<atom:link href="https://philfreo.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://philfreo.com</link>
	<description>The homepage of Phil Freo, product &#38; engineering leader</description>
	<lastBuildDate>Tue, 11 Apr 2023 15:07:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.12</generator>
	<item>
		<title>Typefully Profile</title>
		<link>https://philfreo.com/blog/typefully-profile/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Fri, 03 Mar 2023 16:20:14 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<guid isPermaLink="false">https://philfreo.com/?p=954</guid>

					<description><![CDATA[In recent years I&#8217;ve been doing less blogging here, but writing more on Twitter. When I have a bit more to say, I&#8217;ve found Typefully as a really nice writing tool. They also have a &#8220;Profile&#8221; view that rolls up tweet threads into blog post form. My latest posts are here: https://typefully.com/philfreo Enjoy!]]></description>
										<content:encoded><![CDATA[
<p>In recent years I&#8217;ve been doing less blogging here, but <a href="https://twitter.com/philfreo">writing more on Twitter</a>.</p>



<p></p>



<p>When I have a bit more to say, I&#8217;ve found <a rel="noreferrer noopener" href="https://typefully.com/" target="_blank">Typefully</a> as a really nice writing tool. They also have a &#8220;Profile&#8221; view that rolls up tweet threads into blog post form. My latest posts are here:</p>



<p></p>



<p><a href="https://typefully.com/philfreo"><strong>https://typefully.com/philfreo</strong></a></p>



<p></p>



<p>Enjoy!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sabbaticals</title>
		<link>https://philfreo.com/blog/sabbaticals/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Fri, 13 Aug 2021 21:48:11 +0000</pubDate>
				<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Personal]]></category>
		<guid isPermaLink="false">https://philfreo.com/?p=922</guid>

					<description><![CDATA[I took my first sabbatical this year, after Close started (generously) offering fully paid 4-week sabbaticals for all employees after 5 years. Recently I spoke with our CEO, Steli, who just came back from his own sabbatical, about how our sabbaticals went and what we learned. Our conversation was recorded for our company&#8217;s internal podcast [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I took my first sabbatical this year, after Close started (generously) offering fully paid 4-week sabbaticals for all employees after 5 years. </p>



<p>Recently I spoke with our CEO, <a href="https://twitter.com/steli">Steli</a>, who just came back from his own sabbatical, about how our sabbaticals went and what we learned. Our conversation was recorded for our company&#8217;s internal podcast (we use <a href="https://castos.com">Castos</a>) but I thought I&#8217;d also write up some of my sabbatical thoughts and lessons learned while our conversation is still fresh&#8230;</p>



<span id="more-922"></span>



<figure class="wp-block-embed-twitter wp-block-embed is-type-rich is-provider-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">I’m on a 4-week sabbatical starting this week. Super grateful for <a href="https://twitter.com/close?ref_src=twsrc%5Etfw">@close</a> offering this perk – I’m excited to be spending extra time with my wife and little kiddos, be able to recharge, catch-up on personal stuff etc. <a href="https://t.co/mrEKV0y8Ud">https://t.co/mrEKV0y8Ud</a></p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/1357127503459069954?ref_src=twsrc%5Etfw">February 4, 2021</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<h2>Why take a sabbatical?</h2>



<p>Besides just being a great perk to take advantage of, a sabbatical is meant to be <strong>a time for rest, recharge, and renewal.</strong> </p>



<p>I&#8217;ve been at Close a very long time (9+ years). Given enough years in the same environment, anyone can get burnt out or just want to take an extended break. Vacations and other regular time off (among other strategies) can help avoid this, however a week at a beach (knowing that your inbox is piling up while you&#8217;re gone), is pretty different than taking a more extended break away from work.</p>



<p>Both at Close and elsewhere, I&#8217;ve seen long-tenured employees quit or come close to quitting their job even without any specific plan on what they want to pursue next – simply because they felt burnt out or wanted unstructured time to reflect, deal with personal issues, and/or consider their next steps in life.</p>



<p>A sabbatical is a great way to have space for this, without having to quit or use up a year&#8217;s worth of vacation time all at once.</p>



<p>I think given several years in the same company, everyone would benefit from an extended break. Hopefully you come back refreshed and renewed!</p>



<h2>Planning a sabbatical</h2>



<h3>Timing – When should I schedule my sabbatical?</h3>



<p>Sabbaticals are best planned months in advance, to give yourself and your team adequate time to prepare for your absence. Beyond having advance notice, it&#8217;s also good to choose a time when (as much as you can foresee) things aren&#8217;t going to be too hectic, so you can truly disconnect during it.</p>



<p>I had first planned, in Feb 2020, to take my sabbatical in the fall of 2020. Not long after making those plans, COVID-19 introduced a huge amount of uncertainty into the world. It soon became pretty clear that 2020 was <em>not </em>going to be a great time to leave the company in great shape since it was such a chaotic time, nor would it have been good for me to be stuck at home on sabbatical. So I waited until things were returning to normal and the company was in a more certain state before I ended up taking mine, earlier this year. </p>



<p>That said, <em>there&#8217;s never going to be a perfect time to be away from work, so at some point you just need to pick dates and commit.</em></p>



<h3>Expectations, Hopes, and Goals</h3>



<p>I had big expectations for my sabbatical. Beyond just wanting to take an extended break from work and recharge, I wanted to do a lot personally.</p>



<p>I wanted to spend a bunch of extra quality time with my family. We also wanted to take a vacation and take our kids to see snow for the first time.</p>



<p>In the several months prior, I had also accumulated a very large list of other things I wanted or needed to do. My Apple Reminders was full of tasks to accomplish, things to read/explore, home improvement projects, side project ideas, etc. I was excited to have time to really take a crack at this list.</p>



<p>Twice previously, I had taken 4 weeks off for paternity leave and had looked forward to those for similar reasons. <em>But parental leave is very very different from a sabbatical</em> – more about surviving, adjusting as a larger family, and helping with the baby/kids – pretty much the opposite of rest &amp; renewal or lots of time for of personal interests.</p>



<h3>Preparing at work</h3>



<p>I lead Engineering at Close – nearly 20 people. It was critical that I left the team and company in good shape while I was on sabbatical so things could keep humming along without any disruption.</p>



<p><em>4+ week sabbaticals are pretty different than a 1-2 week vacation</em>. If you go away for a week or so, things generally operate fine without you. For example you may only miss one instance of a weekly recurring meeting. People will still email you and just expect that you catch up on everything in a few days. At 4+ weeks away, it&#8217;s different. Initiatives don&#8217;t (or at least shouldn&#8217;t) really pause while you&#8217;re gone, and you can&#8217;t just catch up on everything when you get back. You need to ensure your team can really operate without you, versus just waiting on your turn.</p>



<p>So in the weeks leading up to my 4-week sabbatical, I worked hard to help the company be best prepared for my absence. Examples:</p>



<ul><li>I helped ensure that our product development roadmap/plan was planned out a bit farther than was typical.</li><li>I wrote up new internal wiki pages to document processes that I had previously been doing that I wanted to start delegating. <ul><li>Example: We introduced a new &#8220;Cycle Lead&#8221; role that an engineering manager would take on to be the person most responsible for a specific 6-week cycle of product development work and communicating that work to the company.</li></ul></li><li>Previously I had led all of our weekly Engineering Sync meetings. I changed that by setting a schedule with our engineering leadership team to rotate through leading these meetings both while I was out and after.</li></ul>



<p>In addition to allowing the team to operate smoothly while I was on sabbatical, these were all good things to do <em>anyway</em>, and also gave a chance for others on the team to lead in new ways.</p>



<p><em>Writing more things down and having processes that don&#8217;t rely on you – these are all good things even if you&#8217;re not going on a sabbatical</em>.</p>



<p>This preparation work allowed me to more confidently take time off without worrying about how things were going at work.</p>



<h2>The Time Off</h2>



<p>Finally, my sabbatical came! Now to enjoy it&#8230;</p>



<h3>Keeping a log</h3>



<p>First, I have one big tip for anyone taking extended time off&#8230;</p>



<p>I kept a daily log of what I &#8220;worked on&#8221; or spent significant time on that day. I just used an Apple Note and just wrote a few bullets grouped per day. A day might just look like:</p>



<ul><li>Gym</li><li>Tax prep &amp; call with CPA</li><li>Lunch out + bike ride with family</li><li>Caught up with Matt</li></ul>



<p> This simple task helped with a few things:</p>



<ol><li><strong>Help have an idea of where your time went</strong>. It&#8217;s not hard to wonder &#8220;where has all my time been going?&#8221; after having long periods of unstructured time, and this helps.</li><li><strong>Give a sense of accomplishment</strong> each time I added a new thing, even if that thing was just &#8220;fun&#8221; and not a task.</li><li><strong>Prepare for others&#8217; questions</strong>. Having a log helped me be able to look back over my entire sabbatical to be able to answer the common question every one of your colleagues will ask: &#8220;So, how was your sabbatical? What did you do?&#8221;</li></ol>



<p>Don&#8217;t underestimate that last point&#8230; you can safely expect that pretty much every coworker you talk to in the following month will ask you what you did on your sabbatical. Especially if they haven&#8217;t had a chance to do a sabbatical yet, they may have big expectations for you! Be ready to give a clear answer. Reviewing a log can help.</p>



<h3>So what did I actually do?</h3>



<p>Looking over my daily logs, my time went toward the following.</p>



<ul><li><strong>Family:</strong> More quality time with my own family every day. Met up with extended family we don&#8217;t see often. And when a family member was in the hospital, I was able to visit them.</li><li><strong>Vacation:</strong> Planned a family trip to North Carolina and had a great time: road tripping, mountain cabin, snow tubing, alpine coaster, met up with friends there.</li><li><strong>House projects:</strong> Organized garage, improved home audio setup, planned our house to be painted, got some trees trimmed, got some pool staining handled, fixed that pesky loose toilet paper holder, etc.</li><li><strong>Friends</strong>: Caught up with quite a few friends that I hadn&#8217;t talked to in a long time.</li><li><strong>Personal finance:</strong> Worked with a financial advisor, did a lot of reading about investing (<a href="https://www.bogleheads.org/wiki/Main_Page">Bogleheads</a>, books, articles, <a href="https://www.reddit.com/r/financialindependence/">FI/RE</a>), did an EOY finance &amp; spending review, did tax prep / worked with CPA, restructured some charitable giving, etc.</li><li><strong>Learning:</strong> Read a couple eng management articles, learned about some new tech stuff, listened to podcasts, watched some talks.</li><li><strong>Networking:</strong> Met with some local SaaS/tech people in my city.</li><li><strong>COVID vaccines:</strong> Got my parents appointments for shots, my wife and I got our shots (made calls daily looking for leftover doses, etc.) Felt a big relief after getting this &#8220;project&#8221; done!</li><li><strong>Tech projects:</strong> Improved my Raspberry Pi setup and a bit of work on other side projects.</li><li><strong>Shopping</strong>: research and buying a new kitchen dining table set, a new printer, etc.</li></ul>



<p>In summary, my time was spent on a combination of:</p>



<ul><li>Family/fun/relaxation/downtime</li><li>Work on my personal todo list</li><li>Entertaining whatever unexpected things (good or bad) that came up</li></ul>



<h2>Reflection</h2>



<p>4 weeks off sounds like a lot of time, but I didn&#8217;t get to do probably even half of what I wanted to do. For example, I thought I&#8217;d make a lot of improvements to <a href="https://philfreo.com/blog/introducing-teamhome/">a side project</a>, but didn&#8217;t end up spending any time on it at all.</p>



<p>But I am happy with how I spent my time. In particular, I realized that I ended up spending a lot of time on good things I hadn&#8217;t planned on. </p>



<p><em>In hindsight, it was great having a combination of proactive stuff I wanted to do, but equally great to just have time and space for entertaining other unexpected things that come up</em>.</p>



<p>I went back to work recharged and happy to be back. Extended time away gave me a fresh perspective and clarity on what was most important. <em>I went back with renewed focus on how I should best spend my time/energy at work.</em></p>



<h3>Tips &amp; Lessons Learned</h3>



<p>Beyond learning a bunch through reading <em>during</em> my sabbatical, here are my lessons learned <em>about</em> taking sabbaticals:</p>



<ul><li>Anything at work I&#8217;d need to document or turn into a &#8220;process&#8221; in order to take extended time off – these are things I probably should have done regardless.</li><li>It was really great to have a combination of<ul><li><em>proactive</em> plans and goals to move forward, plus</li><li><em>unstructured time</em> to allow space to react to new opportunities and do things I didn&#8217;t plan on.</li></ul></li><li>Keeping a log of where my time went was really helpful.</li><li>What I&#8217;d do different next time:<ul><li>Would have planned my actual travel plans well ahead of time, before things got mostly booked up.</li><li>I&#8217;d have a bit lower expectation on how much I&#8217;d be able to do / how long the time would feel (it did go by very fast)</li></ul></li><li>Sabbaticals are a great way to clear your head and come back to work with clear perspective and priority on what&#8217;s important.</li></ul>



<p>Overall my sabbatical was a great experience and I was really grateful for opportunity.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Introducing TeamHome</title>
		<link>https://philfreo.com/blog/introducing-teamhome/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Tue, 29 Dec 2020 02:50:55 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Product]]></category>
		<category><![CDATA[Remote]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Startups]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">https://philfreo.com/?p=903</guid>

					<description><![CDATA[I built a micro-SaaS as my pandemic side project: TeamHome.app – An internal company directory designed for remote teams. Try it out and let me know what you think. Read on for details &#38; some background&#8230; Tweetstorm version here: Some screenshots: I built TeamHome to both: give me what I always wished existed for seeing [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I built a micro-SaaS as my pandemic side project: </p>



<p><a href="https://teamhome.app" target="_blank" rel="noreferrer noopener" aria-label=" (opens in a new tab)">TeamHome.app</a> – An internal company directory designed for remote teams. Try it out and let me know what you think. </p>



<p> Read on for details &amp; some background&#8230;</p>



<span id="more-903"></span>



<p><em>Tweetstorm version here:</em></p>



<figure class="wp-block-embed-twitter wp-block-embed is-type-rich is-provider-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">🚀 I built a micro-SaaS as my pandemic side project:<a href="https://t.co/sWnZ4ARwGt">https://t.co/sWnZ4ARwGt</a> – An internal company directory designed for remote teams.<br><br>Try it out and let me know what you think.<br><br>👇 Read on for details &amp; behind-the-scenes&#8230;</p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/1341834952648912897?ref_src=twsrc%5Etfw">December 23, 2020</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p>Some screenshots:</p>



<ul class="wp-block-gallery columns-2 is-cropped"><li class="blocks-gallery-item"><figure><a href="https://philfreo.com/wp-content/uploads/2021/01/profile-copy-2.png"><img loading="lazy" width="2557" height="2138" src="https://philfreo.com/wp-content/uploads/2021/01/profile-copy-2.png" alt="" data-id="913" data-link="https://philfreo.com/blog/introducing-teamhome/profile-copy-2/" class="wp-image-913"/></a></figure></li><li class="blocks-gallery-item"><figure><a href="https://philfreo.com/wp-content/uploads/2021/01/fields-copy.png"><img loading="lazy" width="2162" height="1916" src="https://philfreo.com/wp-content/uploads/2021/01/fields-copy.png" alt="" data-id="915" data-link="https://philfreo.com/blog/introducing-teamhome/fields-copy/" class="wp-image-915"/></a></figure></li></ul>



<ul class="wp-block-gallery columns-2 is-cropped"><li class="blocks-gallery-item"><figure><a href="https://philfreo.com/wp-content/uploads/2021/01/times-cropped-1.png"><img loading="lazy" width="1100" height="862" src="https://philfreo.com/wp-content/uploads/2021/01/times-cropped-1.png" alt="" data-id="906" data-link="https://philfreo.com/?attachment_id=906" class="wp-image-906"/></a></figure></li><li class="blocks-gallery-item"><figure><a href="https://philfreo.com/wp-content/uploads/2021/01/map-cropped.png"><img loading="lazy" width="2466" height="1527" src="https://philfreo.com/wp-content/uploads/2021/01/map-cropped.png" alt="" data-id="907" data-link="https://philfreo.com/?attachment_id=907" class="wp-image-907"/></a></figure></li></ul>



<p>I built <a href="https://teamhome.app/" target="_blank" rel="noreferrer noopener" aria-label=" (opens in a new tab)">TeamHome</a> to both: </p>



<ul><li>give me what I always wished existed for seeing my remote team</li><li>productize some ideas I think have helped <a href="https://close.com/">Close</a> as we&#8217;ve grown from 6 to 40+ people remotely.</li></ul>



<p>It has 2 modes:</p>



<ol><li><strong>Just you</strong> – visualize your coworkers&#8217; time zones, see a world map of your company, &amp; embed to keep your public About/Team page always up-to-date. </li><li><strong>Team</strong> – when embraced company wide, everyone has rich profiles/bios to serve as an official company directory.</li></ol>



<p>Big companies get entire teams dedicated to building internal tools. </p>



<p>I wanted to help smaller companies&#8230; to make smooth what&#8217;s commonly a duck tape solution where companies keep their team information together across wikis, spreadsheets, manual emails, google docs, etc.</p>



<p>It&#8217;s been years since I&#8217;ve created a product from scratch, and I was getting the itch to make something new. I wanted to try out some new frameworks and just experiment some. Side projects are great for that.</p>



<figure class="wp-block-embed-twitter wp-block-embed is-type-rich is-provider-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">Been working on a side project (hope to launch soon) and it&#39;s been a good reminder – side projects are *so good* for learning new technologies, experimenting with new ideas, playing with new SaaS services, and just building something in a quick and low-stakes way.</p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/1329790698531532800?ref_src=twsrc%5Etfw">November 20, 2020</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p>There&#8217;s basically nothing brand new here, just packaging together a few different ideas in a hopefully useful way:</p>



<ul><li><a href="https://stripe.com/blog/stripe-home">Stripe Home</a></li><li><a href="https://www.linkedin.com/pulse/how-you-revolutionize-way-your-team-works-together-all-david-politis/">User Manuals</a></li><li>Mapbox maps, Slack API, Tailwind UI, etc. (details further on)</li></ul>



<p>This was just a little side project for me… why did I bother?</p>



<ul><li>To see something like this in the world</li><li>To experiment w/new tech &amp; building from scratch</li><li>To stay sane during a pandemic </li></ul>



<p>Plus, I&#8217;ve seen how useful User Manuals can be, especially when new hires join</p>



<p>Give it a shot – you can use it for free and see your team as soon as you sign in with Slack. I&#8217;d really love any feedback! </p>



<p><a href="https://teamhome.app/" target="_blank" rel="noreferrer noopener" aria-label="TeamHome.app (opens in a new tab)">TeamHome.app</a></p>



<h3>Behind-the-scenes</h3>



<p>Building a SaaS like this has never been easier. I got some questions on what it&#8217;s built with.</p>



<p>So I wanted to give some shout outs to what made building <a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://teamhome.app" target="_blank">TeamHome</a> in a very limited amount of time possible&#8230; 🙌</p>



<ul><li>App UI: <a href="https://tailwindui.com/">Tailwind UI</a> components made it easy to quickly create something that feels rather polished.</li><li>CSS: <a href="https://tailwindcss.com/">Tailwind</a>, which I really started liking and would choose for future projects. </li><li>Icons: <a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://heroicons.com/" target="_blank">Heroicons.com</a> pair nicely with the above</li><li>JavaScript: <a href="https://stimulus.hotwire.dev/">Stimulus</a> – paired nicely with Rails to give my JS some structure. For any site that isn&#8217;t a SPA but needs some JS, this is a really great choice.</li><li>Backend: Ruby on Rails – such a rich ecosystem of gems meant I wasn&#8217;t reinventing the wheel.</li></ul>



<p>A few more:</p>



<ul><li><a href="https://www.mapbox.com/">Mapbox</a> – Beautiful maps API</li><li><a href="https://slack.com/">Slack</a> – Thanks for a rather open API that let&#8217;s you see your entire Team automatically</li><li><a href="https://render.com/">Render</a> – A formidable Heroku competitor at lower cost</li><li><a href="https://stripe.com/">Stripe</a> – With Checkout &amp; Customer Portal, I had to write almost no billing-related code </li></ul>



<p>And lots of open source code. As I mentioned, mostly just glueing ideas together.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Using Lambda@Edge to setup server-side redirects on a Cloudfront+S3 static site</title>
		<link>https://philfreo.com/blog/using-lambdaedge-to-setup-server-side-redirects-on-a-cloudfronts3-static-site/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Wed, 12 Feb 2020 16:48:06 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Engineering]]></category>
		<guid isPermaLink="false">https://philfreo.com/?p=875</guid>

					<description><![CDATA[As an engineering team at @Close, we&#8217;re trying to write more about what we are learning/doing. I recently got to dabble in a little coding project, so I wrote it up. This post originally appeared on the Close Engineering Blog here. We host our main marketing website,&#160;close.com, as a static site (in our case, generated [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><em>As an engineering team at <a href="https://twitter.com/close">@Close</a>, we&#8217;re trying to write more about what we are learning/doing. I recently got to dabble in a little coding project, so I wrote it up. <a href="https://engineering.close.com/posts/redirects-using-cloudfront-lambda-edge">This post originally appeared on the Close Engineering Blog here</a>.</em></p>



<p>We host our main marketing website,&nbsp;<a href="https://close.com/">close.com</a>, as a static site (in our case, generated via&nbsp;<a href="https://www.getlektor.com/">Lektor</a>) served by AWS. We store all the staticly generated files in S3 and have a Cloudfront distribution in front as our CDN.</p>



<p>Occasionally, we’ll need to setup a redirect, to point an old URL to a new URL, for example when combining two pages.</p>



<p>In S3 hosted static websites like ours, there were basically two main ways to accomplish redirects&#8230;</p>



<span id="more-875"></span>



<h2 id="approach-1-html-meta-tag-redirects">Approach 1: HTML meta tag redirects</h2>



<p>The first is to do HTML meta redirects, by putting this tag on the page to redirect away from:</p>



<pre class="wp-block-code"><code>&lt;meta http-equiv="refresh" content="0; url=http://close.com/new-url-here" />
</code></pre>



<p>Whether your hand-code each redirect in this way, or use your static site generator to help (e.g.&nbsp;<a href="https://www.getlektor.com/docs/guides/redirects/">Lektor’s support for Redirects</a>), the result is the same – redirects that happen fully client-side.</p>



<p>While this approach is convenient since everything is 100% static, it can be difficult to maintain in a large website and has real downsides for both performance and SEO compared to server-side redirects.</p>



<h2 id="approach-2-s3-static-website-hosting-redirects">Approach 2: S3 Static Website Hosting Redirects</h2>



<p>S3 does have some&nbsp;<a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">support for server-side redirects</a>, which we were using in addition to meta tags previously described.</p>



<p>These redirects do solve the performance and SEO concerns compared to meta redirect tags.</p>



<p>Here’s an example of that XML format (configured in AWS Console under your S3 bucket &gt; Properties &gt; Static website hosting &gt; Redirection Rules):</p>



<pre class="wp-block-code"><code>&lt;RoutingRules>
  &lt;RoutingRule>
    &lt;Condition>
      &lt;KeyPrefixEquals>home&lt;/KeyPrefixEquals>
    &lt;/Condition>
    &lt;Redirect>
      &lt;Protocol>https&lt;/Protocol>
      &lt;HostName>close.com&lt;/HostName>
      &lt;ReplaceKeyWith/>
      &lt;HttpRedirectCode>301&lt;/HttpRedirectCode>
    &lt;/Redirect>
  &lt;/RoutingRule>
  &lt;RoutingRule>
    &lt;Condition>
      &lt;KeyPrefixEquals>old-page&lt;/KeyPrefixEquals>
    &lt;/Condition>
    &lt;Redirect>
      &lt;Protocol>https&lt;/Protocol>
      &lt;HostName>close.com&lt;/HostName>
      &lt;ReplaceKeyWith/>
      &lt;HttpRedirectCode>302&lt;/HttpRedirectCode>
    &lt;/Redirect>
  &lt;/RoutingRule>
  ...
&lt;/RoutingRules>
</code></pre>



<p>Problems with this approach included:</p>



<ul><li>Their XML syntax is verbose</li><li>Difficulty redirecting to URLs that contain querystrings (<a href="https://tusharghate.com/amazon-s3-bucket-redirect-with-query-params">details</a>)</li><li>Desire for our marketing team to be able to setup webpage redirects without AWS access</li></ul>



<p>So, it was time for a new approach.</p>



<h2 id="approach-3-using-lambdaedge-and-cloudfront-to-do-server-side-redirects">Approach 3: Using Lambda@Edge and Cloudfront to do server-side redirects</h2>



<p><a href="https://aws.amazon.com/lambda/edge/">Lambda@Edge</a>&nbsp;is a feature of Cloudfront that allows you to run serverless functions to tweak the HTTP requests or responses between Cloudfront and your Origin or visitor.</p>



<p>We had recently deployed an&nbsp;<a href="https://gist.github.com/philfreo/3497afb69c3fe737c523fe347d8a4309">extremely simple Lambda@Edge function</a>&nbsp;on our close.com Cloudfront distribution in order to force visitors to the HTTPS version of our site by adding the&nbsp;<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security">HSTS header</a>&nbsp;to all responses.</p>



<p>We could then build upon this to create a user-friendly system for managing redirects.</p>



<h3 id="goal">Goal</h3>



<p>I envisioned a very simple system like the following:</p>



<ul><li>Keep a&nbsp;<code>redirects.json</code>&nbsp;file in the same GitHub repository as rest of our website, which our marketing team could easily maintain (with some instructions nearby).</li><li>Have a Lambda@Edge function attached to our Cloudfront distribution do server-side redirects based on this file.</li><li>Setup our CI/CD pipeline (in CircleCI) so that changes to redirects.json would get deployed automatically.</li></ul>



<p>Here’s the redirects.json format I went with:</p>



<pre class="wp-block-code"><code>{
  "/jobs": { "to": "https://jobs.close.com/", "statusCode": 301 },
  "/resources/the-follow-up-formula": { "to": "/resources/followup", "statusCode": 301 },
  ... etc. ...
}
</code></pre>



<p>(Just be careful that your last entry does not contain a trailing comma.)</p>



<h3 id="setting-up-the-lambdaedge-function">Setting up the Lambda@Edge function</h3>



<p>Here’s the cheatsheet for creating the function properly:</p>



<ol><li>From the&nbsp;<a href="https://console.aws.amazon.com/lambda/home?region=us-east-1#/create/function">Lambda section of the AWS console</a>, create a new Lambda function and give it a name like&nbsp;<code>cloudfront-site-redirects</code>.</li><li>Choose the Node.js 10.x runtime, because that’s currently the latest that Lambda@Edge supports (despite regular Lambda functions supporting Node.js 12.x).</li><li>Under “Permissions”, choose “Create a new role from AWS policy templates” and search for “Basic Lambda@Edge permissions (for Cloudfront trigger)”, which will setup a good IAM role for you (do&nbsp;<em>not</em>&nbsp;choose “Create a new role with basic Lambda permissions” which is insufficient).</li></ol>



<p>Then…</p>



<h4 id="add-code-for-the-lambda-function">Add code for the Lambda function</h4>



<p>Ours ended up looking something like this:</p>



<pre class="wp-block-code"><code>const REDIRECTS_DATA_REGION = 'us-east-1';
const REDIRECTS_DATA_BUCKET = 'example.com';
const REDIRECTS_DATA_OBJECT = 'config/redirects.json';

const AWS = require('aws-sdk');

const s3 = new AWS.S3({ region: REDIRECTS_DATA_REGION });

async function readFile(bucketName, filename) {
  const params = { Bucket: bucketName, Key: filename };
  
  const response = await s3.getObject(params, function (err, data) {
    if (err) {
      console.error('s3.getObject error: ' + err);
    }
  }).promise();
  
  return response.Body.toString();
}

async function getRedirectsData() {
  const txt = await readFile(REDIRECTS_DATA_BUCKET, REDIRECTS_DATA_OBJECT);
  let data;
  try {
    data = JSON.parse(txt);
  } catch (e) {
    console.error('getRedirectsData parse failed', txt, e);
    data = {};
  }
  return data;
}

const supportedStatusCodes = {
  301: 'Moved Permanently',
  302: 'Found',
  307: 'Temporary Redirect'
}


exports.handler = async(event, context) => {
  // Get the incoming request and the initial response from S3
  // https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html
  const { request, response } = event.Records[0].cf;
  
  // Enable HSTS
  response.headers['strict-transport-security'] = [{ key: 'Strict-Transport-Security', value: 'max-age=63072000' }];
  
  // request.uri is just the URL path without hostname or querystring
  let path = request.uri
  
  // Cut off trailing slash to normalize it
  if (path.slice(-1) === '/') {
    path = path.slice(0, -1);
  }
  
  const redirectsData = await getRedirectsData();
  const redirectData = redirectsData[path];
  
  // See if a redirect exists &amp; sanity check that the redirect object is what we expect
  const shouldRedirect = !!(redirectData &amp;&amp; redirectData.to &amp;&amp; supportedStatusCodes[redirectData.statusCode]);
  
  if (shouldRedirect) {
    // Note: We can't completely create a new set of headers even for a redirect
    // because Cloudfront fails painfully if you set (or clear) a "read-only" header.
    // For Origin Response triggers, that includes leaving "Transfer-Encoding" alone.
    // https://github.com/awsdocs/amazon-cloudfront-developer-guide/blob/master/doc_source/lambda-requirements-limits.md#read-only-headers
    response.headers['location'] = [{
      key: 'Location',
      value: redirectData.to,
    }];
    
    return {
      status: redirectData.statusCode,
      statusDescription: supportedStatusCodes[redirectData.statusCode],
      headers: response.headers,
    };
  }
  
  return response;
};
</code></pre>



<h4 id="give-the-iam-role-access-to-your-s3-bucket">Give the IAM role access to your S3 bucket</h4>



<p>On the Lambda page, scroll down to find “Execution role” which gives you a link to the IAM role that was auto-generated for you. Now we are going to expand this role by attaching an additional Policy so it also has permission to access the S3 bucket containing our&nbsp;<code>redirects.json</code>&nbsp;file.</p>



<pre class="wp-block-code"><code>{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:getObject"
            ],
            "Resource": [
                "arn:aws:s3:::example.com",
                "arn:aws:s3:::example.com/*"
            ]
        }
    ]
}
</code></pre>



<p>If your S3 bucket isn’t public, you may need to change its policy too.</p>



<h4 id="publish">Publish</h4>



<p>From your Lambda function’s page:</p>



<ul><li>Click “Save”</li><li>Go to Actions &gt; Deploy to Lambda@Edge</li><li>Choose the Cloudfront distribution to attach this to, and set it up using&nbsp;<strong>Origin response</strong>&nbsp;as the trigger.</li></ul>



<p>We choose “Origin Response” because this allows Cloudfront to cache the redirect itself similar to how it would cache any other response from the Origin.</p>



<p>Then, head to your Cloudfront distribution in AWS. You’ll notice its status is “InProgress” as the changes are propagated. You’ll need to wait for this, and you’ll also need to create an Invalidation (probably for&nbsp;<code>/*</code>) and wait for that too. (This process can take several minutes or more.&nbsp;<a href="https://twitter.com/philfreo/status/1207070622628634624">Ugh</a>.)</p>



<p>Finally, if everything is working properly, you can test out your new server-side redirects!</p>



<pre class="wp-block-code"><code>$ curl -I https://close.com/resources/the-follow-up-formula                
HTTP/2 301 
location: /resources/followup
...
</code></pre>



<h4 id="continuous-deployment">Continuous deployment</h4>



<p>Finally, just make sure that your regular deployment process uploads&nbsp;<code>redirects.json</code>&nbsp;to your S3 bucket (if it’s not already) and that a Cloudfront invalidatoin is created. For us that meant having a few lines in our deployment script like:</p>



<pre class="wp-block-code"><code>aws s3 cp config/redirects.json s3://example.com/config/
aws configure set preview.cloudfront true
aws cloudfront create-invalidation --distribution-id THE_ID_HERE --paths '/*'
</code></pre>



<p>Doing so has allowed our marketing team to have simple control over server-side redirects on our site.</p>



<h4 id="troubleshooting-and-other-learnings">Troubleshooting and other learnings</h4>



<ul><li>As mentioned above, troubleshooting on real deployments can be a time-consuming process. Therefore, you can use a “Test Event” to simulate your code way faster than deploying and waiting for invalidation each time.</li><li>To see if a Cloudfront distribution is using Lambda@Edge, go to the distribution &gt; Behaviors &gt; Edit and at the very bottom you’ll see the ARN with function name &amp; version listed.</li><li>When publishing a new Lambda version, you can leave the Name blank and it will autoincrement a version number.</li><li>From your Lambda function, you can find a link to get to the CloudWatch Logs, which can be very helpful for debugging.</li><li>In Cloudfront Logs: Look at latest Log Groups for both “LambdaEdge” as well as name of your function.</li><li>You can only have 1 Lambda function deployed per trigger (e.g. for Origin Response) per distribution, meaning that the lambda function name should probably be specific to that distribution. (At first I thought I could add a second independent function on top of the existing HSTS one. That doesn’t work, however they do have a “Layers” feature I didn’t explore).</li><li>Lambda functions can use&nbsp;<code>async</code>/<code>await</code>&nbsp;in Node 10.x, so it’s nice to use those despite most online examples using callbacks.</li></ul>



<p>Feel free to hit me up at&nbsp;<a href="https://twitter.com/philfreo">@philfreo</a>&nbsp;with any comments or questions!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>When, Who, How to Hire an Engineering Team (including Hiring Remotely)</title>
		<link>https://philfreo.com/blog/when-who-how-to-hire-an-engineering-team-including-hiring-remotely/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Sat, 30 Jun 2018 20:21:32 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Hiring]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Remote]]></category>
		<category><![CDATA[Startups]]></category>
		<guid isPermaLink="false">http://philfreo.com/blog/?p=775</guid>

					<description><![CDATA[This is the blog post version of a talk I gave at True University in Berkley, CA in June 2018 to help early stage startups&#160;scale their engineering teams from 2 to 20. Hiring is hard. Really hard. I&#8217;ve been hiring on small startup engineering teams for the past 8 years (most recently grown Close’s engineering [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><em>This is the blog post version of a talk I gave at <a href="http://trueventures.com/true-university/" target="_blank" rel="noopener noreferrer">True University</a> in Berkley, CA in June 2018 to help early stage startups&nbsp;scale their engineering teams from 2 to 20.</em></p>



<p>Hiring is hard. Really hard. I&#8217;ve been hiring on small startup engineering teams for the past 8 years (most recently grown <a href="https://close.com/" target="_blank" rel="noopener noreferrer">Close</a>’s engineering team from 2 to 14) and hiring really great engineers never gets easy. But it does get&nbsp;<em>easier&nbsp;</em>with practice and the right strategy.</p>



<p>Here I&#8217;m going to share some things I&#8217;ve learned about when and how to find the right people for your stage, how to structure a hiring process, and distributed/remote work. And most importantly: mistakes I&#8217;ve made along the way at Close.</p>



<span id="more-775"></span>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">Hiring. Is. Hard.</p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/608884949710610433?ref_src=twsrc%5Etfw">June 11, 2015</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<h1>When to hire</h1>



<p>There are just <strong>two simple rules</strong> to follow about&nbsp;<em>when&nbsp;</em>to start hiring your engineering team.</p>



<h2>Don&#8217;t hire too early (rule #1)</h2>



<p><strong>Hiring is hard.</strong> It&#8217;s&nbsp;a REALLLLLLLY hard, slow, painful process. Seriously, you don&#8217;t want to go through it before you have to. Avoid the pain as long as you can!</p>



<p><strong>People are really expensive</strong> ($$$). Generally nothing in your startup will cost more money or take up more of your time and attention than&#8230; people.</p>



<p><strong>Do the job yourself first</strong>. Be busy. Learn and do all the things! If you do everything yourself for a while,&nbsp;you’ll be in better shape to understand what really needs doing. You&#8217;ll be able to write a better job description, and you&#8217;ll be better at identifying a good person to fill the role when the time comes.</p>



<p><strong>Small = fast &amp; nimble.</strong>&nbsp;As much as everyone tries to avoid it, there&#8217;s just always inherent communication and process overhead of having a larger team. Enjoy moving as fast as possible while you&#8217;re small.</p>



<p><strong>Focus on what matters: building a product that people love.</strong> Spending your time on hiring activities (job posts, resume screening, phone screens, in-person interviews, job offers, great employee onboarding, etc.) – none of these <em>directly</em> matter to your business! What matters first is finding product-market fit with a product that people love. Customers paying you money.</p>



<p>At Close, we got to company profitability making a few million dollars in annual recurring revenue, all with a 3 person Product/Engineering team (with total company size of 6). Take advantage of your small team size as long as you can!</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">At Close.io we got to a few million in ARR with a product/eng team of three. <a href="https://t.co/OtCd0TjH70">https://t.co/OtCd0TjH70</a></p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/892938578711519233?ref_src=twsrc%5Etfw">August 3, 2017</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<h2>Don&#8217;t hire too late (rule #2)</h2>



<p><strong>Because it takes forever.</strong> Remember how I said hiring is a really hard, slow, painful process? This means that if you wait too long to start hiring&#8230; by the time you really accomplish your hiring goals, it will take you even longer than you&#8217;d think to add more people to the team.</p>



<p><strong><em>Our mistake:</em></strong> At Close.io, we started hiring way too late. We were heads down focused exclusively on building and supporting our product for the first few years. By the time we finally decided to start hiring, we were already in a bad spot. We had too small of a team to support our product&#8217;s complexity and all of our customers. We slowed down on our pace of product development. We just didn&#8217;t have the team size that the business size and opportunity size justified.</p>



<p>To make matters worse, once we started recruiting/hiring, we didn&#8217;t really try hard enough at first. We failed at it for too long because we didn&#8217;t <em>really</em> make it a true priority even after we started.</p>



<h2>So, when?</h2>



<p>I can’t tell you exactly when to hire, but…</p>



<p><b>Wait until you know you <i>really</i> need to</b></p>



<ul><li>When your current processes are breaking</li><li>When you know you can’t accomplish your goals without more people</li></ul>



<p><b>But then don’t wait any longer</b></p>



<ul><li>Once it’s time, make it a #1 priority</li><li>You must really commit to hiring.</li></ul>



<p>When we finally did really put in a full effort to grow our engineering team, it started taking 50%+ of my time for many months. You can&#8217;t half do it and expect results.</p>



<h1>Who to hire</h1>



<p>Just one simple rule here:&nbsp;<strong>Aim high. Don’t settle.</strong></p>



<h2>Aim high</h2>



<p>In your early engineers, you should look for:</p>



<p><strong>Senior people.</strong> Junior people can be a huge asset longterm but will take years to get there, you probably don’t have time for that.</p>



<p><strong>Leadership potential.</strong> You need people you don’t need to “manage”.&nbsp;Your first few engineers should be people who you think you can trust leading major projects and taking on large amounts of responsibilities. They should be people you can envision leading future teams.</p>



<p><strong>They should “wow” you&nbsp;</strong>somewhere along the way. Can you learn from this person?</p>



<h2>Don’t settle</h2>



<p><strong>The temptation is strong.</strong>&nbsp;It happens every time… <strong>somewhere after about a dozen mediocre interviews you might start thinking you just want anybody decent</strong>. Resist! DON’T SETTLE. The management and culture hit will slow you down worse than not getting the help you need for a while. There are really great candidates out there – persevere to find them.</p>



<p><strong>Maybes = No’s</strong>. If you&#8217;re not sold &amp; excited about a candidate, there&#8217;s probably a good reason for it. Trust your gut. You should be excited about candidates to move forward. If you think of them as a &#8220;maybe&#8221;, that&#8217;s a great sign you should reject them.</p>



<p><strong>Hiring the wrong people = VERY BAD.</strong> Hiring the wrong person can really hurt you in a way that’s hard to recover from. The wrong hire can quickly poison your culture, frustrate your top performers, and set you down the wrong path.</p>



<h2>More about &#8220;who&#8221;</h2>



<h3>First few hires&#8230;</h3>



<p><strong>First hires are the hardest roles to fill.</strong></p>



<p>It&#8217;s&nbsp;hard to attract the very first few people.&nbsp;Early stage startups barely look like a real job to people.&nbsp;Most people don’t “get it” until there are already other people in the role.</p>



<p><em>Story:&nbsp;</em>I&#8217;ve literally had a fresh out of college job candidate reject our offer (that he was excited about) because his mother didn&#8217;t think it was a &#8220;real job&#8221;.</p>



<p>Most people also aren’t really a good fit for a really early stage startup. Tiny startups just aren&#8217;t for everyone. Most people need more structure and a more narrow job description than is typical for a very early startup employee.</p>



<p><strong>First hires are the&nbsp;most important.</strong></p>



<p>They’ll impact the caliber of your future hires. Your first engineers will help hire and attract the next engineers.</p>



<p>They will (or should) become leaders. It&#8217;s likely a bad sign for your first few hires if you cannot picture that person leading a project or team one day. Early in startups, you want people who can learn and grow quickly as your startup grows.</p>



<h3>Find your bottlenecks</h3>



<p>Different stages of your company require different types of people.</p>



<p>The first few engineers on our team were &#8220;Full Stack&#8221;. As a tiny team we needed engineers who could go both deep and wide. We were able to go deep in specific areas as needed, but&nbsp;also comfortable working across various parts of the tech stack.</p>



<p>Hiring generalists worked well when the engineering team was very small, but as we grew it was time to start specializing. That doesn&#8217;t mean restricting people to one part of the tech stack, but rather it meant finding our software development bottlenecks and really focusing on finding some great people in the specific areas we were weakest in.</p>



<p>At Close.io, our first specific bottleneck was on the infrastructure side. We had grown with so many customers, so much data, and a larger codebase to support that our engineering team was really slowing down trying to work on both the infrastructure&nbsp;<em>and&nbsp;</em>the product itself. We eventually hired a couple really great&nbsp;DevOps/Infrastructure Engineers, and that dramatically helped.</p>



<p>Next our bottleneck was Frontend Development (couldn&#8217;t keep up with Backend), then Design (we finally had frontend bandwidth to implement design work), then Backend, and most recently a Product Manager (for the first time it felt like customer problem discovery/definition was bottlenecking engineering effectiveness).</p>



<p>What&#8217;s your biggest team bottleneck for building a better product? Focus your hiring there!</p>



<h3>Mistake: Focusing only on technical qualifications</h3>



<p>A mistake that I&#8217;ve made a couple times is focusing almost entirely on a candidate&#8217;s technical capabilities. It&#8217;s so hard to find programmers that&nbsp;<a href="https://blog.codinghorror.com/why-cant-programmers-program/" target="_blank" rel="noopener noreferrer"><em>actually&nbsp;</em>know how to program</a>, that when you find someone who passes your technical quality bar, the temptation is to assume they would be a great hire.</p>



<p>But in reality, it&#8217;s incredibly important to pay attention to their written and verbal communication skills, maturity, attitude, desired work/life balance, culture, how they will work with people, their work processes, and other &#8220;soft skills&#8221; that separates a senior professional from just somebody who is good at programming. Do they have experience working in companies your size? If you&#8217;re remote, have they ever worked remotely before? Ask yourself if you actually think you would&nbsp;<em>like&nbsp;</em>working with this person. Finally, always trust your gut.</p>



<p>If you aren&#8217;t careful about qualifying candidates as an&nbsp;<em>entire person&nbsp;</em>and not just based on their technical skills, you risk ruining your culture, building a team that is difficult to manage, doesn&#8217;t work well together, and who you can&#8217;t trust with important projects that aren&#8217;t 100% about the code.</p>



<h1>How to hire</h1>



<p>The 6 steps for hiring are pretty obvious, so I&#8217;m going to just provide a few specific tips or hard lessons learned for each one.</p>



<ol><li>Prep work</li><li>Sourcing</li><li>Screening</li><li>Interviews</li><li>Offer</li><li>Onboarding (&amp; beyond)</li></ol>



<h2>How to stand out</h2>



<p>Before we get into each step of how to hire, let me first say a couple words about standing out from other companies. Every other tech company is doing these same exact steps. Great candidates have hundreds of great jobs to consider. So it&#8217;s important to figure out how to make your company and role&nbsp;<em>stand out&nbsp;</em>among the rest.</p>



<p>Stand out by making the whole process fun and respectful, and play to your strengths.</p>



<h3>Be respectful</h3>



<p>The best way to stand out is to just treat all your candidates with respect.</p>



<p><strong>Get back to people quickly. </strong>People really appreciate if you always get back to them within a few days. Most companies don’t. Setup email templates to make this easy.</p>



<p><strong>Declined candidates should still walk away impressed. </strong>Your&nbsp;goal should be to make everyone who interacts with your company to be impressed by you and want to tell their friends, even if they are a horrible fit themselves.<strong><br></strong></p>



<h3>Make it fun</h3>



<p>Try to find a way to make the application and interview process fun for candidates. This could look different at different companies, but a couple quick ideas&#8230;</p>



<p><strong>Make your interview questions connected in some way</strong> so the candidate feels like they are making progress, rather than just being asked a series of unrelated technical questions.</p>



<p>Examples: For one position at Close.io we have a 1 hour interview where we ask 12 connected questions that lead a candidate through architecting a real-world standalone web service. For another position, we have an application question that is related to&nbsp;the take-home challenge they&#8217;ll do in round 2, and our final interview is based on their work done in the take-home challenge.</p>



<p><strong>Help them learn about your company along the way.&nbsp;</strong>The more you can share about your own company and the type of real-world challenges you experience, the more a candidate will understand if the role is a good fit for them (and hopefully be excited).</p>



<p>Example: All our job applications require a candidate to send a POST with a specific JSON payload to an endpoint. The response payload returns not only the &#8220;answer&#8221; they need to apply, but also returns the URLs to a few engineering blog posts and open source projects of ours so they can learn more about us and our work.</p>



<h3>Play to your strengths</h3>



<p>There is something unique and attractive about your company or the specific role you&#8217;re hiring for. Something that can help you stand out as more interesting than the countless other jobs out there.</p>



<p>Here are some examples of possible strengths:</p>



<ul><li>Unique tech stack (niche programming language, big data, using cutting edge frameworks, etc.)</li><li>New technology area (e.g. virtual reality, cryptocurrency, AI)</li><li>High salary, significant equity, or unusually strong benefits, etc.</li><li>Building a new product from scratch</li><li>Employee #1 who will work closely with founders and wear many hats</li><li>Ability to work remotely or set own hours</li></ul>



<p>Whatever it is for you&#8230; make sure you focus on sharing that. Advertise it clearly in your job description, mention it in your interviews, repeat it when you make a job offer, etc. Play to your strengths.</p>



<p>For us at Close.io, we have several advantages over most companies: remote (work from anywhere, no set hours), good tech stack, and profitable. Sometimes we try to even fit these advantages into the job titles – e.g. we have advertised job posts with titles like &#8220;JavaScript/React Frontend Engineer @ a *profitable* fast-growing startup&#8221; which stands out among a sea of plain &#8220;Software Engineer&#8221; posts.</p>



<div class="wp-block-image wp-image-799"><figure class="alignright"><img loading="lazy" width="372" height="810" src="/wp-content/uploads/2018/07/Screenshot-2018-06-07-00.30.32.png" alt="" class="wp-image-799"/><figcaption>Outline of Hiring Plan for one position</figcaption></figure></div>



<h2>Prep Work</h2>



<h3>Plan your process</h3>



<p><strong>Who are you really looking for? </strong>Make sure both you and the rest of your team have clear alignment on exactly what type of person you&#8217;re looking for.</p>



<p><strong>Plan the entire hiring process upfront.</strong> Once interviews start it will be much harder if you’re winging it.</p>



<p>For the last position that I hired for, before talking to a single candidate or even posting a job advertisement, I first wrote a document with the outline shown here (to the right) and made sure the rest of the team was on board with not only&nbsp;<em>who&nbsp;</em>we were looking for, but&nbsp;<em>why now&nbsp;</em>and&nbsp;<em>how&nbsp;</em>we would evaluate that person.</p>



<h3>Write the job description</h3>



<p>Take your time writing an excellent job post.&nbsp;It&#8217;s a mistake to just list out a bunch of requirements. Instead, be sure to:</p>



<p><strong>Sell your company &amp; the role.&nbsp;</strong>Remember that great candidates have lots of options – let them know why they should want to join your company.</p>



<p><strong>Be specific about what they’ll do.&nbsp;</strong>People don&#8217;t just want to know they&#8217;ll be writing Python backend code, they&#8217;ll want to know specifically what types of projects they will be doing and what their impact will be.</p>



<p><strong>Get feedback from people who are good at that role.&nbsp;</strong>After writing your job post, send it around to people who you think are excellent at that role and ask for feedback before promoting it. This is especially important when hiring for a role that you yourself wouldn&#8217;t be qualified to fill.</p>



<h2>Sourcing</h2>



<p>Where do you find candidates? 7 main places&#8230;</p>



<p><strong>Outbound vs Inbound.</strong> You need to do both. But you have to treat outbound differently (more casual &amp; more selling) in early stages of the process.</p>



<p><strong>Your Network.&nbsp;</strong>Your direct and 2nd degree network is already full of great people.</p>



<ul><li>Directly reach out to people you think are great –&nbsp;<em>even/especially&nbsp;</em>if you think they are happy in their current situation. Often they are more ready for a change than you may think. And worst case, they might be able to recommend somebody else great for the role.</li><li>Get everyone in your company to do the same. When you hire someone new, one of the first things you should ask them is who else they know that might be a good fit for your open roles.</li><li>Use social media. Not as a replacement for reaching out to people directly, but in addition.</li></ul>



<p>A good example of how effective networking hiring can be is how we found our recent Product Manager hire, <a href="https://twitter.com/heliostatic" target="_blank" rel="noopener noreferrer">Ben</a>. I posted the tweet below, and Ben was one of the&nbsp;people&nbsp;who &#8220;liked&#8221; the tweet. I didn&#8217;t directly know Ben, but&nbsp;he had &#8220;Product @ [startup]&#8221; in his Twitter Bio and had previously cofounded a company with a former colleague of mine. Since he liked my post, I sent him a Direct Message asking him if he knew anyone who might be good for our PM role. Soon enough we setup a call to discuss the role for himself! Not long after, Ben became our first PM and has been doing great.</p>



<p>The most important part: Ben said that if I hadn&#8217;t sent him that message, he probably would have never applied!</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">Hiring for our profitable💰 all-remote 🌎 team at <a href="https://twitter.com/closeio?ref_src=twsrc%5Etfw">@Closeio</a>:<br><br>🚀 Product Manager – be the first PM on a SaaS product used by thousands of salespeople<a href="https://t.co/WQwbIuibly">https://t.co/WQwbIuibly</a><br><br>🚀Director of Marketing – lead our team doing content, product marketing, &amp; more!<a href="https://t.co/9MCSaUL2Hz">https://t.co/9MCSaUL2Hz</a></p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/971115075032567808?ref_src=twsrc%5Etfw">March 6, 2018</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p><strong>Job Boards.</strong>&nbsp;This is the&nbsp;<em>easiest&nbsp;</em>way to find candidates, since you basically just pay ~$300 and you get your ad in front of a lot of people who are looking for a job. The trick is to post on the&nbsp;<em>most relevant&nbsp;</em>job boards for your specific role as possible. I suggest avoiding the very big name sites like Monster, and instead focusing on specific&nbsp;niche sites that have the most overlap with your ideal candidate as possible.</p>



<p>For example, since our roles are remote, we post on remote-focused job boards like&nbsp;<a href="http://WeWorkRemotely.com" target="_blank" rel="noopener noreferrer">WeWorkRemotely.com</a>, <a href="http://RemoteOK.io" target="_blank" rel="noopener noreferrer">RemoteOK.io</a>, and <a href="http://Remotive.io" target="_blank" rel="noopener noreferrer">Remotive.io</a>. For Frontend Development roles, we post on sites like <a href="https://codepen.io/jobs/" target="_blank" rel="noopener noreferrer">Codepen</a>. For Designers, <a href="https://dribbble.com/jobs" target="_blank" rel="noopener noreferrer">Dribbble</a>. You get the idea – the more targeted, the better.</p>



<p><strong>Targeted Communities.&nbsp;</strong>Similar to job boards, there are online (and even offline) communities where your target audience hangs out that often you can informally share a job post with. This includes Slack groups, tech newsletters, MeetUps, etc. Often the organizer of these communities are happy to share highly targeted job opportunities with their members.</p>



<p>When looking for targeted communities, consider: industry-specific, location-specific, or technology-specific.</p>



<p><strong>Matching Sites. </strong>There are some sites that serve as middle ground&nbsp;between inbound &amp; outbound recruiting. Sites like <a href="http://hired.com" target="_blank" rel="noopener noreferrer">Hired</a>, <a href="https://angel.co/recruiting" target="_blank" rel="noopener noreferrer">AngelList</a>, <a href="https://alist.co/" target="_blank" rel="noopener noreferrer">AList</a>, or <a href="https://triplebyte.com/" target="_blank" rel="noopener noreferrer">TripleByte</a> serve as a place to find profiles of developers who are job seeking (and sometimes pre-screened) where you can browse for developers who look like a really good fit for you and reach out.</p>



<p><strong>Targeted Outbound</strong>. Good old-fashioned cold emails to people who look like they would be the perfect fit for your role based on their exact experience. This is a lot of work but can be more effective than you may think.</p>



<p>Tip: If you have open source projects that strangers have made helpful contributions to, reach out to them! If not, then reach out to contributors for open source projects for the libraries that you use.</p>



<p><strong>Recruiters.&nbsp;</strong>If you go this route, just be very careful about how they are representing your company.</p>



<div class="wp-block-image wp-image-805"><figure class="alignright"><img loading="lazy" width="622" height="1576" src="/wp-content/uploads/2018/07/Screenshot-2018-06-03-23.55.46.png" alt="" class="wp-image-805"/><figcaption>Example of relentless followup yielding fruit</figcaption></figure></div>



<h3>Relentless follow-up</h3>



<p>When you find someone you really want to work with&#8230; <strong>never stop following up</strong>. Recruiting is like sales.</p>



<p>The screenshot to the right shows an example of how I followed up with Casey, a developer that I had met a couple years prior and was really impressed with. You can see how every few months for ~19 months I kept checking in with him. At the bottom, you can see it eventually paid off. Casey is now a really key person on our engineering team.</p>



<p>For two <em>more</em> great examples of this, check out <a href="http://blog.close.io/startup-hiring-follow-up" target="_blank" rel="noopener noreferrer">Steli&#8217;s blog post on how he recruited me for <em>3&nbsp;years</em> before I finally joined him</a>.</p>



<blockquote class="wp-block-quote"><p>If there’s a single lesson here, it’s this: When you find amazing people,&nbsp;<strong>follow up and follow through with them&nbsp;</strong><strong><em>forever.</em></strong></p></blockquote>



<h2>Screening</h2>



<p><strong>Use an Applicant Tracking System</strong>. A dedicated ATS like&nbsp;<a href="https://breezy.hr/" target="_blank" rel="noopener noreferrer">Breezy.hr</a>, <a href="https://www.workable.com/" target="_blank" rel="noopener noreferrer">Workable.com</a>, or&nbsp;<a href="https://www.lever.co/" target="_blank" rel="noopener noreferrer">Lever.co</a>&nbsp;will make collecting, screening, and tracking a large number of resumes/applicants much more efficiently than just using your inbox/Trello/spreadsheet.</p>



<p><strong>Customize your application form.&nbsp;</strong>When advertising jobs online (<em>especially</em> if you&#8217;re open to remote candidates), one of the toughest parts is actually having&nbsp;<em>too many </em>applicants, where many of them are low quality. A good solution to this is to customize your job application form to make it fun for the&nbsp;right kind of person and turn away people who just want to blindly apply to as many jobs as possible.</p>



<p>The form should, of course, give them a chance to share their <strong>resume/experience</strong>, which&nbsp;you&#8217;ll pay close attention to when screening.</p>



<p>But a good application form will also include&nbsp;<strong>technical screener questions&nbsp;</strong>which should only take a few minutes for someone good to solve, but will quickly weed out those who aren&#8217;t qualified. We&#8217;ve done this and have actually gotten great feedback about it. People love little technical challenges in application since it makes it less boring to apply.</p>



<p>Finally, include questions to help you evaluate their&nbsp;<strong>written&nbsp;communication</strong>,&nbsp;which is often under-appreciated in engineering hiring.</p>



<p>Having thoughtful questions on your application form will give you way more data when screening candidates.</p>



<div class="wp-block-image wp-image-820"><figure class="aligncenter"><img loading="lazy" width="1108" height="1322" src="/wp-content/uploads/2018/07/Screenshot-2018-06-04-00.04.30.png" alt="" class="wp-image-820"/><figcaption>Customized application form with screener questions</figcaption></figure></div>



<h2>Interviews</h2>



<p>Example flow:</p>



<ul><li><strong>Phone Screen</strong> (30-60m) – Intro, quick technical screener questions, hear about their experience and determine whether they seem overall impressive.
<ul>
<li>Get good at phone screens – this is where most of your recruiting time will be spent.</li>
<li>Have good technical screener questions that get you to a &#8220;No&#8221; as quickly as possible if someone isn’t great. For me I like to ask something one level&nbsp;deeper than frameworks might take care of for you, e.g. asking about SQL escaping/injection (for people used to ORMs), or direct DOM manipulation (for people used to React).</li>
<li>Use <a href="https://coderpad.io/" target="_blank" rel="noopener noreferrer">coderpad.io</a> for quick “can they actually code” live coding exercises of something simple.</li>
</ul>
</li><li><strong>Technical Interview 1</strong> (60m) –&nbsp;In depth technical/architectural questions</li><li><strong>Take-home project</strong> (2-3h) –&nbsp;Let’s see them actually build something (2-3 hrs). It&#8217;s important to timebox these for candidates so they don&#8217;t feel taken advantage of. Some companies actually pay. If you aren&#8217;t paying them, then don&#8217;t give a real problem that could be misinterpreted as trying to get free work from them.</li><li><strong>Technical Interview 2</strong> (60m) –&nbsp;Drill in on missing technical areas, evaluate softer skills, overall seniority, etc.</li></ul>



<p>Things to keep in mind during interviews:</p>



<p>The <strong>best interviews should feel like a dialog</strong> rather than just you asking a bunch of technical questions in a row. For example: Let them tell you about their experience, and ask questions along the way to go deeper.</p>



<p><strong>Remember to sell.&nbsp;</strong>Use&nbsp;every interview as a chance to share what you think is great about your company and this role, since great candidates can have many opportunities to choose from.</p>



<p><strong>Let them ask good questions</strong>.&nbsp;They should have good ones and be engaged. No questions is a bad sign.</p>



<p><strong>Gut check / do you like them?&nbsp;</strong>If something doesn&#8217;t feel right during an intro call (when everyone is trying to put their best foot forward) that&#8217;s usually a sign of a bad fit.</p>



<p><strong>Have all interviewers leave detailed notes &amp; a summary/conclusion.&nbsp;</strong>It&#8217;s best if each interviewer independently writes their thoughts immediately following interviews to avoid groupthink. Press interviewers to summarize with a simple rating scale. For example we use language like &#8220;strong like&#8221; or &#8220;weak dislike&#8221;. This allows you to review everyone&#8217;s feedback afterwards and reject anyone where most interviewers are only ambivalent toward a candidate.</p>



<h2>Offer</h2>



<p>So you found someone you like? Great! Now comes the pivotal offer stage.</p>



<p><strong>Always check references</strong><strong>. </strong>Before you make the offer, reference checks are key to validate that someone is as good as you think they are, and not just good at interviewing. Great people with a decade or more of experience should&nbsp;<em>easily&nbsp;</em>be able to come up with a long list of names of current or past coworkers that would happily vouch for them.</p>



<p>Cautionary tale 1: Early in Close.io&#8217;s history we made a hire that turned out to be really, really terrible. In hindsight, I&#8217;m sure we would have avoided this hire if we had done thorough reference checks. Sadly, we also saw him go on to get hired (and also eventually fired) by another startup we respected. Had they talked to us first, they could have also avoided wasting time.</p>



<p>Cautionary tale 2: We were once trying to move quickly with a candidate, so we made an offer first but contingent upon reference checks. It turns out that once we did references, we detected that there was a significant error on his resume about the duration of time he spent in the role that was most relevant to us.</p>



<p><strong>Make the offer &amp; close it</strong>. Remember to focus the offer not only on the salary &amp; benefits, but especially on selling the opportunity, quality of the team, and their ability for learning/growth.</p>



<p><strong>Trial periods.&nbsp;</strong>If you have the opportunity to do a contract / trial period with someone before jumping to a full-time offer, that can be a really great lower risk way to see if they are truly a good fit (and if you are a good fit for them). Not all candidates can risk leaving a good job for a 1 month contract, but when possible, this can be a very useful tool.</p>



<h3>Mistake: Assuming that accepted offer = position filled</h3>



<p>It&#8217;s a rookie mistake to assume that just because a candidate accepts your job offer, that you&#8217;ve actually finished your job hiring.</p>



<p><strong>Recruiting doesn’t stop at signed offer.&nbsp;</strong>Believe it or not,&nbsp;I&#8217;ve had more than one example where a candidate accepts an offer (including signing paperwork) and then changes their mind before their start date. I&#8217;ve heard reasons like &#8220;I got more excited by a different company&#8221;, &#8220;my current employer made a counteroffer too good to refuse&#8221;, and &#8220;my spouse ended up not being okay with the retreat travel requirements&#8221;. Don&#8217;t get mad, just move on.</p>



<p><strong>You’ll have to make more offers than you think.&nbsp;</strong>Between some offers being declined, and some candidates dropping out before their start date, you will end up needing to make more offers than positions you&#8217;re trying to fill. While you definitely shouldn&#8217;t make more offers than roles you&#8217;re prepared to hire for, I do recommend that you continue talking to candidates even after you&#8217;ve made an offer, until you have somebody on board doing a great job.</p>



<p><strong>Sell to start date.&nbsp;</strong>Keep candidates engaged from offer to start date by&nbsp;checking in along the way and continuing to sell. Specifically, we make sure that in the days/weeks between offer and start date that we send candidates at least a couple emails with links to blog posts we wrote, links to 5 star reviews of our product left by customers, a keynote video from our CEO, etc.</p>



<h2>Onboarding &amp; Beyond</h2>



<h3>Mistake: Assuming that your hires will work out</h3>



<p>For the candidates that do make it to their start date, unfortunately many will still not work out – probably a higher percentage than you may think. Either you or they will determine the role isn&#8217;t right for them.</p>



<p><span style="font-weight: 400;">Your work doesn’t stop at their start date – focus on post-hire success.&nbsp;The first 1-2 months of onboarding is critical!</span></p>



<p><strong>Don’t assume new hires are happy.</strong>&nbsp;Be checking in with new hires frequently. Ask questions like&nbsp;“We’re a couple weeks in and you’ve gotten a better sense for us now — what’s different than what you expected, good and bad?” New hires just may realize the job isn&#8217;t for them. For example, we&#8217;ve had someone tell us &#8220;I learned more in the past 3 months than the 3 years before that – but the pace is not for me&#8221;. Do what you can to make people happy, but then move on if it&#8217;s the wrong fit.</p>



<p><strong>Learn from each bad hire.</strong> Your goal from each bad hire is to learn how you can improve your hiring process to avoid similar mistakes in the future.</p>



<p><strong>Make sure you’re still excited after 30 days (or fire fast)</strong>. Realistically, you&#8217;ll never get a perfect sense of someone from a few hours of interviews. So after you&#8217;ve had some time actually working with someone, if you&#8217;re not still excited about them being on the team, fire fast so you both can move on.</p>



<p><strong>Hire more people than you think you need.</strong>&nbsp;Realizing that many hires don&#8217;t work out, you should plan to hire more people than you actually need in order to end up with the people you really need. Of course, you need to be able to afford everyone that you hire. But where you have room to hire an extra person (e.g. hiring 3 instead of 2 people for a role), doing so&nbsp;will increase your odds of success. <strong>It&#8217;s&nbsp;much easier to hire in parallel than serial for the same position</strong>, so it&#8217;s also more efficient to over-hire upfront than to keep restarting your hiring process after a hire doesn&#8217;t work out.</p>



<h3>Onboarding tips</h3>



<ul><li><strong>Have a well thought out onboarding plan.&nbsp;</strong>I create a Dropbox Paper doc with a long list of checkboxes with a combination of things that they should do (project work) and learn (reading, talking to specific people, etc.) broken down by day and week for the first month.</li><li><strong>Ship on day 1.&nbsp;</strong>Get new engineers to ship something (even if super tiny) on their first day if at all possible. Definitely within the first week.</li><li><strong>Start with small quick wins but rapidly give them increasingly difficult projects.&nbsp;</strong>Get them in the habit of moving fast and shipping, quickly working toward giving them big amounts of responsibility.</li><li><strong>Spend a lot of time with them.&nbsp;</strong>Check in multiple times per week.&nbsp;If hiring remotely, try to find a way to start out in-person if possible.</li></ul>



<h3>Managing/running a growing team</h3>



<p>Eventually all your hard work hiring will pay off and you&#8217;ll start to have a larger team. Now what? Leading a growing team is where things get fun. This topic really deserves its own blog post, but here are a few quick principles that have helped our team scale&#8230;</p>



<p><strong>Hand over responsibilities. </strong>The sooner you trust your team with big problems and&nbsp;stop trying to control everything yourself, the better.</p>



<p><strong>Have frequent 1:1s.</strong>&nbsp;Give the people you manage a meeting every week or two that is primarily their time. Discuss challenges and how they are feeling about work. Ask questions and listen. Tip: I like to keep an Apple Note per person on my team and when I think about something to discuss with them (a question or positive or negative feedback) throughout the week I&#8217;ll jot it there, and then use that Note before/after the 1:1 to take notes.</p>



<p><strong>Build camaraderie.&nbsp;</strong>Especially with a remote team, it&#8217;s important that everyone feels connected and like they are a part of building something great together. Here are a few things that have helped us accomplish that:</p>



<ul><li><strong>Retreats.</strong> 2-3 times per year we get everyone physically together in one place for about a week (different places around the world). This is where the most important team bonding, vision setting for the year, etc. occurs.</li><li><strong>Retrospectives. </strong>We try to (but need to do them more often!) have open discussions after projects wrap up where we discuss how it went, what we learned, what we did well, and what we&#8217;d like to do better as a team next time. The goal is to have a culture of continually seeking growth and improvement through healthy/safe discussions.</li><li><strong>Show &amp; Tells.&nbsp;</strong>When you&#8217;re tiny, everyone knows what everyone else is working on. After you grow beyond a few people that&#8217;s no longer possible, so having a regular time where people are encouraged to share details of what they&#8217;ve been learning/coding/designing/launched/etc. is a fun way to keep people on the same page and decrease <a href="https://en.wikipedia.org/wiki/Bus_factor" target="_blank" rel="noopener noreferrer">bus factor</a>.</li><li><strong>Highs &amp; Lows.&nbsp;</strong>Recently we&#8217;ve introduced a time where each person on the team very quickly (~30s/person) shares their High (best part) and Low (worst part) of their past week – related to either their work or personal life. Especially for our remote team, this has been great for hearing about wins and getting a better sense of what everyone is struggling with.</li></ul>



<p><strong>Add structure as the team grows.&nbsp;</strong>Setup&nbsp;Project Leads, Tech Leads, Engineering Managers, etc. so that you can give people on your team more responsibility and ensure you don&#8217;t bottleneck too many things.</p>



<h2>Remote hiring</h2>



<p>Being a distributed / all-remote team has been a huge asset for us both in terms of recruiting as well as retention.</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">That special and kind of sad moment in a growing, <a href="https://twitter.com/hashtag/remote?src=hash&amp;ref_src=twsrc%5Etfw">#remote</a>, company&#39;s life when everyone doesn&#39;t even fit on a single screen in <a href="https://twitter.com/zoom_us?ref_src=twsrc%5Etfw">@zoom_us</a> anymore. <a href="https://twitter.com/closeio?ref_src=twsrc%5Etfw">@Closeio</a> <a href="https://t.co/Wb54y8gSIs">pic.twitter.com/Wb54y8gSIs</a></p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/948605461292552194?ref_src=twsrc%5Etfw">January 3, 2018</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p><strong>Really great people are everywhere.&nbsp;</strong>We&#8217;ve found amazing candidates from countries all around the world.&nbsp;The Close.io Product/Engineering team is 14 people – all remote – working from 6 different countries.</p>



<p><strong>Way more candidates.&nbsp;</strong>We pretty quickly get hundreds of candidates for every remote position we advertise. There are just&nbsp;<em>a lot&nbsp;</em>of people in the world who want to work remotely. (This is a blessing and a curse, see the &#8220;Screening&#8221; section.)</p>



<p><strong>You can really stand out as a top company.&nbsp;</strong>It was very hard to stand out in Silicon Valley among all the other tech startups hiring. But among remote-friendly companies we were easily able to stand out as a very attractive option for candidates.</p>



<p><strong>Cheaper.&nbsp;</strong>SFBay area engineering salaries, housing, cost of living, and office space are all insanely expensive. Go remote and hire more great people!</p>



<p><strong>Retain employees longer</strong>.&nbsp;People stick around longer, since they can live where they want, move around as needed, and don&#8217;t have to deal with commutes or distraction-prone offices. At Close.io, once we went remote, me and 3 other people on our team moved out of California when family or other needs arose. Our jobs stayed the same even as our locations changed drastically.</p>



<p>For me, working from home has been wonderful as I became a father last year.</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">I’m only 2 months in <a href="https://twitter.com/hashtag/dadlife?src=hash&amp;ref_src=twsrc%5Etfw">#dadlife</a>, but my thoughts so far:<br>&#8211; working from home allows lunch &amp; 5m coffee breaks to be special moments I can see/play with him<br>&#8211; time with him first thing in the morning is special<br>&#8211; it gives you a reason to be more focused with the work time you have <a href="https://t.co/byGOya0RC5">https://t.co/byGOya0RC5</a></p>&mdash; Phil Freo (@philfreo) <a href="https://twitter.com/philfreo/status/953974177563840512?ref_src=twsrc%5Etfw">January 18, 2018</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<h1>Conclusion</h1>



<p>Building and growing an engineering team is hard&#8230; but it does get easier. And seeing your new team be able to accomplish more than you could ever before is a really great feeling.</p>



<p>Do you have your own tips for growing an engineering team? Questions or want to hear more?&nbsp;<a href="https://twitter.com/intent/tweet?text=@philfreo+" target="_blank" rel="noopener noreferrer">Tweet at me</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>My InsideSalesSummit interview: How sales and engineering teams should work together</title>
		<link>https://philfreo.com/blog/my-insidesalessummit-interview-how-sales-and-engineering-teams-should-work-together/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Thu, 16 Nov 2017 19:25:25 +0000</pubDate>
				<category><![CDATA[Close.io]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Startups]]></category>
		<guid isPermaLink="false">http://philfreo.com/blog/?p=742</guid>

					<description><![CDATA[I did an interview for the Close.io Inside Sales Summit, a free 5-day virtual summit with perspectives from 50+ leaders on inside sales. Ryan Robinson interviewed me for an engineer&#8217;s perspective on topics related to sales, including how sales teams and engineering teams can work best together. Watch the interview here: https://www.insidesalessummit.com/interviews/wednesday/phil-freo/ Overview: In this interview, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I did an interview for the <a href="https://www.insidesalessummit.com/">Close.io Inside Sales Summit</a>, a free 5-day virtual summit with perspectives from 50+ leaders on inside sales. Ryan Robinson interviewed me for an engineer&#8217;s perspective on topics related to sales, including how sales teams and engineering teams can work best together.</p>



<p><a href="https://www.insidesalessummit.com/interviews/wednesday/phil-freo/"><strong>Watch the interview here</strong></a>: <a href="https://www.insidesalessummit.com/interviews/wednesday/phil-freo/">https://www.insidesalessummit.com/interviews/wednesday/phil-freo/</a></p>



<span id="more-742"></span>



<p><strong>Overview:</strong></p>



<blockquote class="wp-block-quote"><p>In this interview, Phil digs into his personal experience to share what he believes are the best ways for sales and engineering teams to work together, including how to pitch (in-demand) feature requests to product and engineering and how reps should address feature requests from high-value prospects. Phil also explains why technical founders need to care about sales, and goes over common misconceptions about both engineers &amp; salespeople.</p><p><strong>Interview Length: </strong>19:14</p><p><strong>Topics Covered: </strong>The best ways for sales and engineering teams to work together, how to pitch (in-demand) feature requests to product and engineering, how to address feature requests from high-value prospects, why technical founders need to care about sales, and common misconceptions about engineers &amp; salespeople.</p></blockquote>



<div class="wp-block-image"><figure class="alignleft"><a href="https://www.insidesalessummit.com/interviews/wednesday/phil-freo/"><img loading="lazy" width="2136" height="2212" src="http://philfreo.com/blog/wp-content/uploads/2018/06/Screenshot-2017-11-28-19.34.005.png" alt="" class="wp-image-743"/></a></figure></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to log Feature Requests</title>
		<link>https://philfreo.com/blog/feature-requests/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Tue, 24 Oct 2017 22:53:44 +0000</pubDate>
				<category><![CDATA[Product]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Startups]]></category>
		<guid isPermaLink="false">http://philfreo.com/blog/?p=722</guid>

					<description><![CDATA[Below is an internal team post I wrote to help us at&#160;Close.io&#160;do a better job of capturing customer&#8217;s feature requests in a way that leads to&#160;better&#160;product development outcomes. I&#8217;m sharing this publicly because I believe this advice&#160;can help other startups and SaaS product companies as well. When a customer request for a new feature come [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><em>Below is an internal team post I wrote to help us at&nbsp;<a href="https://close.io/">Close.io</a>&nbsp;do a better job of capturing customer&#8217;s feature requests in a way that leads to&nbsp;better&nbsp;product development outcomes.</em></p>



<p><em>I&#8217;m sharing this publicly because I believe this advice&nbsp;can help other startups and SaaS product companies as well. </em></p>



<p>When a customer request for a new feature come in, it&#8217;s easy to not log&nbsp;it at all (&#8220;we&#8217;ve heard that one before&#8221;) or to log&nbsp;it in a suboptimal way. Here are a few details on how to&nbsp;<em>best&nbsp;</em>capture customer needs and why it matters.</p>



<h1>The typical, but unhelpful, way</h1>



<p>The most common way feature requests are logged is in a “light” format like this:</p>



<span id="more-722"></span>



<ul><li><em>“john@example.com wants feature FOO &#8211; [link to ticket]”</em></li></ul>



<p>While this does provide a list of people to notify if we ever do launch a feature that we happen to call “FOO”, it falls short in many other ways.</p>



<p>This is typically very unhelpful for Product Development or for getting a customer’s needs solved because:</p>



<ul><li>Many people have different ideas about what this feature specifically could be.</li><li>There are different ways a feature could work and this doesn’t give any insight into which way would be best.</li><li>Frequently there’s a different, better way that their underlying need (use case) could be met instead.</li></ul>



<p>Logging requests in this “light” format may seem at least like a good way to build a notification list, but in reality leads us to building and notifying people about something that turns out not to best solve their core problems.</p>



<p>Similarly, it may seem that this at least gives us a “votes” system to prioritize Product decisions, but in reality there isn’t enough detailed signal in the votes to design a feature we can be confident really helps most of them.</p>



<p>Caveat: Logging a feature request with “email address only” is <em>still</em> better than not logging any at all, because it at least does give us a list of people we can later contact for more information.</p>



<h1>The better way</h1>



<p>A feature request logging format that is 100 times more helpful is one that includes details of the <em>use case</em>. A use case should include:</p>



<ul><li>Who is the user and company, and what’s the user’s role within the company?</li><li>What situation is causing the user to want this feature? (When did the need start?)</li><li>In their own words, what do they mean by “feature FOO”?</li><li>How, specifically, would they use this feature?</li><li>Really, why do they want this feature? What is the specific use case?</li><li>What is the business value they’re hoping to achieve because of this feature?</li></ul>



<p><strong>It all really boils down to asking “<em>why?</em>” and then logging in as much detail as possible, <em>in the customer’s own words</em>, the specifics about what they are <em>actually </em>trying to accomplish.</strong></p>



<p>“In the customer’s own words” is really important because it’s easy for us to, in the moment, substitute our own current idea of a solution, when what’s important is logging their actual problem and goals. Having the customer’s own words helps us avoid bias.</p>



<h1>How this helps</h1>



<h2>Demand based Product Development</h2>



<p>Having concise but detailed use cases help direct us toward clarity when we try to validate whether a Product Proposal makes sense to move forward with. They help answer:</p>



<p><strong>&#8220;Is there really a pattern of consistent use cases that are important enough AND that our specific idea of solution would be a GREAT solution to?”</strong></p>



<p>When logging feature requests, it’s best to assume that, by default, no feature will get developed until there is a set of documented specific use cases with reasons/explanations on why it&#8217;s important to that customer and how they would use it.</p>



<p>From a Product Development perspective, it’s important that we pay most attention to the underlying need (demand) rather than customer’s ideas and requests for specific features (supply). (For more about this, there’s a great <a href="https://demandthinking.com/episodes/2017/7/23/episode-1-think-you-might-be-building-the-wrong-thing-youve-misinterpreted-demand">podcast</a> on the subject).</p>



<h2>Design Decisions</h2>



<p>Even in times where there’s clear demand in a problem area and many requests for a particular feature, another factor is at play where detailed feature requests with use cases help tremendously.</p>



<p><strong>Often, there are multiple <em>very</em> different ways a feature could work, but without understanding <em>exactly</em> what users are trying to achieve, it&#8217;s hard to know which way is better.</strong></p>



<p>Most features which seem clear and straightforward on the surface can go in different directions once you really dig into the nitty gritty UI/UX or technical design. Being able to go back to the core use cases (specific real-world things our customers are trying to do) it helps us quickly and confidently choose a direction.</p>



<h1>Who should do this</h1>



<p>The Product team takes ultimate responsibility for fleshing out customer use cases and validating solutions with customers.</p>



<p>Anyone who talks with customers, however (especially Support, Success, and Sales), is in a unique position to already have many interactions where feature requests and customer problems come up. It is immensely helpful and valuable for moving the product forward in the right ways if these interactions result in feature requests logged with use cases. We love having the entire company championing customer needs and giving input into Product direction. This is <em>the</em> best way to do that.</p>



<p>At Close.io, the best place to log feature requests with uses cases is in our &#8220;Feature Requests &amp; Customer Needs&#8221; Trello Board. If you’re ever inclined to write a Product Proposal, including a few curated use cases (in the customer’s own words) is useful to supporting the idea.</p>



<hr class="wp-block-separator"/>



<p><em>What do you think? <a href="https://twitter.com/intent/tweet?text=%40philfreo%20" target="_blank" rel="noopener noreferrer">Send me a tweet</a>&nbsp;about how your team captures customer feature requests.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Don&#8217;t punish old trials and former customers</title>
		<link>https://philfreo.com/blog/dont-punish-old-trials/</link>
					<comments>https://philfreo.com/blog/dont-punish-old-trials/#comments</comments>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Fri, 07 Aug 2015 23:55:47 +0000</pubDate>
				<category><![CDATA[Close.io]]></category>
		<category><![CDATA[Product]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Startups]]></category>
		<guid isPermaLink="false">http://philfreo.com/blog/?p=686</guid>

					<description><![CDATA[A common pattern in SaaS apps is to allow a free trial period of 2 weeks or 1 month, and then to require a credit card to use it any longer. Either out of curiosity or out of a genuine need for a tool that some SaaS service is offering, I will often sign up [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>A common pattern in SaaS apps is to allow a free trial period of 2 weeks or 1 month, and then to require a credit card to use it any longer.</p>



<p>Either out of curiosity or out of a genuine need for a tool that some SaaS service is offering, I will often sign up for a free trial soon after learning about it in order to check it out. For a variety of reasons by the time the free trial is up, I&#8217;m not ready to purchase.</p>



<p>It could be because I was just poking around. But more often it&#8217;s because I got too busy. Or my reason for signing up didn&#8217;t stay a high enough priority to be ready to purchase and fully implement some solution. Or maybe because the product just wasn&#8217;t far enough developed to satisfy what I was looking for.</p>



<p>What I find happening is that 3, 6, 12, or 18 months later I&#8217;ll find myself thinking about this tool. Perhaps the problem that led me to originally check out tools of the service has become more pressing than ever before. Or perhaps I&#8217;m fed up with another tool I chose, and am searching again for a better option. Or I&#8217;m hoping that the product has evolved more. Or whatever.</p>



<p>When logging back into your previously-created account, what you typically see is something like this:</p>



<span id="more-686"></span>



<p><strong>Your free trial expired. Please enter your credit card to continue.</strong></p>



<p>At this point, it&#8217;s far too easy to just close the tab. I&#8217;ve done it many times, even when I actually was in need (and willing to purchase) a tool in their category.</p>



<p>Savvy users will email the site&#8217;s sales or support team and can usually get a trial extended, but this often takes a few hours, which sucks. <em>When a user gives you enough attention to want to check out your product right now, you should always&nbsp;<strong>take advantage&nbsp;</strong>of that. It&#8217;s too easy for that attention to get lost if you make the user wait.</em></p>



<p>Similarly some users will just use another email address, which is really bad for understanding your marketing funnel and metrics, and is a bad user experience overall. Plus, this may mean losing whatever progress was made on the first trial.</p>



<p><em><b>Let&#8217;s stop punishing our older trials.</b></em></p>



<p>I always thought this was a bad user experience, but I knew we were guilty of doing the same thing at <a href="http://close.io/">Close.io</a>.&nbsp;Not anymore. Now if you login to a trial that has been expired for long enough (i.e. you haven&#8217;t checked out the product in a long time), we give you a single click to get started again.</p>



<figure class="wp-block-image"><a href="http://philfreo.com/blog/wp-content/uploads/2015/08/Screenshot-2015-08-04-14.50.22.png"><img loading="lazy" width="630" height="212" src="http://philfreo.com/blog/wp-content/uploads/2015/08/Screenshot-2015-08-04-14.50.22.png" alt="Screenshot 2015-08-04 14.50.22" class="wp-image-688" srcset="https://philfreo.com/wp-content/uploads/2015/08/Screenshot-2015-08-04-14.50.22.png 630w, https://philfreo.com/wp-content/uploads/2015/08/Screenshot-2015-08-04-14.50.22-300x100.png 300w" sizes="(max-width: 630px) 100vw, 630px" /></a></figure>



<p><span style="line-height: 1.5em;">The same applies for former customers. Once you&#8217;ve been around a while, it won&#8217;t be uncommon for an early adopter to have churned and then want to give you another shot a year later. We should welcome this!</span></p>



<p>It&#8217;s a super easy change to make and within minutes of pushing this change we already saw its effects pushed to our chat.</p>



<figure class="wp-block-image"><a href="http://philfreo.com/blog/wp-content/uploads/2015/08/Screenshot-2015-08-07-16.53.17.png"><img loading="lazy" width="1334" height="108" src="http://philfreo.com/blog/wp-content/uploads/2015/08/Screenshot-2015-08-07-16.53.17.png" alt="Screenshot 2015-08-07 16.53.17" class="wp-image-693" srcset="https://philfreo.com/wp-content/uploads/2015/08/Screenshot-2015-08-07-16.53.17.png 1334w, https://philfreo.com/wp-content/uploads/2015/08/Screenshot-2015-08-07-16.53.17-300x24.png 300w, https://philfreo.com/wp-content/uploads/2015/08/Screenshot-2015-08-07-16.53.17-1024x82.png 1024w" sizes="(max-width: 1334px) 100vw, 1334px" /></a></figure>



<p><span style="line-height: 1.5em;">Don&#8217;t treat old users worse than new trials!</span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://philfreo.com/blog/dont-punish-old-trials/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Why you should Archive your emails when you&#8217;re done with them</title>
		<link>https://philfreo.com/blog/archive-your-emails/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Tue, 23 Jun 2015 23:02:34 +0000</pubDate>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[archiving]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[inbox zero]]></category>
		<category><![CDATA[productivity]]></category>
		<guid isPermaLink="false">http://philfreo.com/blog/?p=677</guid>

					<description><![CDATA[There are two types of people in this world: People who archive incoming emails when they are finished with them, and try to achieve &#8220;inbox zero&#8221; People who leave all incoming email in their &#8220;inbox&#8221; forever but use &#8220;Mark as Unread&#8221; or Star/Flag message to indicate items still requiring action If you&#8217;re a Type #1 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>There are two types of people in this world:</p>
<ol>
<li>People who archive incoming emails when they are finished with them, and try to achieve &#8220;inbox zero&#8221;</li>
<li>People who leave all incoming email in their &#8220;inbox&#8221; forever but use &#8220;Mark as Unread&#8221; or Star/Flag message to indicate items still requiring action</li>
</ol>
<p>If you&#8217;re a Type #1 person, you can stop reading now.</p>
<p>If are a &#8220;never archive anything&#8221; type person, I&#8217;d like to make a case for why you should become an &#8220;inbox zero&#8221; type person and archive emails when you&#8217;re done with them.</p>
<p><span id="more-677"></span></p>
<p>You may be thinking, &#8220;who are you to tell me how to manage my email!?&#8221; It&#8217;s true, I have no right to that, and I understand that different people have different workflows. But I have heard all the reasons and still strongly believe all Type #2 people would be better off if they become Type #1 people.</p>
<p>I have made my case to several people over the last few years and all of them that have ever tried it have thanked me later. I believe there is really no downside to becoming a Type #2 person and only upside.</p>
<p>I know that not everybody is used to archiving their email, but I&#8217;d like to make a case to you that it&#8217;s not any more difficult and that if you give it a shot, it will really help your workflow. First, let me address the top 3 reasons people usually give for why they don&#8217;t archive currently:</p>
<p><strong>&#8220;Archiving is an unnecessary extra step&#8221;</strong></p>
<p><span style="line-height: 1.5em;">The thing is, it&#8217;s not really an extra step to archive an email once you&#8217;re done with it! From Gmail it&#8217;s a single keyboard shortcut or a single click of the Archive button. You&#8217;d have to click Back anyway so it&#8217;s 0 additional steps to archive a message instead.</span></p>
<p><strong>&#8220;I keep emails in my inbox so I can find them later easily&#8221;</strong></p>
<p><strong></strong><span style="line-height: 1.5em;">Emails are still searchable even when archived, and you can see all those messages in Gmail under All Mail. Archived mail is not lost, it can still be easily browsed and searched.</span></p>
<p><strong>&#8220;I treat &#8216;unread&#8217; or &#8216;starred&#8217; messages as my actionable items list, which is just as good as archiving&#8221;</strong></p>
<p><strong></strong><span style="line-height: 1.5em;"><em>Abusing</em> the &#8220;Unread&#8221; feature to keep emails around that you actually did read but just haven&#8217;t finished handling / responding to yet is unwise for two reasons. First, it prevents you from having a true list of <em>actually</em> unread emails. </span></p>
<p><span style="line-height: 1.5em;">Second, using Unread status or Stars/Flags to indicate actionable items means that your inbox is a mix of &#8220;emails I&#8217;m done with&#8221; and &#8220;really important emails I shouldn&#8217;t forget to handle or respond to&#8221;. Those items are interspersed. Sure, having items as bold (unread) or starred can make the important ones stand out, but what happens if you don&#8217;t remember to handle them before they end up on page 2? With an infinite inbox, it&#8217;s too easy to lose messages that you saw but didn&#8217;t handle yet.</span></p>
<p><span style="line-height: 1.5em;">Even if you always handle these items before they get too far back in your inbox, it means you&#8217;re doing lots of extra mental work by having to continually scan your inbox for items that need handling. You have to keep seeing the already handled items unnecessarily which means more things for your brain to process. Wouldn&#8217;t it be better if there was a single concise list of emails requiring further action?</span></p>
<p><strong>Why archiving is better&#8230;</strong></p>
<p>We&#8217;ve established that there&#8217;s really no downside to archiving all email once you&#8217;re done with it. Let&#8217;s talk about the upside.</p>
<p>When you archive messages you&#8217;re finished with, what you&#8217;re left with is an inbox that consists <em>only </em>of actionable items. No more continually re-scanning past dozens of emails that are no longer important, in search of the one you need to reply to. No more lying to your email client saying you haven&#8217;t read an email after you really have. No more losing important emails in the stream.</p>
<p>Archiving makes your inbox <em>the</em> list for all your emails requiring action, and nothing else.</p>
<p>I bet if you give it a shot, you&#8217;ll like it within a week.</p>
<p><strong>How to get started</strong></p>
<p>Start out by doing a bulk archive of everything in your inbox that you know has been handled. In Gmail there&#8217;s a Select All checkbox, then a second link appears at the top to <em>truly </em>select all. Then you can click Archive.</p>
<p><span style="line-height: 1.5em;">When a new email comes in, of course you first need to read it (or at least skim the subject/sender). If you decide you&#8217;ve read enough and it requires no action, then simply hit Archive! If you&#8217;re done your part and replied to a message, hit Archive! If the email represented a task and you finished the task, hit Archive! If it&#8217;s a newsletter and you finished reading it, hit Archive! (If it&#8217;s a newsletter or promotional email you never care to read, then Unsubscribe&#8230; and then Archive!)</span></p>
<p>Now, you can look at your inbox anytime to see and handle emails that still need more reading, responding, or action.</p>
<p>Let me know how it goes!</p>
<p>&#8211; Phil</p>
<p>P.S. The best products, in my opinion, encourage an opinionated workflow that promotes success. It&#8217;s from this workflow that we built <a href="http://blog.close.io/introducing-inbox" target="_blank">Inbox in Close.io</a>, which syncs your CRM and your email account for an Inbox of actionable sales-focused items.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>HackToStart Podcast</title>
		<link>https://philfreo.com/blog/hacktostart-podcast/</link>
		
		<dc:creator><![CDATA[Phil Freo]]></dc:creator>
		<pubDate>Tue, 23 Jun 2015 21:22:10 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Startups]]></category>
		<guid isPermaLink="false">http://philfreo.com/blog/?p=674</guid>

					<description><![CDATA[I got interviewed for my first podcast recently. It&#8217;s called HackToStart, and it&#8217;s one that I&#8217;ve been listening to for a while now, so I was excited to be a guest on the show. Check it out here: Hack To Start &#124; Phil Freo, Full Stack Developer, Close.io In the show we also discuss one [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I got interviewed for my first podcast recently. It&#8217;s called HackToStart, and it&#8217;s one that I&#8217;ve been listening to for a while now, so I was excited to be a guest on the show. Check it out here:</p>
<p><a style="line-height: 1.5em;" href="https://www.stitcher.com/show/hack-to-start/episode/hack-to-start-episode-49-phil-freo-full-stack-developer-close-io-39389106">Hack To Start | Phil Freo, Full Stack Developer, Close.io</a></p>
<p>In the show we also discuss one of my latest blog posts: <a style="line-height: 1.5em;" href="http://philfreo.com/blog/the-last-20-before-shipping/">The last 20% before shipping</a>.</p>


<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
