<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Deployment previews for UI/UX teams · FeaturePeek]]></title><description><![CDATA[FeaturePeek is a collaboration tool for UI/UX development teams that creates on-demand deployment previews for every frontend pull request.]]></description><link>https://featurepeek.com</link><generator>GatsbyJS</generator><lastBuildDate>Wed, 19 May 2021 16:04:58 GMT</lastBuildDate><item><title><![CDATA[FeaturePeek has joined Netlify!]]></title><description><![CDATA[When we founded FeaturePeek in 2019, we wanted to create a way for developers get timely feedback from reviewers, a problem we often…]]></description><link>https://featurepeek.com/featurepeek-has-joined-netlify/</link><guid isPermaLink="false">https://featurepeek.com/featurepeek-has-joined-netlify/</guid><pubDate>Wed, 19 May 2021 09:00:03 GMT</pubDate><content:encoded>&lt;p&gt;When we founded FeaturePeek in 2019, we wanted to create a way for developers get timely feedback from reviewers, a problem we often encountered when collaborating with product and design teams. And in the past two years, we’ve helped some amazing teams improve the way they review and iterate on web projects.&lt;/p&gt;
&lt;p&gt;Today, we are thrilled to announce &lt;strong&gt;FeaturePeek’s acquisition by Netlify&lt;/strong&gt; as our next step towards improving collaboration for cross-functional teams everywhere. In addition to offering a complete platform for building, deploying, and collaborating on web apps, Netlify is the original pioneer of deploy previews. Together, we’re launching &lt;a href=&quot;https://www.netlify.com/blog/2021/05/19/next-generation-deploy-previews-plus-netlify-acquires-featurepeek/&quot;&gt;the next generation of Netlify Deploy Previews&lt;/a&gt;, which includes many of the capabilities FeaturePeek users have come to love.&lt;/p&gt;
&lt;h2 id=&quot;what-this-partnership-means-for-featurepeek&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-this-partnership-means-for-featurepeek&quot; aria-label=&quot;what this partnership means for featurepeek permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What this partnership means for FeaturePeek&lt;/h2&gt;
&lt;p&gt;The whole FeaturePeek team is joining Netlify, and we are so excited to be working with Netlify to create more collaborative workflows for developers on cross-functional teams. Netlify shares our vision that by building delightful, developer-focused experiences we can enable entire teams to work together better. We encourage all of you to try out the new Netlify Deploy Previews and let us know what you think!&lt;/p&gt;
&lt;p&gt;We’re so grateful to be joining Netlify and working with talented, creative folks that share our vision around developer collaboration. We’re already planning new ways to improve Deploy Previews with the Netlify team, so stay tuned for more integrations and new tools to help web development team more efficiently share, review, and manage feedback on web apps.&lt;/p&gt;
&lt;h2 id=&quot;what-this-means-for-featurepeek-customers&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-this-means-for-featurepeek-customers&quot; aria-label=&quot;what this means for featurepeek customers permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What this means for FeaturePeek customers&lt;/h2&gt;
&lt;p&gt;To our customers, a heartfelt thank you! Our journey has only been possible with your support and your generous and constructive feedback. We’ve been lucky to work with some of the most talented and creative organizations, companies, agencies, and developers along our journey. You’ve helped us learn and grow, and ultimately build FeaturePeek into a developer-focused tool that enabled teams around the world.&lt;/p&gt;
&lt;p&gt;With Netlify’s launch of collaborative Deploy Previews, we’ll be deprecating the FeaturePeek platform after 30 days from today, on June 18. We have tons of experience migrating developer workflows to a new platform, and would be more than happy to help your team migrate from FeaturePeek to Netlify to take advantage of the same collaborative tools you loved using on FeaturePeek (or to somewhere else, if you prefer).&lt;/p&gt;
&lt;p&gt;Please reach out to us for help migrating to Netlify or if you have questions about billing or service availability.&lt;/p&gt;
&lt;h2 id=&quot;next-steps&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#next-steps&quot; aria-label=&quot;next steps permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Go check out the new &lt;a href=&quot;https://www.netlify.com/products/deploy-previews&quot;&gt;Netlify collaborative Deploy Previews!&lt;/a&gt; &lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;— Eric &amp;#x26; Jason&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How FeaturePeek manages security]]></title><description><![CDATA[The development of web applications requires the cooperation of many roles; from design, to engineering, product management and operations…]]></description><link>https://featurepeek.com/how-featurepeek-manages-security/</link><guid isPermaLink="false">https://featurepeek.com/how-featurepeek-manages-security/</guid><pubDate>Tue, 29 Dec 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;The development of web applications requires the &lt;a href=&quot;https://whatis.techtarget.com/definition/security-by-design&quot;&gt;cooperation of many roles;&lt;/a&gt; from design, to engineering, product management and operations. But security isn’t something that’s simply designed and done. Instead, effective security requires the coordinated buy-in of organizational leadership, designers, and the developers building and running the application. This is true about web applications that are being developed. But it’s also true about the third-party services that a web application depends on to function. If a third-party is vulnerable, it’s possible that a dependency on it could compromise your application.&lt;/p&gt;
&lt;p&gt;This isn’t limited to production services, either. It makes sense that if an infrastructure provider (like AWS) is compromised, it would affect your production application. But what about during the development, staging, and product review phases? If you’re a web agency with enterprise clients, you might be working with sensitive proprietary information. Likewise, if you’re a developer at a major technology company, the website you’re building may be for a product that hasn’t even been announced yet.&lt;/p&gt;
&lt;p&gt;So it’s no surprise that one of the most common questions we get asked by new users is “How do you manage security at FeaturePeek?” In order to help our users better understand our security objectives and practices, that’s why we put together this blog post.&lt;/p&gt;
&lt;h2 id=&quot;1-featurepeek-deployment-previews-are-private-by-default&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-featurepeek-deployment-previews-are-private-by-default&quot; aria-label=&quot;1 featurepeek deployment previews are private by default permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. FeaturePeek deployment previews are private by default&lt;/h2&gt;
&lt;p&gt;Did you know that some deploy preview experiences are &lt;a href=&quot;https://www.google.com/search?q=inurl%3A%22deploy-preview%22+site%3A%22*.netlify.app%22&quot;&gt;indexable on Google?&lt;/a&gt; But that’s not the case with FeaturePeek. Our deployment previews are private by default, meaning that even if someone has a deploy preview URL, they can only access it if they’re logged in and on the team that owns the project. This way, you can ensure that only approved stakeholders have access to view your in-progress work and keep wandering eyes out.&lt;/p&gt;
&lt;h2 id=&quot;2-we-never-store-your-source-code-on-our-side&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-we-never-store-your-source-code-on-our-side&quot; aria-label=&quot;2 we never store your source code on our side permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. We never store your source code on our side&lt;/h2&gt;
&lt;p&gt;FeaturePeek never stores your source code on our side. We request access to a repo’s source code to read the &lt;code class=&quot;language-text&quot;&gt;peek.yml&lt;/code&gt; configuration file, in order to see which repos are opted-in to FeaturePeek. This enables us to detect configuration details about each frontend, like the type of frontend architecture, and whether you to specified if your project is a static or &lt;a href=&quot;https://docs.featurepeek.com/dockerhub&quot;&gt;Docker project.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;3-we-never-write-code-directly-to-your-repo&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-we-never-write-code-directly-to-your-repo&quot; aria-label=&quot;3 we never write code directly to your repo permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. We never write code directly to your repo&lt;/h2&gt;
&lt;p&gt;The only time we write references is via a pull request: when a user follows the project setup wizard and requests a &lt;a href=&quot;https://docs.featurepeek.com/github-actions&quot;&gt;GitHub Actions&lt;/a&gt; template to be added to their repo. Outside this particular exception, FeaturePeek will never write code directly to a repo. Configuring FeaturePeek doesn’t touch any of your production deployments, so you can tinker away without fear of screwing things up for your own customers.&lt;/p&gt;
&lt;h2 id=&quot;4-we-use-https-everywhere&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-we-use-https-everywhere&quot; aria-label=&quot;4 we use https everywhere permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. We use HTTPS everywhere&lt;/h2&gt;
&lt;p&gt;To ensure proper encryption and security for FeaturePeek deployment previews, we exclusively rely on &lt;a href=&quot;https://www.cloudflare.com/learning/ssl/what-is-https/&quot;&gt;HTTPS-enabled URLs.&lt;/a&gt; Not only do we think this is a “no-brainer” best practice for your deploy previews, but we hope it helps give everyone that you send a FeaturePeek deployment preview link an added sense of confidence in content of what they’re about to review.&lt;/p&gt;
&lt;h2 id=&quot;5-your-app-is-completely-isolated-from-other-users-apps&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5-your-app-is-completely-isolated-from-other-users-apps&quot; aria-label=&quot;5 your app is completely isolated from other users apps permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5. Your app is completely isolated from other users’ apps&lt;/h2&gt;
&lt;p&gt;Every FeaturePeek environment gets its own namespace in the cluster, so it’s completely isolated from other FeaturePeek users’ deployments. We chose to make this security design decision in order to make sure all our users’ deployment previews stay private and that their code is only accessed by authorized users.&lt;/p&gt;
&lt;h2 id=&quot;6-featurepeek-environment-variables-are-encrypted-at-rest&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6-featurepeek-environment-variables-are-encrypted-at-rest&quot; aria-label=&quot;6 featurepeek environment variables are encrypted at rest permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6. FeaturePeek environment variables are encrypted at rest&lt;/h2&gt;
&lt;p&gt;Rest assured (excuse the pun) that we encrypt all environment variables. If your encrypted environment variables were ever hacked/stolen, their values couldn’t be recovered. We encrypt your environment variables to ensure your proprietary information and technological secret sauce is safely under lock and key. If you want to learn more about how Auth works at FeaturePeek, you can read more about it &lt;a href=&quot;https://docs.featurepeek.com/oauth&quot;&gt;in our docs.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;7-we-use-a-password-manager-and-you-should-too&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#7-we-use-a-password-manager-and-you-should-too&quot; aria-label=&quot;7 we use a password manager and you should too permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;7. We use a password manager (and you should too!)&lt;/h2&gt;
&lt;p&gt;We’re big fans of &lt;a href=&quot;https://www.cnet.com/news/password-managers-a-little-pain-for-a-lot-better-security-world-password-day/&quot;&gt;password managers&lt;/a&gt; at FeaturePeek. Beyond the convenience of not needing to remember which password you use for each service, by choosing to use a password manager, you’re making it easy for yourself to make good decisions about your accounts and password choices. Whether you choose &lt;a href=&quot;https://www.lastpass.com/&quot;&gt;LastPass&lt;/a&gt;, &lt;a href=&quot;https://1password.com/&quot;&gt;1Password&lt;/a&gt;, &lt;a href=&quot;https://passwords.google.com/&quot;&gt;Google Password Manager&lt;/a&gt;, or another service, password managers are a simple way anyone can improve their own security on the Web.&lt;/p&gt;
&lt;h2 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn more&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; turns your deployment previews into the hub for your team’s frontend product review. It’s the easiest way for UI/UX teams to collaborate on frontend code, and integrates with familiar tools so you can continue to use the services that you’ve come to know and love. From Continuous Integration services to container registries, and from bug tracking platforms to getting notified in Slack, we’ve got you covered.&lt;/p&gt;
&lt;p&gt;FeaturePeek provides collaborative frontend staging environments on-demand, so you can collect implementation feedback from stakeholders sooner. Learn more about &lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;FeaturePeek Teams,&lt;/a&gt; our collaborative tool that supercharges deployment previews for development teams.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[FeaturePeek CEO Eric Silverman on Beginning your career in Software Engineering (video)]]></title><description><![CDATA[FeaturePeek’s Eric Silverman recently joined Mintbean to share advice with new bootcamp graduates looking for their first job in software…]]></description><link>https://featurepeek.com/eric-silverman-beginning-your-career-in-software-engineering-video/</link><guid isPermaLink="false">https://featurepeek.com/eric-silverman-beginning-your-career-in-software-engineering-video/</guid><pubDate>Mon, 14 Dec 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;FeaturePeek’s &lt;a href=&quot;https://github.com/eric-silverman&quot;&gt;Eric Silverman&lt;/a&gt; recently joined Mintbean to share advice with new bootcamp graduates looking for their first job in software engineering. Eric discussed his path through build engineering at Apple, managing startup teams, and even his current stack at &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt;. Whether you’re a new developer struggling with impostor syndrome, unsure of what job search terms will uncover that magical opportunity, or just curious to hear words of wisdom from a developer who has been through it, Eric’s presentation provides a load of insights to help equip those newly entering the professional world.&lt;/p&gt;
&lt;p&gt;If you like this content, make sure to check out our friends at &lt;a href=&quot;https://mintbean.io/&quot;&gt;Mintbean&lt;/a&gt;. They’re a growing community of dev bootcamp graduates, self-learners, and other beginning developers that participate in weekly hackathons together. They offer free workshops that feature speakers from relevant startups and leading technology companies. Mintbean hackathons and workshops are intended to help new developers build their portfolios and ultimately find their first jobs in software development.&lt;/p&gt;
&lt;p&gt;Below are some of the highlights of Eric’s workshop. If you’d like to view the whole 40-minute presentation, you can find it at the bottom of the page.&lt;/p&gt;
&lt;h2 id=&quot;how-did-you-get-started-in-software-engineering&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-did-you-get-started-in-software-engineering&quot; aria-label=&quot;how did you get started in software engineering permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How did you get started in software engineering?&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/Ef5HUIrHXJA&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;p&gt;Decoding industry-specific job titles can be a barrier for new developers. “I had no idea what a build engineer was,” Eric explains, “I didn’t know what the field of build engineering was. I knew a little bit about compilers. And I knew a little bit about building software. But I didn’t know anything about the field I would spend the bulk of my career in.” That’s why Eric recommends new developers keep an open mind when searching for new jobs.&lt;/p&gt;
&lt;p&gt;Whether you’re looking to touch all the parts of a stack at a startup, or want to build up expertise in a particular field at a large company, you can learn from Eric’s developer journey and the insights he’s gained along the way. &lt;a href=&quot;https://www.youtube.com/watch?v=Ef5HUIrHXJA&amp;#x26;t=138s&quot;&gt;In this video,&lt;/a&gt; Eric discusses how he got started in software engineering and answers questions about his first role as a software developer, what he learned while working at his first startup, and the benefits of working at a startup if you’re a new developer.&lt;/p&gt;
&lt;h2 id=&quot;why-learn-software-fundamentals&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#why-learn-software-fundamentals&quot; aria-label=&quot;why learn software fundamentals permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Why learn software fundamentals?&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/AoD-JmAUBoM&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;p&gt;Even in a world where every question is a Google Search away, Eric suggests that it’s still important for new software developers to learn their fundamentals. “Tools change over the years; new methodologies, new platforms, new languages come up. But at the end of the day, a lot of the core fundamentals of software engineering are fundamentals for a reason and they’re applicable no matter where you are in your journey and in your career in software engineering.”&lt;/p&gt;
&lt;p&gt;In order to better prepare for the professional world, Eric suggests new developers take their personal projects to the next level. &lt;a href=&quot;https://www.youtube.com/watch?v=AoD-JmAUBoM&quot;&gt;Watch the video&lt;/a&gt; about to learn what Eric wishes he knew when he got started as a new software developer and some of his strategies for overcoming impostor syndrome.&lt;/p&gt;
&lt;h2 id=&quot;what-jobs-should-new-developers-apply-for&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-jobs-should-new-developers-apply-for&quot; aria-label=&quot;what jobs should new developers apply for permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What jobs should new developers apply for?&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/IRDkmOgP4aE&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;p&gt;One of the best bits of advice Eric has for job-hunting software developers is that “the role you are probably perfect for might not be obvious for you.” That’s why it’s important not to take the easy way out when looking for job openings. Eric warns “it’s very easy to go to LinkedIn and type in software engineer. There’s so much you could be missing, especially roles that are really perfect for new engineers.” Look instead for positions like technical writer, sales engineer, QA engineer, DevOps engineer, and other more-specific roles to find more promising opportunities.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=IRDkmOgP4aE&amp;#x26;t=3s&quot;&gt;This video&lt;/a&gt; explains why many new developers aren’t aware of job roles that would be a great fit for them, things developers should know when starting their first software engineering job, and lesser-known roles that new developers should consider to improve prospects on the job hunt.&lt;/p&gt;
&lt;h2 id=&quot;why-are-interpersonal-skills-so-important-on-software-development-teams&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#why-are-interpersonal-skills-so-important-on-software-development-teams&quot; aria-label=&quot;why are interpersonal skills so important on software development teams permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Why are interpersonal skills so important on software development teams?&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/6CcybvsWK-4&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;p&gt;“A lot of the times, especially with software engineering, it’s very easy to fall back on the fact that it’s logical. Your code compiles; it works or it doesn’t. It meets the spec, or you got all your bugs done, or you fixed this issue,” says Eric Silverman. “But so much of what you’ll find when you’re working on a team is interpersonal.” It’s important to bring your most positive self to build relationships with others on your team and create a reputation as a developer that others want to work with.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6CcybvsWK-4&amp;#x26;t=7s&quot;&gt;Find out&lt;/a&gt; how having a &lt;a href=&quot;https://www.brainpickings.org/2014/01/29/carol-dweck-mindset/&quot;&gt;Growth Mindset&lt;/a&gt; can help transform your outlook as a new software developer and set you up for success on your new team.&lt;/p&gt;
&lt;h2 id=&quot;how-can-new-developers-gain-experience&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-can-new-developers-gain-experience&quot; aria-label=&quot;how can new developers gain experience permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How can new developers gain experience?&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/X176aWlMnlY&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;p&gt;Personal projects are a great way to build out your developer portfolio and showcase your skills for potential employers. “Any time you’re really on your own figuring out something; that’s what real life is. That’s what developing software in a company is,” according to Eric Silverman. “So the more you can simulate that with a personal project, the better. You’ll get more reps. So much of software engineering is just doing it over and over, making mistakes, learning from those mistakes, making new mistakes, and then learning from those.”&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=X176aWlMnlY&amp;#x26;t=1s&quot;&gt;this highlight&lt;/a&gt;, Eric lists some of the best ways that new developers can gain experience while looking for a job, why it’s important to read other people’s code, and how contributing to open source projects can help you learn and look attractive to potential employers on your job hunt.&lt;/p&gt;
&lt;h2 id=&quot;beginning-your-career-in-software-engineering-full-video&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#beginning-your-career-in-software-engineering-full-video&quot; aria-label=&quot;beginning your career in software engineering full video permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Beginning your career in Software Engineering (full video)&lt;/h2&gt;
&lt;p&gt;If you like these highlights and want to watch Eric Silverman’s full presentation on “Beginning your career in software engineering,” you can find the full video here:&lt;/p&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/5fXMQuNfkZY&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;</content:encoded></item><item><title><![CDATA[Getting started in DevOps, CI pipelines, and setting up your first GitHub Actions (video)]]></title><description><![CDATA[Earlier this month, FeaturePeek cofounder Jason Barry joined Mintbean to talk DevOps and help new Mintbean developers set up their first…]]></description><link>https://featurepeek.com/getting-started-in-devops-ci-pipelines-and-github-actions-video/</link><guid isPermaLink="false">https://featurepeek.com/getting-started-in-devops-ci-pipelines-and-github-actions-video/</guid><pubDate>Fri, 27 Nov 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Earlier this month, FeaturePeek cofounder &lt;a href=&quot;https://twitter.com/jasbarry&quot;&gt;Jason Barry&lt;/a&gt; joined Mintbean to talk DevOps and help new Mintbean developers set up their first continuous integration pipelines. If you’re not familiar with &lt;a href=&quot;https://mintbean.io/&quot;&gt;Mintbean&lt;/a&gt;, it’s a growing community of dev bootcamp graduates, self-learners, and other beginning developers that participate in weekly hackathons together. &lt;a href=&quot;https://mintbean.io/meets&quot;&gt;Past hacks&lt;/a&gt; have included trivia apps, stock trackers, chatbots, and lots more. Along with the hackathons, Mintbean offers free workshops and presentations that feature helpful speakers from relevant startups and industry leading companies. All Mintbean hackathons and workshops are all intended to help new developers build their portfolios and ultimately find their first jobs in software development.&lt;/p&gt;
&lt;p&gt;One of the best parts of the Mintbean community is that every participant, code mentor, speaker, and community organizer at Mintbean are there to collaborate together and help each other learn. This focus on helping one another leads to a vibrant enthusiasm in Mintbean communities and chats, and new Mintbean participants always seem to think they’ve stumbled into a community that’s too good to be true. Except that it’s the real deal! That’s why the FeaturePeek team are so proud to be sponsors of the Mintbean community, as well as frequent presenters on DevOps and career soft skills topics.&lt;/p&gt;
&lt;h2 id=&quot;automate-and-deploy-with-github-actions&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#automate-and-deploy-with-github-actions&quot; aria-label=&quot;automate and deploy with github actions permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Automate and Deploy with GitHub Actions&lt;/h2&gt;
&lt;p&gt;On that note, FeaturePeek cofounder and frontend developer Jason Barry joined a recent Mintbean cohort to discuss continuous integration and &lt;a href=&quot;https://www.youtube.com/watch?v=tQbZ7_C-KWk&amp;#x26;t=32s&quot;&gt;setting up your first CI pipelines&lt;/a&gt;. In this presentation, Jason chose to feature &lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt; for its ease-of-use and for its generous free tier. In this talk, Jason discusses the important of continuous integration, how to set up GitHub Actions, as well as some simple tests and automations you can integrate.&lt;/p&gt;
&lt;p&gt;Don’t worry if you weren’t able to join us on 11/16. That’s why we recorded Jason’s session, and this way you can watch it on your own time. Before you start, make sure to check out Jason’s &lt;a href=&quot;https://github.com/jasonbarry/github-actions-starter-pack&quot;&gt;GitHub Actions Starter Pack&lt;/a&gt; repository on GitHub. &lt;/p&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/tQbZ7_C-KWk?start=39&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;</content:encoded></item><item><title><![CDATA[7 ways frontend developers can improve collaboration on UI/UX teams]]></title><description><![CDATA[When building anything, there is a necessary conflict between form and function. Entirely functional products lack visual appeal and can be…]]></description><link>https://featurepeek.com/7-ways-frontend-developers-can-improve-uiux-team-collaboration/</link><guid isPermaLink="false">https://featurepeek.com/7-ways-frontend-developers-can-improve-uiux-team-collaboration/</guid><pubDate>Mon, 16 Nov 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;When building anything, there is a necessary conflict between form and function.&lt;/p&gt;
&lt;p&gt;Entirely functional products lack visual appeal and can be uninspiring to use. While products too obsessed with aesthetics can be confusing to handle, or expensive to make.&lt;/p&gt;
&lt;p&gt;As a frontend developer, you’re on the frontlines of the battle between form and function. Because you’re the bridge between visual designers and functionally-focused developers, when deadlines start closing in and feedback flies fast, you’re the one on the hook. Whether that’s fair or not, frontend developers are responsible for ensuring effective team collaboration when it comes time for final review, bug fixes, and finally, delivery.&lt;/p&gt;
&lt;p&gt;In this article, we’ll show you how to balance form and function; collaborate effectively as a frontend developer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why it’s important to think like a user&lt;/li&gt;
&lt;li&gt;Speaking up early and frequently&lt;/li&gt;
&lt;li&gt;Essential tools for effective team collaboration&lt;/li&gt;
&lt;li&gt;Continuous learning makes you a better frontend developer&lt;/li&gt;
&lt;li&gt;Feedback is essential and how small ‘picky’ design changes can add up to a big problem&lt;/li&gt;
&lt;li&gt;How to make front end collaboration an organizational priority&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ll also recommend some of our favorite tools and resources to make it easy, too.&lt;/p&gt;
&lt;h2 id=&quot;1-thinking-like-a-user&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-thinking-like-a-user&quot; aria-label=&quot;1 thinking like a user permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Thinking like a user&lt;/h2&gt;
&lt;p&gt;The key to achieving a good balance between form and function is to get to know your users — and how they intend to use your product.&lt;/p&gt;
&lt;p&gt;Good design and product development teams build intimate familiarity with the various personas of their users. By building empathy with your audience, you’ll be able to spot issues with usability in advance and make better decisions when prioritizing new features or bug fixes.&lt;/p&gt;
&lt;p&gt;Some of the most successful startups start by developing their products to solve actual customer problems - where the customer need precedes the product itself. Regardless of the role your customers play in the creation of your product, it’s critically important to maintain direct feedback channels with your users.&lt;/p&gt;
&lt;p&gt;By seeing the issues your customers experience with your product, you’ll identify where pain points occur in real life — not just in Figma or VSCode.&lt;/p&gt;
&lt;p&gt;If you are building a website or other product without ready access to customers, try one of the websites below to gain impartial insights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.usertesting.com/&quot;&gt;UserTesting&lt;/a&gt;&lt;/strong&gt;: Used by Facebook, eBay and Walmart, UserTesting is the quickest way to get impartial feedback from customers. You pick your target market, assign them a series of tasks to complete and get a screen recording, spoken commentary and written feedback within hours.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://usabilityhub.com/&quot;&gt;UsabilityHub&lt;/a&gt;&lt;/strong&gt;: Amazon, Google and AirTable use UsabilityHub. They allow you to create your own surveys (first click tests, preference tests, five second tests and design surveys) and invite your own participants, or make use of the UsabilityHub panel — comprising over 170,000 users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote Testing&lt;/strong&gt;: You can also use stakeholders or your existing contacts to get insights on your product. The U.S. Department of Health &amp;#x26; Human Services has put together a guide on &lt;a href=&quot;https://www.usability.gov/how-to-and-tools/methods/remote-testing.html&quot;&gt;how to test remotely here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2-speak-up-early-and-frequently&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-speak-up-early-and-frequently&quot; aria-label=&quot;2 speak up early and frequently permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. Speak up early and frequently&lt;/h2&gt;
&lt;p&gt;You’re sitting in a planning meeting with the product manager, designers, management and other developers. You listen carefully, as the stories for the next sprint are discussed or longer term issues are debated.&lt;/p&gt;
&lt;p&gt;Inside, you know there are usability problems with the product — and that while these issues would be simple to fix, they’re being ignored by the rest of the team. Whose responsibility is it to speak up?&lt;/p&gt;
&lt;p&gt;This is a common pattern in many development teams, where opinions are bottled up and frustrated developers eventually move to a new job.&lt;/p&gt;
&lt;p&gt;The good news is, it doesn’t have to be this way. By speaking up, you’ll improve the overall quality of the product, have a say in the direction of the product and work on &lt;a href=&quot;https://medium.com/swlh/critical-soft-skills-for-software-developers-6845545f6dbd&quot;&gt;improving your soft-skills.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a frontend developer, you bridge both design and development. You are uniquely positioned to see when design or functional issues are harming product quality. And, as such, you should never be afraid to share your insights.&lt;/p&gt;
&lt;h2 id=&quot;3-leverage-productivity-tools-to-stay-on-track&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-leverage-productivity-tools-to-stay-on-track&quot; aria-label=&quot;3 leverage productivity tools to stay on track permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Leverage productivity tools to stay on track&lt;/h2&gt;
&lt;p&gt;Even if you’re the quiet type, preferring to focus on work rather than attend meetings, effective collaboration still requires communication. &lt;/p&gt;
&lt;p&gt;You should make a continuous effort to be aware of what the rest of your team are doing - and that means staying on top of your team’s productivity tools. The benefits are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alignment&lt;/strong&gt;: Teams that share a common vision build incredible products, as everyone is working towards the same goal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empathy&lt;/strong&gt;: By staying in touch, you’ll understand your teammates skills sets and how you can help them be more effective.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compromise&lt;/strong&gt;: Make designers aware of technical limitations early. Cutting back an overly ambitious design around technical limitations can be soul destroying for a designer. By communicating early, you can avoid these issues before they occur, proactively compromising on form or function, as appropriate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You should also frequently reach out to your designer during the development process. This certainly beats waiting until the end of the development cycle, to discover a design issue.&lt;/p&gt;
&lt;p&gt;Some tools we recommend are:&lt;/p&gt;
&lt;h3 id=&quot;framer&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#framer&quot; aria-label=&quot;framer permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;a href=&quot;https://www.framer.com/&quot;&gt;Framer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Framer is a great design tool for building advanced prototypes that look and function like the final product. It works a lot like Sketch or Figma and should be familiar to both designers and developers.&lt;/p&gt;
&lt;p&gt;You can see some &lt;a href=&quot;https://www.framer.com/examples/&quot;&gt;examples&lt;/a&gt; of what is possible with Framer here.&lt;/p&gt;
&lt;p&gt;Prototypes are a critical but often forgotten part of the development process. They allow designers to think of the product in a tangible way (rather than an abstract design) and let developers flag complexity early in the design process.&lt;/p&gt;
&lt;h3 id=&quot;featurepeek&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#featurepeek&quot; aria-label=&quot;featurepeek permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;With traditional development environments, you need to deploy a branch to staging before you can get feedback, or hope the designer knows Git enough to set up a local environment. This wastes time and makes it difficult to roll out quick changes. In short, working with the design feels laborious rather than inspiring.&lt;/p&gt;
&lt;p&gt;With on-demand staging from FeaturePeek, a preview URL is generated for every pull request with built-in feedback tools, allowing you to share and get valuable feedback quickly. When collaborators do give feedback, FeaturePeek automatically records the URL they are on, and their browser metadata, making it easier to resolve issues.&lt;/p&gt;
&lt;h2 id=&quot;4-always-be-learning&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-always-be-learning&quot; aria-label=&quot;4 always be learning permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. Always be learning&lt;/h2&gt;
&lt;p&gt;Frontend development is always evolving. New tools and frameworks are released almost weekly, each unlocking new possibilities to build better websites and products.&lt;/p&gt;
&lt;p&gt;As a frontend developer, it is your responsibility to continually learn and adopt new technologies, as they might make a technically difficult design more feasible.&lt;/p&gt;
&lt;p&gt;But how should a frontend developer approach continual learning? Here’s what we recommend.&lt;/p&gt;
&lt;h3 id=&quot;subscribe-to-newsletters-and-rss-feeds&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#subscribe-to-newsletters-and-rss-feeds&quot; aria-label=&quot;subscribe to newsletters and rss feeds permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Subscribe to newsletters and RSS feeds&lt;/h3&gt;
&lt;p&gt;Great newsletters keep you informed with no action needed. Just hit ‘subscribe’ and once a week you’ll get curated insights in your inbox. Some newsletters we recommend are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://daringfireball.net/feeds/&quot;&gt;Daring Fireball&lt;/a&gt;&lt;/strong&gt;: A sarcastic weekly forum on technology (especially Mac-related), design, and culture&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://codepen.io/spark/&quot;&gt;The CodePen Spark&lt;/a&gt;&lt;/strong&gt;: A weekly newsletter, podcast, and community oriented around frontend development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://javascriptweekly.com/&quot;&gt;JavaScript Weekly&lt;/a&gt;&lt;/strong&gt;: A weekly email roundup of JavaScript news and articles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://frontendweekly.co/&quot;&gt;Frontend Weekly&lt;/a&gt;&lt;/strong&gt;: A weekly roundup of front end related articles and news&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://frontendfocus.co/&quot;&gt;Frontend Focus&lt;/a&gt;&lt;/strong&gt;: A weekly email newsletter covering HTML, CSS, WebGL and other associated technologies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://ponyfoo.com/weekly&quot;&gt;Pony Foo Weekly&lt;/a&gt;&lt;/strong&gt;: A deeper dive into web technologies, sent every Thursday&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;join-online-communities&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#join-online-communities&quot; aria-label=&quot;join online communities permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Join online communities&lt;/h3&gt;
&lt;p&gt;Just lurking in online communities is fine for entertainment, but relevant online communities are a great way to stay at the cutting-edge of web technologies. Here you’ll find discussions about real issues other developers are facing — and how they solved them. Become an active contributor through comments or, even better, post original content about your own trials and experiences. &lt;/p&gt;
&lt;p&gt;The top online communities for frontend development are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://news.ycombinator.com/news&quot;&gt;Hacker News&lt;/a&gt;&lt;/strong&gt;: Ignore the dated appearance, this online community is at the forefront of software development and entrepreneurship. People post links they find interesting, then (attempt to) have civilized discussions about the topic. You can also post your projects in the ‘Show’ section and get feedback from the community.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://dev.to/t/frontend&quot;&gt;Dev.to&lt;/a&gt;&lt;/strong&gt;: DEV is a “community of software developers getting together to help one another out”. DEV is a unique hybrid platform, feeling like a blogging platform, forum and chatroom all at the same time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.indiehackers.com/&quot;&gt;Indie Hackers&lt;/a&gt;&lt;/strong&gt;: If you are building a product of your own, talk about it on Indie Hackers — a community for tech entrepreneurs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.producthunt.com/makers&quot;&gt;Product Hunt Makers&lt;/a&gt;&lt;/strong&gt;: You might have heard of Product Hunt as a place to discover new products, but they also offer a ‘virtual co-working space’ for ‘makers’. With over 25,000 members, this is one of the fastest growing communities in the space.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;learn-by-doing&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-by-doing&quot; aria-label=&quot;learn by doing permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn by doing&lt;/h3&gt;
&lt;p&gt;Adopting an unknown technology on an urgent project is a recipe for disaster. New technologies are often poorly documented, so there’s not a lot of support if things go wrong.&lt;/p&gt;
&lt;p&gt;Instead, create a sandbox project around the new technology and try it out. By building a tiny application or tool with no repercussions on your larger project, you’ll learn the new technology and discover it’s limitations first-hand. &lt;/p&gt;
&lt;p&gt;Other examples of side projects you could build with a new framework are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;To-do list&lt;/strong&gt;: A basic to-do list is a great way to learn a new language. There is an on-going project on GitHub which aims to build the same to-do app in every programming language — &lt;a href=&quot;https://github.com/SimiCode/ToDOList-in-all-languages&quot;&gt;check it out here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Weather&lt;/strong&gt;: Try displaying the weather by using an innovative web technology. Could you use &lt;a href=&quot;https://airbnb.io/lottie/#/&quot;&gt;Lottie&lt;/a&gt; to animate weather icons, or &lt;a href=&quot;https://developers.google.com/web/updates/tags/webar&quot;&gt;WebAR&lt;/a&gt; to show the forecast?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calculator&lt;/strong&gt;: A calculator is a great way to learn state management frameworks, like Redux, Mobx or Flux.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you’re ready to test your new skills, or just want to build up a portfolio of side frontent projects, check out &lt;a href=&quot;https://mintbean.io/&quot;&gt;Mintbean&lt;/a&gt;. They host weekly hackathons with simple frontend challenges, as well as free workshops to help you upskill and improve job hunting strategies for new developers.&lt;/p&gt;
&lt;h2 id=&quot;5-get-feedback-often&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5-get-feedback-often&quot; aria-label=&quot;5 get feedback often permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5. Get feedback often&lt;/h2&gt;
&lt;p&gt;Feedback is a key part of effective front end collaboration.&lt;/p&gt;
&lt;p&gt;Developers should give feedback on designs as they are being created, flagging technical limitations as early as possible. Equally, designers should give continual feedback throughout the development process, too.&lt;/p&gt;
&lt;p&gt;In the past, this was difficult for both parties. Designers could not see in-progress development work and developers couldn’t see design locked away in desktop applications.&lt;/p&gt;
&lt;p&gt;But in 2020, cloud design tools like Figma, Sketch or Framer include commenting tools. Designers can see in-progress development work by using on-demand staging environments when using &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;6-small-design-changes-big-impact&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6-small-design-changes-big-impact&quot; aria-label=&quot;6 small design changes big impact permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6. Small design changes; big impact&lt;/h2&gt;
&lt;p&gt;Have you ever reacted badly to negative feedback, particularly ‘picky’ or small changes to the design?&lt;/p&gt;
&lt;p&gt;Sure, you could choose to ignore these small tweaks, but they eventually build up — taking a big toll on product quality.&lt;/p&gt;
&lt;p&gt;Remember, design is a highly skilled job that requires years of experience and specialist knowledge. If a non-programmer told you that a bug-ridden function was ‘good enough’ and ignored your feedback, you’d be frustrated too. &lt;/p&gt;
&lt;p&gt;The next time you receive feedback from a designer, react positively and consider the change as an essential part of refining the overall product. You’re all on the same team, and small positive interactions over time are what make up great work cultures!&lt;/p&gt;
&lt;h2 id=&quot;7-change-your-organization&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#7-change-your-organization&quot; aria-label=&quot;7 change your organization permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;7. Change your organization&lt;/h2&gt;
&lt;p&gt;If collaboration between designers and developers within your organization is difficult, you might need to discuss a few internal changes.&lt;/p&gt;
&lt;p&gt;Teams with effective front end collaboration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Include developers throughout the process&lt;/strong&gt;: By including developers from the start of the project, technical limitations can be considered and overcome at the start of the design process — rather than worked-around later.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose balanced project managers&lt;/strong&gt;: Some project managers have tunnel-vision, focusing too much on one particular discipline, such as business, design or technical considerations. This works well for highly specialized teams, but is a blocker when front end collaboration is needed. A well-rounded project manager understands all disciplines involved in the project; facilitating collaboration and compromise.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work closely&lt;/strong&gt;: Where possible, designers and developers should have tight, frequent feedback loops. Remote teams can use video chats and screen sharing to help with this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid jargon&lt;/strong&gt;: Just like developers, designers have their own jargon. A designer might ask for more kerning, tracking and leading and get blank stares from a developer. A developer might ask for the ‘letter-spacing’ of a H3 and get the same blank stare back. Instead of relying on technical language, encourage your organization to adopt tools for visual communication — a screenshot, Loom recording or Figma design is much clearer than a written or verbal explanation alone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We hope these tips help you work more collaboratively with designers (and fellow developers!) to build high-quality products.&lt;/p&gt;
&lt;p&gt;In 2020, it is not enough for a frontend developer to just write code. You are responsible for effective frontend collaboration. Truly exceptional frontend developers bridge the gap between design and development, helping the designers and developers on their team to build the best possible product.&lt;/p&gt;
&lt;h2 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn More&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; deployment previews are the easiest way for UI/UX teams to collaborate on frontend code.&lt;/p&gt;
&lt;p&gt;FeaturePeek provides collaborative frontend staging environments on-demand, so you can collect implementation feedback from stakeholders sooner. FeaturePeek works with all frameworks and hosting providers, so you can keep your tools and you’re never locked in.&lt;/p&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;FeaturePeek Teams&lt;/a&gt;, our collaborative tool that supercharges deployment previews for development teams.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[It's Not Design Culture Anymore, It's DevOps Culture. And We Should Adjust Accordingly.]]></title><description><![CDATA[Have you noticed that a lot of your friends who used to be Designers are now UX Architects? Did their jobs really change? Or is their output…]]></description><link>https://featurepeek.com/its-not-design-culture-anymore-its-devops-culture/</link><guid isPermaLink="false">https://featurepeek.com/its-not-design-culture-anymore-its-devops-culture/</guid><pubDate>Tue, 27 Oct 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Have you noticed that a lot of your friends who used to be Designers are now UX Architects?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Did their jobs really change? Or is their output being used and valued differently by the organizations that employ them? As a mainstream culture, we’ve really only become comfortable with design-thinking over the &lt;a href=&quot;https://www.interaction-design.org/literature/article/design-thinking-get-a-quick-overview-of-the-history&quot;&gt;last 50-75 years&lt;/a&gt;.  Today, designers are more important than ever to facilitating the product development process. But designers’ roles are undergoing a critical transformation.&lt;/p&gt;
&lt;p&gt;In the modern workplace, design culture is everywhere and it’s had a lasting impact on the way organizations function. But while we’ve been paying attention to one very important way that work culture has changed, we have been potentially ignoring another, even more significant shift. Software development, and increased demand for software developers by both technology and more more traditional businesses, has shifted the culture of our workplaces and changed our expectations for how work gets done.&lt;/p&gt;
&lt;p&gt;Like designers, software developers have never been more in demand. Today they can command high salaries and frequently can improve their prospects by 50% or more simply by moving jobs. Companies are now employing recruiters whose sole focus are attracting technical talent. And more developers are represented in business and technical leadership positions than ever before. These are relatively recent changes, but they’re already beginning to affect our workplace cultures. In this blog post, we’ll explore how increased the increasing gravity of developers is shifting the balance of our workplace into becoming &lt;a href=&quot;https://www.atlassian.com/team-playbook/examples/devops-culture#:~:text=DevOps%20culture%20is%20all%20about,%2C%20and%20%22the%20business%22.&quot;&gt;DevOps cultures&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Using the mainstreaming of “design thinking” a template, we’ll look at some design collaboration tools that have been adopted by mainstream businesses. Then, we’ll look at some developer-centric collaboration and productivity tools and discuss how their adoption could impact the ways software development teams and entire businesses will work together in the future.&lt;/p&gt;
&lt;h2 id=&quot;how-designops-tools-changed-the-way-we-work&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-designops-tools-changed-the-way-we-work&quot; aria-label=&quot;how designops tools changed the way we work permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How DesignOps Tools Changed the Way We Work&lt;/h2&gt;
&lt;p&gt;Designers have a whole assortment of tools at their disposal. But most of the tools that designers use can be distilled into one of two categories. The first type are design tools, in that they are the bits of software like &lt;a href=&quot;https://www.figma.com/&quot;&gt;Figma&lt;/a&gt;, &lt;a href=&quot;https://www.sketch.com/&quot;&gt;Sketch&lt;/a&gt;, and &lt;a href=&quot;https://www.adobe.com/products/xd.html&quot;&gt;Adobe XD&lt;/a&gt;, where the primary purpose is to enable the act of designing and creating. The second type of design tool is one that helps designers communicate and collaborate with other stakeholders, sometimes referred to as “DesignOps.”&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://airbnb.design/designops-airbnb/&quot;&gt;AirBnB&lt;/a&gt; explains their need for DesignOps tools, as their product teams are “working daily across so many disciplines, from Engineering to Product Management, Research, Content Strategy and an array of Design specialties, every little overhead in the transfer of information compounds. Inversely, every optimization and positive connection significantly lowers friction for everyone.” DesignOps tools ensure that cross-functional product design teams have visibility into each others progress, and removes friction by enabling each discipline to contribute, in context, whenever is convenient (within the project schedule).&lt;/p&gt;
&lt;p&gt;Tools like &lt;a href=&quot;https://zeplin.io/&quot;&gt;Zeplin&lt;/a&gt; help designers make their design systems shareable and accessible to developers and other designers on their team. In other words, the Zeplin app helps with the people-side of design operations. This is why it’s helpful to view DesignOps tools as platforms for facilitating team collaboration. Because DesignOps tools make information accessible, teams can rely less on in-person or virtual conferencing more productively allocate their time resources.&lt;/p&gt;
&lt;p&gt;The benefits of DesignOps tools are clear, so much so that traditional design tools are incorporating collaboration features as part of their &lt;a href=&quot;https://blog.adobe.com/en/2019/09/19/xd-roadmap-future-plans-recent-features.html#gs.jq9x96&quot;&gt;longterm product roadmaps&lt;/a&gt;. In the same way that introducing collaborative features will enable traditional design tools to adapt to the requirements of DesignOps culture, businesses will increasingly turn to collaborative design experiences to enable their internal design processes and procedures.&lt;/p&gt;
&lt;h2 id=&quot;how-devops-tools-are-changing-the-way-we-work&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-devops-tools-are-changing-the-way-we-work&quot; aria-label=&quot;how devops tools are changing the way we work permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How DevOps Tools are Changing the Way We Work&lt;/h2&gt;
&lt;p&gt;Like design tools, developer tools also come in many flavors. Traditionally, developer tools have focused on enabling the act of software development, as in coding. These take the forms of text editors like &lt;a href=&quot;https://www.sublimetext.com/&quot;&gt;Sublime&lt;/a&gt; and IDEs like &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;VS Code&lt;/a&gt;.  But a developer’s everyday experience isn’t just limited to what gets deployed. Like designers, developers also rely on tools to help them collaborate, make their work accessible to others, and ultimately deploy to production. These tools are commonly described as having to do with DevOps.&lt;/p&gt;
&lt;p&gt;DevOps is really just a way to describe the design, development, deployment, and continuous operation of software code, including all the tools and mechanisms that support those processes. &lt;a href=&quot;https://www.atlassian.com/team-playbook/examples/devops-culture#:~:text=DevOps%20culture%20is%20all%20about,%2C%20and%20%22the%20business%22.&quot;&gt;Atlassian&lt;/a&gt; warns that DevOps is “not a matter of simply adopting agile planning or automated testing or continuous delivery.” Instead, they describe that “DevOps culture is all about a shared understanding between developers and operations, and sharing responsibility for the software they build.”&lt;/p&gt;
&lt;p&gt;As developers become increasingly central to business operations, the tools that they use to collaborate with peers and non-developers on product teams will play an outsized role in facilitating everyday business operations. You can already see evidence of this now. For example, even if you’re a non-developer you feel the impact of a &lt;a href=&quot;https://slack.com/&quot;&gt;Slack&lt;/a&gt; or &lt;a href=&quot;https://zoom.us/&quot;&gt;Zoom&lt;/a&gt; outage. And if you are a developer, you know exactly how (un)productive your day is when &lt;a href=&quot;https://www.theverge.com/2020/6/29/21306674/github-down-errors-outage-june-2020&quot;&gt;GitHub is down&lt;/a&gt;. Just like these examples, new tools are being created everyday to support DevOps and remove the daily frictions experienced by software developers. Ultimately, these are the tools that will deliver immense future value.&lt;/p&gt;
&lt;p&gt;Here are the main types of DevOps tools that have already become, or will become, ubiquitous for modern software development teams:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;⚙️ Platform-as-a-Service (PaaS) and Serverless&lt;/strong&gt;
There are lots of ways to build and host your web application. Platform-as-a-Service providers like &lt;a href=&quot;https://www.netlify.com/&quot;&gt;Netlify&lt;/a&gt; and &lt;a href=&quot;https://www.heroku.com/&quot;&gt;Heroku&lt;/a&gt; provide a more streamlined user experience compared with &lt;a href=&quot;https://aws.amazon.com/&quot;&gt;AWS&lt;/a&gt;, &lt;a href=&quot;https://azure.microsoft.com/en-us/&quot;&gt;Microsoft Azure&lt;/a&gt;, or &lt;a href=&quot;https://cloud.google.com/&quot;&gt;Google Cloud&lt;/a&gt;, while all four provide scalable infrastructure services to support applications of all sizes. &lt;a href=&quot;https://aws.amazon.com/serverless/&quot;&gt;Serverless&lt;/a&gt; architectures take the notion of abstracting-away infrastructure a step further, and adopt an overall philosophy of offloading all (or as much as possible) of the infrastructure responsibilities to third-party services.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🚧 Deployment Staging and Visual QA&lt;/strong&gt;
Every software development process that has a visual component or user interface will have some sort of visual review process. Web platforms like Netlify and Heroku have native deployment preview solutions to preview UI/UX work. &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; is a developer tool that makes deployment previews collaborative, so designers and other non-engineer team members can &lt;a href=&quot;https://featurepeek.com/blog/benefits-of-automatic-staging-environments/&quot;&gt;easily comment and leave annotations&lt;/a&gt; on the in-progress UI/UX.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🚢 Containerization and Deployment&lt;/strong&gt;
Containers, like those used in &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;, can make it easier to operate your application, especially when dealing with complex deployment environments. Services like &lt;a href=&quot;https://kubernetes.io/&quot;&gt;Kubernetes&lt;/a&gt; can help you orchestrate and monitor your containers. Some of the benefits to adopting a container-based architecture include the ability to build once, run anywhere - a self contained process, and the freedom to package absolutely everything needed to run your application in a convenient way. Containers are modular, interoperable, portable, reproducible, and scalable. So it’s no surprise that while containers are not used everywhere, they’re quickly getting there.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🔄 Continuous Integration and Deployment (CI/CD)&lt;/strong&gt;
Integration is the act of checking that the code you just wrote didn’t break something you weren’t working on directly. Continuous integration, or CI, is doing this continuously to make sure issues are caught and addressed incrementally rather than all at once. Tools like &lt;a href=&quot;https://travis-ci.org/&quot;&gt;Travis CI&lt;/a&gt; and &lt;a href=&quot;https://circleci.com/&quot;&gt;CircleCI&lt;/a&gt; are good bets when considering continuous integration. Deployment is the process of launching your code onto the server, and there are lots of different ways to accomplish this. You’ll want to think about choosing an automation server like &lt;a href=&quot;https://www.jenkins.io/&quot;&gt;Jenkins&lt;/a&gt; and whether you’ll need a delivery platform like &lt;a href=&quot;https://spinnaker.io/&quot;&gt;Spinnaker&lt;/a&gt;. Together, CI/CD is the collection of integration checks and test run to ensure code properly integrates, along with the steps needed to safely and reliably deploy your code onto your server environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;🌡️ Performance and reliability monitoring&lt;/strong&gt;
In order to effectively operate a software application, you need to be able to troubleshoot when issues occur. But before you can identify a fix, first you need to know what happened. Logging is the continuous recording of application events, so that developers can assess and problem-solve issues as they occur. But logging itself is a passive activity. Monitoring answers questions about how the system is running, and involves continuously observing a set of KPIs about performance and resource usage. &lt;a href=&quot;https://www.datadoghq.com/&quot;&gt;Datadog&lt;/a&gt;, &lt;a href=&quot;https://www.appdynamics.com/&quot;&gt;AppDynamics&lt;/a&gt;, and &lt;a href=&quot;https://newrelic.com/&quot;&gt;New Relic&lt;/a&gt; are some of the leading providers of monitoring solutions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn More&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; brings DesignOps and DevOps together. The easiest way to set up on-demand frontend staging environments, FeaturePeek creates a deployment preview of your frontend every time you open a pull request. A drawer overlay makes it easy for your reviewers to leave comments, take screenshots with annotations, capture screen recordings, create tickets on popular bug-tracking platforms, and more.&lt;/p&gt;
&lt;p&gt;FeaturePeek works with static sites and sites containerized with Docker. Best of all, you don’t have to migrate to a new cloud ecosystem. Whether your company’s website is hosted on AWS, Google Cloud, Heroku, Digital Ocean, whatever — since FeaturePeek is infrastructure-agnostic, you can use FeaturePeek no matter who your hosting provider is.&lt;/p&gt;
&lt;p&gt;Try the &lt;a href=&quot;https://dashboard.featurepeek.com/&quot;&gt;2-week free trial&lt;/a&gt; to see how FeaturePeek can improve your team’s development productivity.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The benefits of on-demand staging environments]]></title><description><![CDATA[TL;DR: Test features in isolation. Test releases as a whole.  You know the drill: it’s the night before a release, and your dev team is…]]></description><link>https://featurepeek.com/benefits-of-automatic-staging-environments/</link><guid isPermaLink="false">https://featurepeek.com/benefits-of-automatic-staging-environments/</guid><pubDate>Mon, 19 Oct 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Test features in isolation. Test releases as a whole. &lt;/p&gt;
&lt;p&gt;You know the drill: it’s the night before a release, and your dev team is scrambling to address last-minute feedback before deploying to production. Most of the feedback surrounds tiny changes that are trivial to fix — but some of the feedback requires larger, substantial change. These long feedback loops reveal a more fundamental issue of communication breakdown. This should have been discussed earlier. Now you’re left wondering if it’s worth delaying the release to help ensure the stability of the build.&lt;/p&gt;
&lt;p&gt;Sound familiar? I experienced this first-hand while working at a small (~6 engineers, ~2 designers, 1 PM) B2B SaaS startup. The product team would give feedback about the latest build on staging with only a day or two left in the sprint, causing a last-minute rush by the dev team to implement those changes. Corners were cut to meet deadlines, and hastily-written workarounds were rarely refactored, adding to the backlog of technical debt as the next sprint was already underway.&lt;/p&gt;
&lt;p&gt;If you experience these symptoms during the development of your product, then &lt;strong&gt;chances are that your team doesn’t have the right tools at its disposal.&lt;/strong&gt; It turned out that the product team left feedback late because they &lt;em&gt;didn’t have a stable URL where they could verify UI/UX&lt;/em&gt; until changes were on our staging server.&lt;/p&gt;
&lt;p&gt;We needed a way to get stakeholder feedback earlier in the development cycle — well before features landed on staging.&lt;/p&gt;
&lt;h2 id=&quot;what-is-a-staging-environment&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-is-a-staging-environment&quot; aria-label=&quot;what is a staging environment permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What is a staging environment?&lt;/h2&gt;
&lt;p&gt;A staging environment is a replica of your production environment. There shouldn’t be any significant differences between your staging environment and your live website, with one notable exception: the staging environment is private. &lt;/p&gt;
&lt;p&gt;Think of staging as the ultimate quality assurance check, where you can make sure everything works in as close to launch conditions as possible. You’ll catch bugs, avoid costly downtime, and give your developers the confidence to take risks. &lt;/p&gt;
&lt;h2 id=&quot;how-do-you-deploy-to-a-staging-environment&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-do-you-deploy-to-a-staging-environment&quot; aria-label=&quot;how do you deploy to a staging environment permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How do you deploy to a staging environment?&lt;/h2&gt;
&lt;p&gt;The traditional deployment process to a single staging environment usually has four steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The developer builds and tests&lt;/strong&gt; in a local environment, running on their machine.&lt;/li&gt;
&lt;li&gt;Once they are satisfied with their work, the developer pushes their changes to a branch on the git repo, where they &lt;strong&gt;open a pull request&lt;/strong&gt;. Continuous Integration runs automated tests — like linting, type checking, and unit tests — to catch any issues. If issues are found, the developer goes back to step &lt;/li&gt;
&lt;li&gt;Once Continuous Integration passes, the developer’s &lt;strong&gt;peers conduct a code review&lt;/strong&gt;. This is necessary to gain consensus among your team that the proposed changes are greenlighted to be merged into the codebase. Not only should reviewers look at the code, but they should run the code to confirm that the code operates as intended. The developer goes back to step 1 to address any feedback left by reviewers. &lt;/li&gt;
&lt;li&gt;Once the changes are deemed copacetic by automated tests and peer reviewers, the developer’s branch is &lt;strong&gt;ready to be merged into the main branch&lt;/strong&gt;. If Continuous Delivery is enabled, then merging to the main branch kicks off an automated task to &lt;strong&gt;deploy the changes in the pull request to your company’s internal staging server&lt;/strong&gt;. &lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Depending on how your DevOps team configures your git repo’s webhooks, merging to the main branch may trigger additional steps. If your org follows the practices of Continuous Deployment, merging to master could roll the latest changes out to production automatically (hopefully behind a feature flag). Every DevOps team is different — check with yours to see which practice your company follows. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;why-multiple-staging-environments-instead-of-only-one&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#why-multiple-staging-environments-instead-of-only-one&quot; aria-label=&quot;why multiple staging environments instead of only one permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Why multiple staging environments instead of only one?&lt;/h2&gt;
&lt;p&gt;Instead of being constrained by all upcoming changes landing on a single server, you could have temporary, ephemeral environments that exist solely for the purposes of hosting the build of a given pull request. This is what we mean when we say that you should &lt;em&gt;test features in isolation&lt;/em&gt;. Giving every branch in your git repo a dedicated environment is very freeing for both your developers and reviewers. &lt;/p&gt;
&lt;p&gt;What you might not is realize that this comes with more benefits than just testing features.&lt;/p&gt;
&lt;h2 id=&quot;code-review-wont-block-gathering-product-feedback&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#code-review-wont-block-gathering-product-feedback&quot; aria-label=&quot;code review wont block gathering product feedback permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Code review won’t block gathering product feedback&lt;/h2&gt;
&lt;p&gt;With a single staging server, your code won’t be deployed until code review passes, and you won’t have a link to share with other people on your team. If you want to double-check with a UI/UX designer that the animation you made is up to snuff, too bad — you’re gated upon code review passing before you can Slack over a link. &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 27.695167286245354%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABAUlEQVQY032QUW7CMAyGe0nOwnl6D7Y3Hqc9UdDEWhgbBVFaaApL2rjf3I5NDKT90ifHdmwnDtq25Rb4tnVd0+k+D957mqa5ywfc6KdgGkUMBoO+8FripbdhGDIcDv/EOgWlMZhPi/ON4rDW4hHS7ZaH0YiqqnDiKE3FWXNWz9Y5Ih04Ho/1bKk1Zirto72Cl+cn5o8j8nVCnq0ojgcKs+FtFrHL9qy3Gwq353U2JV0tyDdz4smEdZqyXC57TmKIFzFJnFy+/L6AjxXoq8h2yh50MjoVU8JROZ+Usy5P+E+B6M66K1IekTxDihypSnzna1Npalrx/Z32Ql8j8kt75X8B5MvMI6WxSusAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;before&quot;
        title=&quot;before&quot;
        src=&quot;/static/541ad0b6788bedccf472307afb415e37/e1e83/before.png&quot;
        srcset=&quot;/static/541ad0b6788bedccf472307afb415e37/00a32/before.png 148w,
/static/541ad0b6788bedccf472307afb415e37/abe81/before.png 295w,
/static/541ad0b6788bedccf472307afb415e37/e1e83/before.png 590w,
/static/541ad0b6788bedccf472307afb415e37/702f0/before.png 885w,
/static/541ad0b6788bedccf472307afb415e37/48347/before.png 1180w,
/static/541ad0b6788bedccf472307afb415e37/63245/before.png 2152w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If any stages above fail (red), you have to go back to square one. This can be costly if you’ve already performed code review, a time-consuming operation.&lt;/p&gt;
&lt;p&gt;But UI/UX designers don’t care about the quality of the code — so why should code review be a bottleneck for gathering UX feedback? Ideally, you’d be able to get their opinion before asking your dev peers to give your code a once-over. That way, you’ll eliminate an extra speed bump when shipping your feature. &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.647749510763212%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA7klEQVQY05WQa1KEMBCEOTNX2tPoBZSlWBV5r4sESHgl+Qys+Pxh2VXJdCVdPT3jWWuxwFbtyq7YWZbnHA4HjDHX93fdT/0Ob/twYrMbz7M7E2YcN0F0DPB9/7PRF7O1yVat+eDeN/tWQNNgRcPS1ZTRkez+jvrlTBzHSNnzFzwhBGEUEdzeUCVPNKajeK1Il5R6EOSl42lCkRc0Q00sH7jMlVtFRhiGdFpwejwROQ+tNd56KTeerC+MZc7cuXSDYho6RF+RhAHPLl11rlC6Z9Ijs50ZpxGlFNouKKdf+e+RV0i5jWzbFlx63E7/gzcnDdAYng3CUgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;after&quot;
        title=&quot;after&quot;
        src=&quot;/static/0d987c17b83ffb8af6772fa57ce3c972/e1e83/after.png&quot;
        srcset=&quot;/static/0d987c17b83ffb8af6772fa57ce3c972/00a32/after.png 148w,
/static/0d987c17b83ffb8af6772fa57ce3c972/abe81/after.png 295w,
/static/0d987c17b83ffb8af6772fa57ce3c972/e1e83/after.png 590w,
/static/0d987c17b83ffb8af6772fa57ce3c972/702f0/after.png 885w,
/static/0d987c17b83ffb8af6772fa57ce3c972/48347/after.png 1180w,
/static/0d987c17b83ffb8af6772fa57ce3c972/e3758/after.png 2044w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Ephemeral staging servers that spin up on demand allow for product feedback and code review to occur before (or at the same time) as code review. If there’s something that needs to be addressed, going back to square one isn’t very detrimental, since not much time has passed. You eliminate a speed bump by batching product feedback with code review, rather than having one be a dependency of the other.&lt;/p&gt;
&lt;h2 id=&quot;prevent-an-integration-warzone&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#prevent-an-integration-warzone&quot; aria-label=&quot;prevent an integration warzone permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Prevent an integration warzone&lt;/h2&gt;
&lt;p&gt;Sure, your new feature that you’ve worked hard on works now — but since a single staging environment is the landing pad for your entire engineering team’s upcoming changes, a developer on your team may inadvertently push code that breaks what you wrote. Even now that you have an internal link you can share with a non-technical stakeholder, &lt;strong&gt;there are no guarantees that the link will continue to work&lt;/strong&gt;, since it is actively being integrated with!&lt;/p&gt;
&lt;p&gt;While a single staging environment is useful for testing a release as a whole, &lt;strong&gt;features should be tested in isolation&lt;/strong&gt;. This means that an environment’s purpose should be dedicated to testing the functionality of a single feature, rather than a collection of many features. Save testing the collection of features for your QA server, after you’ve already tested each feature individually.&lt;/p&gt;
&lt;h2 id=&quot;lower-the-barrier-for-running-peers-code&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#lower-the-barrier-for-running-peers-code&quot; aria-label=&quot;lower the barrier for running peers code permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Lower the barrier for running peers’ code&lt;/h2&gt;
&lt;p&gt;Developers face a large amount of context switching when they are asked to review someone else’s code. The process is unnecessarily interruptive, and looks something like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stop what you’re doing &lt;/li&gt;
&lt;li&gt;Stash any unstaged changes&lt;/li&gt;
&lt;li&gt;Fetch from origin&lt;/li&gt;
&lt;li&gt;Checkout their branch&lt;/li&gt;
&lt;li&gt;Install dependencies (and potentially restart your development server)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;➡️ Actually verify the new feature and provide feedback&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Checkout your original branch&lt;/li&gt;
&lt;li&gt;Pop your git stash&lt;/li&gt;
&lt;li&gt;Reinstall dependencies (and potentially restart your development server)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With on-demand staging environments, on the other hand, &lt;strong&gt;the running branch is waiting for you to verify and provide feedback&lt;/strong&gt;. Developers can jump into the deployment preview straight from the pull request without needing to checkout files, install dependencies, restart their development server, or change anything about their local environment.&lt;/p&gt;
&lt;h2 id=&quot;avoid-redundant-code-reviews&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#avoid-redundant-code-reviews&quot; aria-label=&quot;avoid redundant code reviews permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Avoid redundant code reviews&lt;/h2&gt;
&lt;p&gt;The point of getting feedback is to make more implementation changes that address the issues raised in the feedback session. The problem is that this will require another code review! Even though the proposed changes the second time around are (hopefully) small, your reviewers will experience déjà vu because they are now going over the same lines of code for the same feature implementation.&lt;/p&gt;
&lt;p&gt;With multiple staging environments at your disposal, you could spin up a preview environment for your designers to critique while your pull request is still open. You wouldn’t need to request a code review from your developer peers until your designer gives the thumbs up ahead of time.&lt;/p&gt;
&lt;h2 id=&quot;more-opportunities-for-testing&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#more-opportunities-for-testing&quot; aria-label=&quot;more opportunities for testing permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;More opportunities for testing&lt;/h2&gt;
&lt;p&gt;On-demand staging environments can be configured to be accessible behind a shared URL, which unlocks a wide range of testing and quality assurance opportunities.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cross-browser testing&lt;/strong&gt;: Ensure your product or website works perfectly on a wide range of browsers and devices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility testing&lt;/strong&gt;: Run accessibility tests to ensure your content is accessible to individuals with disabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User testing&lt;/strong&gt;: Create a pool of test users or use a crowd-testing platform to discover usability issues before you launch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;avoid-environment-drift&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#avoid-environment-drift&quot; aria-label=&quot;avoid environment drift permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Avoid environment drift&lt;/h2&gt;
&lt;p&gt;Single staging environments are often configured once and left to decay, becoming a DevOps chore. This leads to drift between the staging and production environments, as similarities between the two decrease. &lt;strong&gt;This increases the risk of bugs appearing in either staging or production&lt;/strong&gt;, which makes bugs difficult to reproduce. &lt;/p&gt;
&lt;p&gt;Examples of these drifts include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Environment and configuration files getting modified by unsuccessful staging deploys, leading to extraneous or incorrectly named settings.&lt;/li&gt;
&lt;li&gt;Time-sensitive security vulnerability updates being applied to production in a rush, leaving staging several versions behind.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whereas your production environment is under constant care and attention from the DevOps team, an infrequently used staging environment is lower on the priority list.
This can lead to an unreliable staging environment, which blocks your development team from launching new features.&lt;/p&gt;
&lt;h2 id=&quot;more-stakeholder-engagement&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#more-stakeholder-engagement&quot; aria-label=&quot;more stakeholder engagement permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;More stakeholder engagement&lt;/h2&gt;
&lt;p&gt;In the past, stakeholders didn’t get to use the finished product until it was live. Instead, they got a brief scripted demo at the end of the sprint.&lt;/p&gt;
&lt;p&gt;By giving stakeholders access to your staging environment, they can help with the quality assurance process and ensure that the development work completed meets their expectations. This saves time and prevents mistakes from accidentally shipping.&lt;/p&gt;
&lt;h2 id=&quot;increased-developer-productivity&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#increased-developer-productivity&quot; aria-label=&quot;increased developer productivity permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Increased developer productivity&lt;/h2&gt;
&lt;p&gt;With on-demand staging environments, developers can create as many staging environments as they require without asking DevOps to configure a new environment. Developers love it because they have the capability to spawn new servers, and DevOps loves it because they don’t need to field manual tasks of spinning up a server only for it to be taken down shortly afterwards. &lt;/p&gt;
&lt;h2 id=&quot;save-your-company-time-and-money&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#save-your-company-time-and-money&quot; aria-label=&quot;save your company time and money permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Save your company time and money&lt;/h2&gt;
&lt;p&gt;Single staging environments are typically available 24/7 on a dedicated server or virtual machine. This is a waste of resources that could otherwise be used for production.&lt;/p&gt;
&lt;p&gt;Furthermore, if you have several development teams, the &lt;strong&gt;single staging environment can become a bottleneck&lt;/strong&gt;. Teams must wait for a staging environment to become available, waiting for other teams’ quality assurance processes to complete. This could waste days of developer productivity and encourage teams to skip straight to production, losing all the benefits of an effective staging environment. &lt;/p&gt;
&lt;p&gt;Each on-demand staging environment, on the other hand, is only online for the duration of the pull request. When the PR gets merged or closed, the environment gracefully shuts down, so you only pay for what you use.&lt;/p&gt;
&lt;h2 id=&quot;single-vs-on-demand-staging-environments&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#single-vs-on-demand-staging-environments&quot; aria-label=&quot;single vs on demand staging environments permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Single vs. on-demand staging environments&lt;/h2&gt;
&lt;p&gt;Instead of the single staging environment decaying while it waits for someone to use it, &lt;strong&gt;an on-demand staging environment is created dynamically, triggered by a CI/CD pipeline&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;This means developer teams can have access to staging whenever they need it, simply by opening a pull request. As you’d imagine, this boosts productivity and encourages developers to use staging environments, reducing the chances of costly production bugs. Once a developer is done with the staging environment, the staging environment is destroyed, along with any configuration, environment, or installation inconsistency. &lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Single staging environment&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;On-demand staging environments&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Developer self-serve&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Low maintenance&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prevents redundant code reviews&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can test features in isolation&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can link to a build while pull request is still open&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number of environments&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Pre-allocated&lt;/td&gt;
&lt;td&gt;Allocated on demand and reclaimed automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Having said that, &lt;strong&gt;you should still have a staging server where you can do QA before rolling to production&lt;/strong&gt;. This is where you should do a final spot-check to ensure that everything is working as expected before going live. The difference is that the purpose of this server is to test the release as a whole, rather than each feature on its own. How do the new features operate together? If there’s a bug found, which pull request and which lines of code introduced the bug? These questions are much easier to answer when features are tested while the pull request is still open.&lt;/p&gt;
&lt;h2 id=&quot;shorten-cross-functional-feedback-loops-with-on-demand-staging-environments&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#shorten-cross-functional-feedback-loops-with-on-demand-staging-environments&quot; aria-label=&quot;shorten cross functional feedback loops with on demand staging environments permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Shorten cross-functional feedback loops with on-demand staging environments&lt;/h2&gt;
&lt;p&gt;As a front-end developer, being able to dynamically create a dedicated environment for an unlimited number of branches is a very powerful feeling. I can control my own network of machines without needing to ask for cycles from DevOps! The asynchronous nature of asking for feedback on a fleet of ephemeral environments is liberating — I know that each deployment will be waiting for my reviewer exactly how I left it. And while I review my peers’ code, I can visually review the build alongside it without having to check out their branch locally. &lt;/p&gt;
&lt;p&gt;It’s not only helpful to the developers on my team, but also helpful to the non-technical stakeholders too — they get a lens into the engineering process, and can voice their opinions while the implementation details are still fresh in the developer’s mind. &lt;/p&gt;
&lt;p&gt;If your organization is struggling with shipping features (on time) that meets everyone’s acceptance criteria, the solution may lie in tooling. Notice where and when the speed bumps occur — handoff, development, code review, etc — to help identify bottlenecks. Ask yourself whether your single staging server is a limiting factor during your team’s development processes. &lt;/p&gt;
&lt;h2 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn more&lt;/h2&gt;
&lt;p&gt;The easiest way to set up on-demand frontend staging environments is with &lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek.&lt;/a&gt; FeaturePeek creates a deployment preview of your frontend every time you open a pull request. A drawer overlay is added on top that &lt;strong&gt;makes it easy for your reviewers to leave feedback&lt;/strong&gt; by allowing them to leave comments, take screenshots with annotations, capture screen recordings, create tickets on popular bug-tracking platforms, and more.&lt;/p&gt;
&lt;p&gt;FeaturePeek works with static sites and sites containerized with Docker. Best of all, you don’t have to migrate to a new cloud ecosystem. Whether your company’s website is hosted on AWS, Google Cloud, Heroku, Digital Ocean, whatever — since FeaturePeek is infrastructure-agnostic, &lt;strong&gt;you can use FeaturePeek no matter who your hosting provider is&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Try the &lt;a href=&quot;https://dashboard.featurepeek.com&quot;&gt;2-week free trial&lt;/a&gt; to see how FeaturePeek can improve your team’s development productivity.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Pull requests are the new design handoffs]]></title><description><![CDATA[The line between UI/UX designer and developer grows blurrier each year. Every day, more designers are leaning into software development and…]]></description><link>https://featurepeek.com/pull-requests-are-the-new-design-handoffs/</link><guid isPermaLink="false">https://featurepeek.com/pull-requests-are-the-new-design-handoffs/</guid><pubDate>Tue, 29 Sep 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;The line between UI/UX designer and developer grows blurrier each year. Every day, more designers are leaning into software development and learning to code. This has led to a new class of “full-stack designers.” The &lt;a href=&quot;https://flatironschool.com/blog/what-is-full-stack-design/#:~:text=Full%2DStack%20Design%2C%20Full%20Stop,Still%20do%2C%20actually.&quot;&gt;Flatiron School&lt;/a&gt; describes a full-stack designer as one with the ability to “single-handedly tackle every layer of software development.” With the ability to produce and communicate with both technical and non-technical stakeholders, full-stack designers are exceptionally valuable for cross-functional teams.&lt;/p&gt;
&lt;p&gt;Similarly, design-literacy has become table stakes for many developers. Most UI/UX developers work closely with designers, and a certain aesthetic sensibility is required to produce polished UI/UX work. So it’s no surprise that many UI/UX developers find themselves picking up tools and skills that are more typically associated with designers in the course of their regular work. Additionally, smaller teams lacking available design resources may turn to frontend developers, or even product managers, to take on additional design responsibilities in support of existing projects.&lt;/p&gt;
&lt;p&gt;Job roles will continue to blend, and UI/UX developers will require new tools to better collaborate with increasingly cross-functional teams. There will always be a need for practical tools that make the act of coding easier, but it’s a new class of social, collaborative developer tools that promise to play an outsized role in the workplace of the future.&lt;/p&gt;
&lt;h2 id=&quot;️-the-collaboration-toolbox-what-tools-uiux-teams-use-to-collaborate&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EF%B8%8F-the-collaboration-toolbox-what-tools-uiux-teams-use-to-collaborate&quot; aria-label=&quot;️ the collaboration toolbox what tools uiux teams use to collaborate permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;🛠️ The Collaboration Toolbox: What tools UI/UX teams use to collaborate&lt;/h2&gt;
&lt;p&gt;In the past five or so years, we’ve seen an explosion of collaboration tools to support professional teams. While the list of collaboration tools may be endless, when it comes to UI/UX teams, they all boil down into four basic categories:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Communication tools 📺&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not much is getting done if your team can’t communicate. Out of sheer necessity, most teams already have this category squared away, for better or worse. These are your big names like &lt;a href=&quot;https://zoom.us/&quot;&gt;Zoom&lt;/a&gt; and &lt;a href=&quot;https://slack.com/&quot;&gt;Slack&lt;/a&gt;, but there are also some smaller startups like &lt;a href=&quot;https://www.loom.com/&quot;&gt;Loom&lt;/a&gt;, &lt;a href=&quot;http://tandem.chat/&quot;&gt;Tandem&lt;/a&gt;, and others making moves in the team communication space.&lt;/p&gt;
&lt;p&gt;You can check out &lt;a href=&quot;https://featurepeek.com/blog/the-wfh-edition-our-ultimate-remote-working-stack-for-frontend-developers/&quot;&gt;this blog post&lt;/a&gt;, if you’d like to learn more about our thoughts on some of the leading communication apps available to development teams today.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Project management tools 📊&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Project management software helps to ensure that requirements are clearly communicated and contributors stay on top of their tasks. Project or product managers are responsible for aligning stakeholders, so that designers and developers can focus on executing the project objectives.&lt;/p&gt;
&lt;p&gt;Whichever tools you choose, the point of adopting project management software is to facilitate the design and implementation conversations that happen as a product is being developed. There are a ton of great options to choose from like &lt;a href=&quot;https://clubhouse.io/&quot;&gt;Clubhouse&lt;/a&gt;, &lt;a href=&quot;https://trello.com/en-US&quot;&gt;Trello&lt;/a&gt;, &lt;a href=&quot;https://monday.com&quot;&gt;Monday.com&lt;/a&gt;, &lt;a href=&quot;https://basecamp.com/&quot;&gt;Basecamp&lt;/a&gt;, &lt;a href=&quot;https://asana.com/&quot;&gt;Asana&lt;/a&gt;, and &lt;a href=&quot;https://www.atlassian.com/software/jira&quot;&gt;JIRA&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before investing time in a new project management solution, consider choosing one that integrates with any important internal tools to minimize headaches down the road.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Design collaboration tools 🎨&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not until the last few years have a crop of upstarts begun to unseat the incumbent Adobe, for the hearts and minds of designers. Today, there is a triumph of options when it comes to collaborative design software and they all have their unique offerings.&lt;/p&gt;
&lt;p&gt;Designer-centric tools like &lt;a href=&quot;https://www.figma.com/&quot;&gt;Figma&lt;/a&gt;, &lt;a href=&quot;https://www.sketch.com/&quot;&gt;Sketch&lt;/a&gt;, &lt;a href=&quot;https://www.invisionapp.com/&quot;&gt;InVision&lt;/a&gt;, &lt;a href=&quot;https://www.adobe.com/products/xd.html&quot;&gt;Adobe XD&lt;/a&gt;, and &lt;a href=&quot;https://balsamiq.com/&quot;&gt;Balsamiq&lt;/a&gt; all go various lengths to make wireframes and other handoffs tolerable for UI/UX developers. Handoff tools like &lt;a href=&quot;https://zeplin.io/&quot;&gt;Zeplin&lt;/a&gt; make it easy for developers to interpret wireframes, and must straddle both the design and development worlds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Developer collaboration tools  💻&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The universe of devtools is myriad, and comes with all sorts of solutions for problems that developers may face in the course of their work. But for collaborating with a team, there aren’t as many options as you’d think.&lt;/p&gt;
&lt;p&gt;Version management platforms have achieved outsized importance in developer life. &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt;, and to somewhat lesser degrees, &lt;a href=&quot;https://about.gitlab.com/&quot;&gt;GitLab&lt;/a&gt;, &lt;a href=&quot;https://bitbucket.org/&quot;&gt;Bitbucket&lt;/a&gt;, and others are the de facto public forums for software collaboration. Organizations large and small rely on these platforms to organize and document their software code.&lt;/p&gt;
&lt;p&gt;Then comes the challenge of previewing, and more importantly collaborating on, still-in-development projects. Some web platforms like &lt;a href=&quot;https://www.netlify.com/&quot;&gt;Netlify&lt;/a&gt; offer deployment previews, but there’s no way to collaborate or leave feedback in context, within the preview itself. That’s left to Slack, Zoom calls, or email.&lt;/p&gt;
&lt;p&gt;Team-focused tools like &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; prioritize the collaboration aspect, and make it easy to review and leave feedback on deployment previews. Reviewers can record screens, annotate screenshots, and even review responsive layouts on multiple devices.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;🤦♀️-the-collaboration-conundrum-what-tools-do-my-uiux-team-really-need&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%F0%9F%A4%A6%E2%99%80%EF%B8%8F-the-collaboration-conundrum-what-tools-do-my-uiux-team-really-need&quot; aria-label=&quot;🤦♀️ the collaboration conundrum what tools do my uiux team really need permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;🤦‍♀️ The Collaboration Conundrum: What tools do my UI/UX team really need?&lt;/h2&gt;
&lt;p&gt;With so many tools, and so much cross-pollination occurring between developers and designers today, it’s difficult to determine which tools your UI/UX team really needs to communicate and collaborate together.&lt;/p&gt;
&lt;p&gt;In a design process, it’s often the handoff points where team communication can breakdown. Consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What are your handoff points during the product design and development cycle?&lt;/li&gt;
&lt;li&gt;What tools do you use to facilitate collaboration during these handoffs?&lt;/li&gt;
&lt;li&gt;What are the potential communication gaps during your handoffs?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By identifying the handoff points between different roles on your team, you can begin targeting the tools necessary to keep your team on track. Remember, the initial exchange of wireframes isn’t your only handoff. Designs and prototype versions are constantly being handed off between team members for development, review, and QA. While some handoffs may already have established tools and processes (ex. handing-off wireframes), others may lack an established process or tool (ex. doing visual QA for pull requests).&lt;/p&gt;
&lt;h2 id=&quot;️-pull-requests-its-not-just-the-deployment-preview-thats-important&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EF%B8%8F-pull-requests-its-not-just-the-deployment-preview-thats-important&quot; aria-label=&quot;️ pull requests its not just the deployment preview thats important permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;↕️ Pull Requests: It’s not just the deployment preview that’s important&lt;/h2&gt;
&lt;p&gt;Design handoff tools are great, but why aren’t we talking about developer handoffs? Tools like &lt;a href=&quot;https://zeplin.io/&quot;&gt;Zeplin&lt;/a&gt; are great for ensuring developers have convenient access to information within wireframes. But how do non-engineers engage with &lt;a href=&quot;https://featurepeek.com/blog/why-are-so-many-orgs-slow-to-approve-pull-requests/&quot;&gt;pull requests&lt;/a&gt;, and collaborate as a team on constantly changing code previews?&lt;/p&gt;
&lt;p&gt;There are many good solutions if your end goal is simply the deployment preview itself. For example, if you’re a &lt;a href=&quot;https://www.netlify.com/tags/deploy-previews/&quot;&gt;Netlify&lt;/a&gt; user, they have a reasonable deploy preview tool. Similarly, there are available tools like &lt;a href=&quot;https://www.tugboat.qa/&quot;&gt;Tugboat&lt;/a&gt;, and a few others. If all you want is a staging environment for your pull requests, then most solutions are essentially equal.&lt;/p&gt;
&lt;p&gt;But the reality is that &lt;em&gt;real people&lt;/em&gt; are collaborating on this deployment preview, and they need to do more than just look at it. That’s why the actual deployment preview itself isn’t the point. &lt;em&gt;It’s the collaboration that matters.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;-why-the-next-killer-enterprise-app-will-be-a-developer-collaboration-tool&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-why-the-next-killer-enterprise-app-will-be-a-developer-collaboration-tool&quot; aria-label=&quot; why the next killer enterprise app will be a developer collaboration tool permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;🚀 Why the next killer enterprise app will be a developer collaboration tool&lt;/h2&gt;
&lt;p&gt;Like Slack, GitHub, Zoom, and Clubhouse, it’s the tools that change the way we communicate our thoughts and ideas with others that change the ways we work. Each of these applications helps us communicate and organize with our own teams. But none of these tools extends fully into the world of software development. As developers become a larger demographic in the workplace, collaboration tools that enable the way developers work, and make that workflow accessible to others will find eager adoption.&lt;/p&gt;
&lt;p&gt;This is why tools like FeaturePeek are so unique and exciting. FeaturePeek is an example of this new wave of developer tools that bridge pull requests and GitHub into an experience that is accessible for all users, and ultimately into a more social context. Just like design handoff software does for designers, and project management software does for product managers, developers also need their own tool to present pull requests in an accessible hub for the rest of the UI/UX team.&lt;/p&gt;
&lt;p&gt;There’s an elegant simplicity to focusing on pull requests as the final handoff of the UIUX process. By turning a basic developer action (creating a deployment preview for a pull request), and turning that step into a collaborative effort, every pull request becomes an opportunity for a just-in-time iteration or optimization. It’s a more efficient way of working for UI/UX, and serves to reinforce a notion that developers long ago intuited: &lt;strong&gt;Pull requests are the new design handoff.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn More&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; deployment previews are the easiest way for UI/UX teams to collaborate on frontend code. &lt;/p&gt;
&lt;p&gt;FeaturePeek provides collaborative frontend staging environments on-demand, so you can collect implementation feedback from stakeholders sooner. FeaturePeek works with all frameworks and hosting providers, so you can keep your tools and you’re never locked in.&lt;/p&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;FeaturePeek Teams&lt;/a&gt;, our collaborative tool that supercharges deployment previews for development teams.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why your deployment previews need to be collaborative]]></title><description><![CDATA[“FeaturePeek offers a simple and convenient solution that supplements our code review process and makes visual QA much faster and easier…]]></description><link>https://featurepeek.com/why-your-deployment-previews-need-to-be-collaborative/</link><guid isPermaLink="false">https://featurepeek.com/why-your-deployment-previews-need-to-be-collaborative/</guid><pubDate>Mon, 21 Sep 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;“FeaturePeek offers a simple and convenient solution that supplements our code review process and makes visual QA much faster and easier.”&lt;/em&gt;
&lt;em&gt;- &lt;a href=&quot;https://github.com/mokaymokay&quot;&gt;Kay Mok&lt;/a&gt;, Developer, &lt;a href=&quot;https://www.sanctuary.computer/&quot;&gt;Sanctuary Computer&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;🤦♀️-most-uiux-teams-are-ignoring-their-biggest-communication-challenge&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%F0%9F%A4%A6%E2%99%80%EF%B8%8F-most-uiux-teams-are-ignoring-their-biggest-communication-challenge&quot; aria-label=&quot;🤦♀️ most uiux teams are ignoring their biggest communication challenge permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;🤦‍♀️ Most UI/UX teams are ignoring their biggest communication challenge&lt;/h2&gt;
&lt;p&gt;While some organizations &lt;a href=&quot;https://hbr.org/2018/09/why-design-thinking-works&quot;&gt;scramble to incorporate design-thinking into their everyday business practices&lt;/a&gt;, web agencies and other technology-driven businesses have already adopted design processes and tools into their everyday operations.&lt;/p&gt;
&lt;p&gt;But even the most design-savvy organizations tend to completely ignore their biggest remaining communication challenge, and developers are left holding the bag. That’s because for all the design and collaboration tools in existence, none facilitate the final stage of the design process, when development teams undergo a series of reviews and iterations of the still-in-development UI/UX, collaborating with designers and project managers to ensure successful project delivery.&lt;/p&gt;
&lt;p&gt;Without tools to gather feedback on deployments in a timely fashion, frontend developers end up cramming last minute feedback, bugs, and scope changes from stakeholders at the end of the development cycle. Not only does this create stressful time crunches, but unachievable deadlines due to last-minute feedback can lead to corner-cutting on implementation details, code instability, and unreliable applications.&lt;/p&gt;
&lt;h2 id=&quot;-bridging-the-developer-to-designer-collaboration-gap&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-bridging-the-developer-to-designer-collaboration-gap&quot; aria-label=&quot; bridging the developer to designer collaboration gap permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;💬 Bridging the developer-to-designer collaboration gap&lt;/h2&gt;
&lt;p&gt;Project management software like &lt;a href=&quot;http://Monday.com&quot;&gt;Monday.com&lt;/a&gt;, &lt;a href=&quot;https://trello.com/&quot;&gt;Trello&lt;/a&gt;, &lt;a href=&quot;https://clubhouse.io/&quot;&gt;Clubhouse&lt;/a&gt;, &lt;a href=&quot;https://www.atlassian.com/software/jira&quot;&gt;JIRA&lt;/a&gt;, and many others help project managers communicate requirements and track project status. Design tools like &lt;a href=&quot;https://www.invisionapp.com/&quot;&gt;InVision&lt;/a&gt;, &lt;a href=&quot;https://zeplin.io/&quot;&gt;Zeplin&lt;/a&gt;, &lt;a href=&quot;https://www.figma.com/&quot;&gt;Figma&lt;/a&gt;, and &lt;a href=&quot;https://www.sketch.com/&quot;&gt;Sketch&lt;/a&gt; make it easy for designers to give frontend developers the information they need to create digital experiences from wireframes.&lt;/p&gt;
&lt;p&gt;But what are developers supposed to do when they need feedback on a pull request from other stakeholders in the design process? Send them to &lt;a href=&quot;https://github.com/&quot;&gt;GitHub?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Web platforms like &lt;a href=&quot;https://www.netlify.com/&quot;&gt;Netlify&lt;/a&gt; offer deployment staging, but existing testing and deployment preview solutions are not collaborative, and they’re locked into specific platforms. And good luck getting timely feedback from non-engineers. Existing solutions do nothing to bridge the disconnect between design and engineering teams.&lt;/p&gt;
&lt;h2 id=&quot;-the-easiest-way-for-uiux-teams-to-review-and-leave-feedback-on-frontend-code&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-the-easiest-way-for-uiux-teams-to-review-and-leave-feedback-on-frontend-code&quot; aria-label=&quot; the easiest way for uiux teams to review and leave feedback on frontend code permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;👊 The easiest way for UI/UX teams to review and leave feedback on frontend code&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/9a35e063f4a94c34301407404b0fcafa/drawer.gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; is a collaboration tool that shortens feedback loops between project managers, UI/UX designers, and frontend web developers. &lt;a href=&quot;https://github.com/chrismekim&quot;&gt;Christine Kim&lt;/a&gt;, a developer at &lt;a href=&quot;https://www.sanctuary.computer/&quot;&gt;Sanctuary Computer&lt;/a&gt;, describes “we’re a team of design-oriented developers, and FeaturePeek has been an incredible tool for collaborating with designers throughout the development process. Designers can easily click on a FeaturePeek link, follow the progress of a project, and catch quality issues early on.”&lt;/p&gt;
&lt;p&gt;Another developer at Sanctuary Computer, Conor Davidson explains that the team at Sanctuary Computer “built something like FeaturePeek for our company. Easily previewing PRs has become an essential part of our workflow. [But] we switched over to FeaturePeak from our own software and are not looking back. Y’all built exactly what we wanted, plus more.”&lt;/p&gt;
&lt;p&gt;FeaturePeek plugs in with familiar tools, like Github, Trello, Clubhouse, and Monday.com, so you can continue to use the services that you’ve come to know and love. FeaturePeek fits into your existing CI pipeline, and works with all frameworks and hosting providers.&lt;/p&gt;
&lt;h2 id=&quot;-the-ultimate-collaboration-tool-for-frontend-developers&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-the-ultimate-collaboration-tool-for-frontend-developers&quot; aria-label=&quot; the ultimate collaboration tool for frontend developers permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;📈 The ultimate collaboration tool for frontend developers&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;FeaturePeek Teams&lt;/a&gt;, our tool for enterprise and agency development teams, gives UI/UX developers all the features they need get feedback from stakeholders and keep projects on schedule.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;On-demand deployment previews&lt;/strong&gt; let you see your build on another machine before committing to the main branch&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Floating UI overlay for deployment previews&lt;/strong&gt; makes it easy for your reviewers to leave great feedback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Third-party integrations with all your favorite tools&lt;/strong&gt; like &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt;, &lt;a href=&quot;http://Monday.com&quot;&gt;Monday.com&lt;/a&gt;, &lt;a href=&quot;https://trello.com/&quot;&gt;Trello&lt;/a&gt;, and &lt;a href=&quot;https://clubhouse.io/&quot;&gt;Clubhouse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stay logged in to the web app you’re testing&lt;/strong&gt; while you jump from deployment preview to deployment preview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Get your reviewers’ browser metadata automatically&lt;/strong&gt; when they comment on a screenshot or animation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy edit mode&lt;/strong&gt; makes it easy to try out text copy edits on the fly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/c309dfb61778fd2852f88e18dad6ed3b/copyedit.gif&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easily measure distance between elements&lt;/strong&gt;, take screenshots of bugs, record animations, and more&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/3f4813a9f8f6bbbe59a322dabd656dfc/responsive.gif&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;-get-started-with-featurepeek-teams-today&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-get-started-with-featurepeek-teams-today&quot; aria-label=&quot; get started with featurepeek teams today permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;✅ Get Started with FeaturePeek Teams Today&lt;/h2&gt;
&lt;p&gt;It’s easy to &lt;a href=&quot;https://featurepeek.com/how-it-works&quot;&gt;get started with FeaturePeek Teams.&lt;/a&gt; Developers can &lt;a href=&quot;https://featurepeek.com/how-it-works&quot;&gt;try out FeaturePeek teams for free&lt;/a&gt;, and &lt;a href=&quot;https://featurepeek.com/pricing&quot;&gt;pricing for FeaturePeek Teams can be found here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;FeaturePeek teams is ideal for teams of all sizes, so no collaboration challenge is too big or too small. Learn more at &lt;a href=&quot;https://featurepeek.com&quot;&gt;featurepeek.com&lt;/a&gt; and follow us on social media &lt;a href=&quot;https://twitter.com/featurepeek&quot;&gt;@featurepeek.&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The WFH edition. Our ultimate remote working stack for frontend devs]]></title><description><![CDATA[Let’s be honest, frontend developers kinda had this remote working thing figured out before our latest post apocalyptic reality. Now, it’s…]]></description><link>https://featurepeek.com/the-wfh-edition-our-ultimate-remote-working-stack-for-frontend-developers/</link><guid isPermaLink="false">https://featurepeek.com/the-wfh-edition-our-ultimate-remote-working-stack-for-frontend-developers/</guid><pubDate>Wed, 09 Sep 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Let’s be honest, frontend developers kinda had this remote working thing figured out before our latest post apocalyptic reality. Now, it’s still been difficult for us all to adjust. But if there were any demographic that already had the know-how and the tools to stay productive while collaborating remotely, frontend teams had it covered.&lt;/p&gt;
&lt;p&gt;The challenge, most of the time, is just sorting through the overlapping options and developer-targeted Google Search ads to get to the tools that actually make your workflow easier.&lt;/p&gt;
&lt;p&gt;Don’t worry. &lt;a href=&quot;https://featurepeek.com/blog/the-8-best-tools-for-code-review-in-2020/&quot;&gt;At FeaturePeek, we’re devtool nuts&lt;/a&gt;. And we try out just about everything we discover. Along the way, we’ve earmarked our favorites and fully incorporated many into our regular internal workflows.&lt;/p&gt;
&lt;p&gt;You could try out everything by yourself. Or you can learn from what our team figured out. But before we jump into our favorite little-known remote working tools, let’s start by covering the basics.&lt;/p&gt;
&lt;h2 id=&quot;remote-working-essentials&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#remote-working-essentials&quot; aria-label=&quot;remote working essentials permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Remote Working Essentials&lt;/h2&gt;
&lt;p&gt;These are the fundamental tools every remote worker needs. Most development teams will already be using these in their day-to-day efforts, but if you skip over these fundamental tips and tricks, you’ll struggle to make the most of the other tools we mention in this article.&lt;/p&gt;
&lt;h3 id=&quot;the-basics-team-chat-tools&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#the-basics-team-chat-tools&quot; aria-label=&quot;the basics team chat tools permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;The Basics: Team Chat Tools&lt;/h3&gt;
&lt;p&gt;Email isn’t exactly dead, but it’s no longer the standard for asynchronous communications. Development teams have used text chat to collaborate since the internet was invented. So if you aren’t using a communication tool like Slack already, adopting one should be your first step towards productive remote working as a development team.&lt;/p&gt;
&lt;p&gt;Are there other chat alternatives? Sure. But we haven’t found any we like better than Slack yet.&lt;/p&gt;
&lt;p&gt;Here are the key features of &lt;a href=&quot;https://slack.com/&quot;&gt;Slack&lt;/a&gt; that make it work for developer teams:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Channel Messaging:&lt;/strong&gt; You can create unlimited channels dedicated to tasks, projects, issues, or initiatives. For example, you could make a #webbugs channel to triage issues in your web app or a #marketingsite channel to discuss a website update. By working in a channel, you can be sure that all the right people see the right messages at the right time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Searchable Knowledge:&lt;/strong&gt; Slack is a single place where you can find conversations and files related to your work. Never again lose an email attachment in a crowded email inbox.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrations:&lt;/strong&gt; Bring all the activity you care about into Slack so you never miss a thing. For example, a new Jira ticket could trigger a chat message or a new pull request to notify the right people to review it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-basics-version-control&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#the-basics-version-control&quot; aria-label=&quot;the basics version control permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;The Basics: Version Control&lt;/h3&gt;
&lt;p&gt;It doesn’t matter whether you’re working remotely or not. Version control is a critical part of modern software development, for both remote and co-located teams. Whether you use &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt;, &lt;a href=&quot;https://gitlab.com/&quot;&gt;GitLab&lt;/a&gt;, &lt;a href=&quot;https://bitbucket.org/product&quot;&gt;Bitbucket&lt;/a&gt;, you’ve likely already adopted one that makes sense for your team.&lt;/p&gt;
&lt;p&gt;Regardless of the platform you choose, the benefits are the same:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Collaboration:&lt;/strong&gt; Without version control in place, you are probably working in a shared directory and hoping your colleagues don’t modify the files you are working on. Eventually, someone will save over your changes and you’ll lose your work. With version control, you can work on any file without disrupting your colleagues. If there is a conflict, your version control system will let you merge these files later.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File History:&lt;/strong&gt; Without version control, keeping a file history is almost impossible. With version control, changes to files are automatically tracked along with a commit message (a brief description of what has changed) and you can view the history of a file whenever you like. This makes it easy to see how files have evolved and what might have caused that annoying bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;the-basics-video-conferencing&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#the-basics-video-conferencing&quot; aria-label=&quot;the basics video conferencing permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;The Basics: Video Conferencing&lt;/h3&gt;
&lt;p&gt;I, for one, welcome our new &lt;a href=&quot;https://zoom.us/&quot;&gt;Zoom&lt;/a&gt; overlords. Video conferencing is inescapable in the new shelter-in-place environment. And while we’ve all suffered from Zoom fatigue at points this year, sometimes you just need to discuss a bug or issue face-to-face.&lt;/p&gt;
&lt;p&gt;At &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt;, we actually find ourselves using a few different video conferencing solutions. But if you need one platform to rule them all, Zoom is easy to use and includes features that are essential for development meetings, including screen sharing, annotations, and support for whiteboarding sessions on select plans.&lt;/p&gt;
&lt;p&gt;Other solutions are available, including &lt;a href=&quot;https://www.webex.com/&quot;&gt;Cisco Webex&lt;/a&gt;, &lt;a href=&quot;https://meet.jit.si/&quot;&gt;Jitsi Meet&lt;/a&gt;, &lt;a href=&quot;https://chat.google.com/&quot;&gt;Google Chat&lt;/a&gt;, and &lt;a href=&quot;https://whereby.com/&quot;&gt;Whereby&lt;/a&gt;. If you pay for the Standard, Plus, or Enterprise version of Slack, you get video call capabilities, too.&lt;/p&gt;
&lt;h2 id=&quot;little-known-remote-working-tools&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#little-known-remote-working-tools&quot; aria-label=&quot;little known remote working tools permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Little-Known Remote Working Tools&lt;/h2&gt;
&lt;p&gt;With the basics in place, you’ll be able to chat with your team and keep track of development work. Now, let’s level up your remote working productivity so you don’t skip a beat while skipping the office commute.&lt;/p&gt;
&lt;h3 id=&quot;miro-online-whiteboard&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#miro-online-whiteboard&quot; aria-label=&quot;miro online whiteboard permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Miro: Online Whiteboard&lt;/h3&gt;
&lt;p&gt;If you’ve ever found yourself wishing that your development team could just meet for an in-person whiteboard session, &lt;a href=&quot;https://miro.com/&quot;&gt;Miro&lt;/a&gt; is the next best thing.&lt;/p&gt;
&lt;p&gt;By being physically present and taking turns to write or move ideas around, it’s easy to plan, share complicated ideas, and leave key information on display, such as project timelines or key tasks to be completed.&lt;/p&gt;
&lt;p&gt;Miro brings that whiteboard online and enables remote teams to collaborate in real-time in a free-flowing and creative way — just like a real-world whiteboard.&lt;/p&gt;
&lt;p&gt;Miro also doesn’t just try and replicate the meatspace whiteboard experience. They explored what being a digital whiteboard can enable, and it actually has some key advantages over a real whiteboard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Infinite Canvas:&lt;/strong&gt; There are no limits to the size of the Miro whiteboard. Create a single whiteboard for every project in your company, all reviewable from one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add Files:&lt;/strong&gt; You can add files from Google Docs to the whiteboard, which will be automatically updated and synced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collaboration:&lt;/strong&gt; All team members can make changes simultaneously from wherever they are in the world.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;loom-video-messaging&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#loom-video-messaging&quot; aria-label=&quot;loom video messaging permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Loom: Video Messaging&lt;/h3&gt;
&lt;p&gt;At FeaturePeek, we use &lt;a href=&quot;https://www.loom.com/&quot;&gt;Loom&lt;/a&gt; for all kinds of our video needs. Instead of writing a long email or Slack message to explain that annoying bug, try using Loom to record a quick video instead.&lt;/p&gt;
&lt;p&gt;We also use Loom to generate quick and dirty developer how-to videos to share later as an .MP4. Unlike normal screen recordings, Loom captures your screen, microphone, and face at the same time. This encourages users to explain their thoughts as they record; perfect for highlighting bugs or creating demos to be circulated within your team.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.loom.com/hc/en-us/articles/360002799977-Is-there-a-Loom-mobile-app-&quot;&gt;Loom recently launched for iOS&lt;/a&gt;, enabling app developers to record and share issues quickly.&lt;/p&gt;
&lt;h3 id=&quot;featurepeek-deployment-previews&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#featurepeek-deployment-previews&quot; aria-label=&quot;featurepeek deployment previews permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;FeaturePeek: Deployment Previews&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.674897119341566%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAAsSAAALEgHS3X78AAACYklEQVQozx2S60/TYBTG+y+CDrZe1q5dy9ZtwiDDsIgSQ/aBRALqGGwwRI361ZiYmPDNYAQBERRD1DF26bru2svb+1bfkTw5OTnJ73nec/IiFaEq9eVWpy+1e2Krq2jA84ae52Vzm2N3JwiKxoLkrSiUIG8VHAkPBvAgUm60a1JPAVZPsxQVGLrTaqiWZeW2ipMYxUYTNMczUzEmEoc9EeLGff4AhmME4fOjyHUdRqpdWYW11ZVN05YVwx16+Z1diIXYCE4xkxgZic9kVlb5xExseha6YORoiJQFqaeaqgY6staRgWXbfWAa9jC/XSRphmajFDOFEiFolJxPR2JxLsqT4SmS5kbwTV0EQO/0VaEhyYrqOK5pmpbtZnP5Oz4MMiSf8MEcNBimOegRosIETvmD4bFJHLmuiZDsqbrR6RqaPhgObduFzy4U87MLXDLOLqLUQ0jGpomlDJpa8Cc53wybvsckOBIpVRsjWFYVw4E7W7bjDgfuwNt7WXywfC89x2eCbIag4nP3uSfr9NIy+2iOWkyszPMpnoHJzb6ia8D4J/TKdUkDAJ4aJj/PFcZ9BMXGMC4KBTfHAsTEBIpjIZyOBFLpcTyElGqiohkwvC33FU3XdUsH1mDgffy0v/p0I7u1A11G2txe3yisZbfWnuXWtnez7z+kFpdGsG5YCoDFMS1X1OSq2q2rXUHqlGviTV26qTdhc10VK4JUEZqwluBIbO+9fodUGk14XQ3ojuvCr/Xicj/5ufD429uff/4efD0+Pb/8fvH7y9HpweHJj19Xx2cXhydnR6fnV6XK7qs3/wGDEL+dOASJyAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;File tickets to third-party integrations like GitHub Issues, Trello, and Clubhouse&quot;
        title=&quot;File tickets to third-party integrations like GitHub Issues, Trello, and Clubhouse&quot;
        src=&quot;/static/40aaac9740ae42bfc01fe89670d9ba78/e1e83/drawer-tickets.png&quot;
        srcset=&quot;/static/40aaac9740ae42bfc01fe89670d9ba78/00a32/drawer-tickets.png 148w,
/static/40aaac9740ae42bfc01fe89670d9ba78/abe81/drawer-tickets.png 295w,
/static/40aaac9740ae42bfc01fe89670d9ba78/e1e83/drawer-tickets.png 590w,
/static/40aaac9740ae42bfc01fe89670d9ba78/702f0/drawer-tickets.png 885w,
/static/40aaac9740ae42bfc01fe89670d9ba78/48347/drawer-tickets.png 1180w,
/static/40aaac9740ae42bfc01fe89670d9ba78/3ab32/drawer-tickets.png 1215w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;
&lt;em&gt;The FeaturePeek UI overlay makes it easy to file tickets to third-party apps like GitHub Issues, Trello, and Clubhouse.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sure, we’re biased in recommending &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt;. But the benefits of on-demand staging environments are huge for remote development teams: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quicker Design Feedback:&lt;/strong&gt; Get feedback from designers by just sending them a link. No need to manually deploy or help the designer set up a local environment. When they do give feedback, FeaturePeek automatically records the URL they are on and their browser metadata, making it easier to resolve issues.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review Others Work:&lt;/strong&gt; Switching to a colleague’s branch to review their work takes time. With FeaturePeek, every branch is a dedicated environment, instantly available for your review. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quality Assurance:&lt;/strong&gt; “Well it works on my machine” is a thing of the past. Get an instant preview of how your branch will work on any server.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Want to see how this could work for your team? Our entire website is open source on GitHub, so you can take a peek at the preview environments that deploy on &lt;a href=&quot;https://github.com/featurepeek/marketing-website/pulls&quot;&gt;our open pull requests.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;headspace-meditation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#headspace-meditation&quot; aria-label=&quot;headspace meditation permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Headspace: Meditation&lt;/h3&gt;
&lt;p&gt;Being productive isn’t just about tooling and apps. Being productive is also a state of mind. &lt;/p&gt;
&lt;p&gt;Sometimes a project &lt;a href=&quot;https://www.youtube.com/watch?v=sT2daisxdvA&quot;&gt;requires you to hype up&lt;/a&gt;. But more often than not, these days you’re probably having trouble winding down.&lt;/p&gt;
&lt;p&gt;Research shows that mindfulness can help improve mental health. And according to a &lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pubmed/32252750&quot;&gt;2020 study&lt;/a&gt;, meditation reduces stress and improves cognition. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.headspace.com/&quot;&gt;Headspace&lt;/a&gt; is an app that aims to make meditation accessible to everyone. Taking a few moments to re-calibrate can help when development work becomes overwhelming or deadlines start to cause stress.&lt;/p&gt;
&lt;h3 id=&quot;when-to-chat-timezone-sync&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#when-to-chat-timezone-sync&quot; aria-label=&quot;when to chat timezone sync permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;When To Chat: Timezone Sync&lt;/h3&gt;
&lt;p&gt;If your team is distributed around the world, it can be impossible to figure out a mutually convenient time to meet.&lt;/p&gt;
&lt;p&gt;With &lt;a href=&quot;https://whentochat.co/&quot;&gt;When To Chat&lt;/a&gt;, you enter your timezone, the timezone of the person you are meeting with, and your availability. It’ll automatically suggest a range of times instantly. &lt;/p&gt;
&lt;p&gt;If you use Slack, you can &lt;a href=&quot;https://slack.whentochat.co/&quot;&gt;add it to your workplace here&lt;/a&gt;. Then, just type /whentochat, then @ your colleagues.  For example: /whentochat @gary @tom “Dev Meeting”&lt;/p&gt;
&lt;h2 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn More&lt;/h2&gt;
&lt;p&gt;Let us know how your remote team stays productive by sharing with us on &lt;a href=&quot;https://www.twitter.com/featurepeek&quot;&gt;Twitter&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/company/featurepeek/&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;FeaturePeek provides collaborative frontend staging environments on-demand, so you can collect implementation feedback sooner. FeaturePeek works with all frameworks and hosting providers, so you can keep your tools and you’re never locked in.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;Learn more about FeaturePeek Teams&lt;/a&gt;, our collaborative tool that supercharges deployment previews for development teams.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The 8 part guide to better code review checklists]]></title><description><![CDATA[Of all the productivity tools available to UI/UX developers today, few are as ubiquitous and effective as the humble checklist. In “The…]]></description><link>https://featurepeek.com/the-8-part-guide-to-better-code-review-checklists/</link><guid isPermaLink="false">https://featurepeek.com/the-8-part-guide-to-better-code-review-checklists/</guid><pubDate>Wed, 02 Sep 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Of all the productivity tools available to UI/UX developers today, few are as ubiquitous and effective as the humble checklist.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://www.amazon.com/Checklist-Manifesto-How-Things-Right/dp/0312430000&quot;&gt;“The Checklist Manifesto”&lt;/a&gt;, Atul Gawande explains that simple checklists can transform the way we work. In his book, Gawande was trying to find a way that doctors, surgeons, and nurses could deliver better, more consistent outcomes when working in an operating room - a literal life-or-death situation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“We have accumulated stupendous know-how,”&lt;/em&gt; Gawande writes in his book. &lt;em&gt;“We have put it in the hands of some of the most highly trained, highly skilled, and hardworking people in our society. And, with it, they have indeed accomplished extraordinary things. Nonetheless, that know-how is often unmanageable.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Although software development isn’t exactly a life-or-death endeavor, we can apply the same lessons by using the power of checklists to priorize effectively when collaborating.&lt;/p&gt;
&lt;h2 id=&quot;what-is-a-code-review&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-is-a-code-review&quot; aria-label=&quot;what is a code review permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What is a code review?&lt;/h2&gt;
&lt;p&gt;When a software developer on a team wants to contribute code they’ve worked on back into the main project, they need to do a ‘pull request’ or ‘merge request’. It’s the main way developers contribute to software projects, but &lt;a href=&quot;https://featurepeek.com/blog/why-are-so-many-orgs-slow-to-approve-pull-requests/&quot;&gt;sometimes getting pull requests approved can be agonizingly slow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before this code can be added to the project, other team members will do a code review. This means checking for bugs, issues and suggesting improvements.&lt;/p&gt;
&lt;h2 id=&quot;why-make-a-code-review-checklist&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#why-make-a-code-review-checklist&quot; aria-label=&quot;why make a code review checklist permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Why make a code review checklist?&lt;/h2&gt;
&lt;p&gt;Generally speaking, code reviews are great. They radically improve code quality, increase developer productivity and prevent bugs from ever reaching customers.&lt;/p&gt;
&lt;p&gt;But without a good process, code reviews can be, in a word…painful.&lt;/p&gt;
&lt;p&gt;Code review checklists help ensure productive code reviews. A code review checklist prevents simple mistakes, verifies work has been done and helps improve developer performance.&lt;/p&gt;
&lt;h2 id=&quot;1-pull-request-etiquette-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-pull-request-etiquette-&quot; aria-label=&quot;1 pull request etiquette  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Pull Request Etiquette ✅&lt;/h2&gt;
&lt;p&gt;Start with the basics. Is the pull request you are looking at &lt;em&gt;actually&lt;/em&gt; ready for review? To determine this, here are some key principles that should apply to all code reviews:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Frequent&lt;/strong&gt; — To make pull requests more manageable, submit them little and often. If a pull request covers multiple days with no good reason, it should be split into smaller chunks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bitesize&lt;/strong&gt; — If a pull request is too large, it’s difficult to understand. It should be broken down as much as possible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Well documented&lt;/strong&gt; — Does the pull request have enough comments to make it easy to review?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Follows the Single Responsibility Principle&lt;/strong&gt; — Code should only ever solve one problem. If a piece of code affects a lot of the rest of the code in the project, it’s difficult to review.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If these conditions are not met, return the code to the contributor to be improved or separated into different pull requests.&lt;/p&gt;
&lt;p&gt;This might seem initially harsh or counter-productive, but over several weeks your team’s outputs and productivity will improve.&lt;/p&gt;
&lt;h2 id=&quot;2-styling-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-styling-&quot; aria-label=&quot;2 styling  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. Styling 🎨&lt;/h2&gt;
&lt;p&gt;Set some basic styling rules for your team and ensure these are followed. Consistent code styling is essential to ensure future developers can understand code easily and work productively.&lt;/p&gt;
&lt;p&gt;Some basic rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are variable names sensible and consistently capitalized?&lt;/li&gt;
&lt;li&gt;Are there sufficiently descriptive comments throughout the code as required?&lt;/li&gt;
&lt;li&gt;Are formatting preferences followed? For example, tabs or spaces, curly brace on the same line or new line, 80 character width or 120 character width?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To save time, you could check these rules are followed with an automatic code linter. &lt;a href=&quot;https://prettier.io/&quot;&gt;Prettier&lt;/a&gt; is a good example for JavaScript projects.&lt;/p&gt;
&lt;p&gt;Again, if these standards are not met, stop checking the code and return it to the contributor for review.&lt;/p&gt;
&lt;h2 id=&quot;3-security-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-security-&quot; aria-label=&quot;3 security  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Security 🔐&lt;/h2&gt;
&lt;p&gt;Set security standards for your project and check these are being followed religiously. The rules to be checked will vary depending on your project and organization, but some best practices are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run your project through vulnerability scanning solutions, like &lt;a href=&quot;https://lgtm.com/&quot;&gt;LGTM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Don’t hardcode credentials for testing or include secrets in the repository&lt;/li&gt;
&lt;li&gt;Don’t disclose too much information in error messages, which might give hints to an attacker&lt;/li&gt;
&lt;li&gt;Ensure any database queries are parameterized&lt;/li&gt;
&lt;li&gt;Don’t trust user or client input blindly — your client or web application can be modified. For example, URL parameters that access resources should be checked.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you identify security issues in a code review process, stop and speak to the contributor. It might be a sign of a more serious issue in the project or a lack of training, both of which will need follow on interventions.&lt;/p&gt;
&lt;h2 id=&quot;4-performance-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-performance-&quot; aria-label=&quot;4 performance  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. Performance 🏎&lt;/h2&gt;
&lt;p&gt;Is the project as performant as it could be, or are these obvious optimizations that might improve performance?&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Can any of the code be substituted with a more performant library or a language native function?&lt;/li&gt;
&lt;li&gt;Is there any debug or logging code that could be removed?&lt;/li&gt;
&lt;li&gt;Is caching being used if applicable?&lt;/li&gt;
&lt;li&gt;Are images and assets appropriately compressed?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a myriad of tools that can help you optimize the web performance of your project. Good places to start are &lt;a href=&quot;https://developers.google.com/web/tools/lighthouse&quot;&gt;Chrome Lighthouse&lt;/a&gt; (also called &lt;a href=&quot;https://developers.google.com/speed/pagespeed/insights/&quot;&gt;PageSpeed Insights&lt;/a&gt;) and &lt;a href=&quot;https://www.debugbear.com/&quot;&gt;DebugBear&lt;/a&gt; for frontend projects.&lt;/p&gt;
&lt;h2 id=&quot;5-testing-🧪&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5-testing-%F0%9F%A7%AA&quot; aria-label=&quot;5 testing 🧪 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5. Testing 🧪&lt;/h2&gt;
&lt;p&gt;Tests automatically check that code does what it should, making them a key part of the code review process.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Firstly, check that tests are present and well documented for all common functionality. If some functionality isn’t covered by testing, it should be well documented why this is the case.&lt;/li&gt;
&lt;li&gt;Secondly, make sure that tests are well isolated, so you can find the problem quickly if a test fails.&lt;/li&gt;
&lt;li&gt;Finally, do the tests test the code? Often, they claim they do, but don’t actually assess the intended functionality of the application.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://jestjs.io/&quot;&gt;Jest&lt;/a&gt; is a good option if you’re looking into automated unit testing. For automated end-to-end tests, check out &lt;a href=&quot;https://www.cypress.io/&quot;&gt;Cypress&lt;/a&gt; and &lt;a href=&quot;https://reflect.run/&quot;&gt;Reflect&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;However, always remember that not all tests are bullet-proof and shouldn’t be relied on completely, as the next checklist item proves…&lt;/p&gt;
&lt;h2 id=&quot;6-does-it-actually-work-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6-does-it-actually-work-&quot; aria-label=&quot;6 does it actually work  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6. Does it actually work? 💩&lt;/h2&gt;
&lt;p&gt;It seems simple enough, but we’ve all made this assumption before.&lt;/p&gt;
&lt;p&gt;If you are on an agile sprint team, the code should always be checked against the acceptance criteria provided by your Product Manager or Product Owner. If acceptance criteria are not met, ask the contributing developer why.&lt;/p&gt;
&lt;p&gt;Another common issue is that code works locally but not in production. All code being reviewed should be deployed to a staging environment that is consistent with your production environment. This prevents environment specific issues.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt; users don’t have to worry about inconsistencies between staging and production environments. That’s because FeaturePeek automatically deploys your branches into a dedicated environment every time a pull request is opened. This allows the reviewer to see the changes instantly and share this with designers, managers and other non-technical stakeholders for further feedback.&lt;/p&gt;
&lt;h2 id=&quot;7-positive-code-review-culture-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#7-positive-code-review-culture-&quot; aria-label=&quot;7 positive code review culture  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;7. Positive code review culture 😻&lt;/h2&gt;
&lt;p&gt;Before you send your code review feedback or sit down for a meeting, check that your comments will help your team to improve rather than be seen as criticism.&lt;/p&gt;
&lt;p&gt;Code reviews are one of the most regularly occurring interactions you have with the rest of your team. Take the time to ensure you’ve framed code review feedback in a positive way, so that you’re contributing to a positive, collaborative code review culture over time.&lt;/p&gt;
&lt;p&gt;It can help to reframe critical feedback as constructive statements. For example, if the code is missing test coverage, suggest “could more test coverage benefit us here?” to test and challenge the understanding of your team members.&lt;/p&gt;
&lt;h2 id=&quot;8-review-the-checklist-constantly-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#8-review-the-checklist-constantly-&quot; aria-label=&quot;8 review the checklist constantly  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;8. Review the checklist constantly 🤔&lt;/h2&gt;
&lt;p&gt;Your checklist is only good if it’s up to date. That’s why it’s important to continually review your checklist and ensure it meets your needs.&lt;/p&gt;
&lt;p&gt;Your code review needs will change over time as new team members join or your project gains new requirements. For example, if you added new tooling to your CI process, this should be included.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt; gives reviewers a floating UI overlay for your deployments, making it easy for your them to leave great feedback. This way, you get feedback from reviewers sooner and keep your code review checklist up to date with the latest requirements.&lt;/p&gt;
&lt;h2 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn More&lt;/h2&gt;
&lt;p&gt;Checklists are just one of the many tools UI/UX developers use to keep productive. Let us know how your team stays productive by sharing with us on &lt;a href=&quot;https://www.twitter.com/featurepeek&quot;&gt;Twitter&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/company/featurepeek/&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;FeaturePeek provides collaborative frontend staging environments on-demand, so you can collect implementation feedback sooner. FeaturePeek works with all frameworks and hosting providers, so you can keep your tools and you’re never locked in.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;Learn more about FeaturePeek Teams&lt;/a&gt;, our collaborative tool that supercharges deployment previews for development teams.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[7 tips for webdev agencies to build better client relationships]]></title><description><![CDATA[New business rarely walks through the door unannounced. Instead, new business is won in the weeks spent preparing, pitching, and planning…]]></description><link>https://featurepeek.com/7-tips-for-webdev-agencies-to-build-better-client-relationships/</link><guid isPermaLink="false">https://featurepeek.com/7-tips-for-webdev-agencies-to-build-better-client-relationships/</guid><pubDate>Tue, 25 Aug 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;New business rarely walks through the door unannounced.&lt;/p&gt;
&lt;p&gt;Instead, new business is won in the weeks spent preparing, pitching, and planning for a project, long before you write a single line of code. &lt;/p&gt;
&lt;p&gt;But that doesn’t mean you’re off the hook once a client signs. While planning and design phases are important to ensuring project success, it’s the handoff experience of staging, deployment, and pull request or PR reviews that ultimately determine the client’s experience with your agency.&lt;/p&gt;
&lt;p&gt;This has led some agencies to assemble bespoke deployment preview solutions in-house. For example, developer Conor Davidson (&lt;a href=&quot;https://github.com/conordavidson&quot;&gt;@conordavidson&lt;/a&gt;) explains that the team at &lt;a href=&quot;https://www.sanctuary.computer/&quot;&gt;Sanctuary Computer&lt;/a&gt; “built something like &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; for our company. Easily previewing PRs has become an essential part of our workflow. [But] we switched over to FeaturePeak from our own software and are not looking back. Y’all built exactly what we wanted, plus more.”&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.78124999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACPklEQVQoz12SS2sTURiGg/4A6xWMrqugFbHqwo1uXIn4B6QVXIgIUjVitAXBX+DGpVZBadJkzKWZJJM21zaIFEFRm1oogtJgk8xkksnkMpPO63eOnTQx8HLOmcx55vnO+Rwry8soymWomo5utwvTZDFhWRY6hgEp9xHR9AeeoJSFX0wiEM9QsvCG4vAEIxBiWQjRNAL0v+O5X4QsK1CqKqrVOkpVDSW1iXbbQK3WwFtBxLQnCG84gUgyj7mFJT7a86CU681ZHOfvTGGjWIRKMK3ZQdvYgv0zTYsDX3vDHGhvCs8v9iC+bWP7Q45Lt9z49OUrXO7HeER5MjlFoxsPXA/xcvoNf9kTkjA7N8+hHsoMrX2RhW3DLEKJ3A7w8t2nEGMShvbtx4GDh+A8chR7hvbCsWs3rly9hjC9LERTPbt+y/7y7Tgu3p5EMpXB8PAxHD9xEiNnRjFy6jQOO524PjbOgWzz/+k/RzsceO7GffzZLGOl8APfCmv4/H0VhdU1rK//xK/fG/CT3btAjJfMTNlaiKUHDAeAo2MTKFdkNLQG9FYHrbZJ7fPvYpq09tJGDwG8BGRQdnbsLFn77Ny6bUnAs+MTKCl1bMp1yDUdVa2FitpAWdHoWQ1+doYEFAjADO0M2uUh0lxMccN7UHUDhrkFo2vBpLDRIkNF68BHfcZag9kxK3arLHbJDMbAgcQS/HHqwws3XaiQmdY0oFO5Rhd8rOkdKPSclTgTjHOr92TaHxsoZfJ4MbuIZ69y+AsM+LogfbGPmAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;FeaturePeek drawer shows a timeline of comments, views, and more&quot;
        title=&quot;FeaturePeek drawer shows a timeline of comments, views, and more&quot;
        src=&quot;/static/596eadbd062c5a031ddf052662a7ad76/e1e83/drawer-timeline.png&quot;
        srcset=&quot;/static/596eadbd062c5a031ddf052662a7ad76/00a32/drawer-timeline.png 148w,
/static/596eadbd062c5a031ddf052662a7ad76/abe81/drawer-timeline.png 295w,
/static/596eadbd062c5a031ddf052662a7ad76/e1e83/drawer-timeline.png 590w,
/static/596eadbd062c5a031ddf052662a7ad76/702f0/drawer-timeline.png 885w,
/static/596eadbd062c5a031ddf052662a7ad76/48347/drawer-timeline.png 1180w,
/static/596eadbd062c5a031ddf052662a7ad76/244a1/drawer-timeline.png 2560w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Whether you’re determined to build in-house, or you’re interested in a complete solution like &lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;FeaturePeek Teams&lt;/a&gt;, it’s critical to establish a frontend staging and deployment workflow that simplifies collaboration with your clients and builds the trust and confidence that leads to repeat business. &lt;/p&gt;
&lt;p&gt;Here are 7 more tips to help keep your webdev agency clients happy:&lt;/p&gt;
&lt;h1 id=&quot;establish-clear-expectations-early&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#establish-clear-expectations-early&quot; aria-label=&quot;establish clear expectations early permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Establish clear expectations early&lt;/h1&gt;
&lt;p&gt;Let’s say you’ve been introduced, referred, or otherwise connected to a new client. They explain their problem and it looks like your agency can help.&lt;/p&gt;
&lt;p&gt;Before you jump into the project, start by laying the foundations for an effective client-agency relationship by aligning expectations from day one. This is also incredibly useful when working with existing or past clients, who may be trying a new style of project with you or working to a different time frame.&lt;/p&gt;
&lt;p&gt;Think about onboarding new clients by &lt;strong&gt;creating an ‘instruction manual’ for working with your agency.&lt;/strong&gt; In other words, a how-to guide for collaborating effectively with your team. It should detail how you like to work, your expectations from clients, preferred handoff tools, your strengths, and even your weaknesses.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Here are some helpful questions to answer in your instruction manual:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who will be responsible for communicating with the client?&lt;/li&gt;
&lt;li&gt;How will communication be managed and recorded? Do you prefer email, telephone, or dedicated project management software?&lt;/li&gt;
&lt;li&gt;How do you share progress with your client?&lt;/li&gt;
&lt;li&gt;How do you expect feedback to be sent?&lt;/li&gt;
&lt;li&gt;How does your billing process work? If you charge hourly, how is work evidenced? &lt;/li&gt;
&lt;li&gt;How is development managed and planned? Are you waterfall, agile, or something else? How does this benefit the client?&lt;/li&gt;
&lt;li&gt;Any other frequently asked questions about your working practices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;know-your-audience&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#know-your-audience&quot; aria-label=&quot;know your audience permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Know your audience&lt;/h1&gt;
&lt;p&gt;Webdev agencies do complicated work and so sometimes development teams need to use technical terms to describe what is going on. But not all clients are created equal when it comes to technical competency.&lt;/p&gt;
&lt;p&gt;It’s important to know whether you’re covering something technical with a grizzled app veteran or an untested software project neophyte. Especially for less technically-savvy clients, you should avoid unnecessary jargon wherever you can — remember your audience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you must use a technical term or concept, define it immediately afterward or give a helpful analogy by relating it to something your client already knows.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Switching to plain English, from industry-specific buzzwords and tech speak, will improve your client relationships because your contact:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Will understand what is going on and be able to give constructive feedback&lt;/li&gt;
&lt;li&gt;Will be fully informed and therefore trust you&lt;/li&gt;
&lt;li&gt;Will have confidence in your abilities&lt;/li&gt;
&lt;li&gt;… and will have the language to &lt;em&gt;promote&lt;/em&gt; those abilities within their professional circle.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;be-proactive-and-transparent&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#be-proactive-and-transparent&quot; aria-label=&quot;be proactive and transparent permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Be proactive and transparent&lt;/h1&gt;
&lt;p&gt;In a bad client-agency relationship, your client is constantly chasing you for updates on progress and waiting days for a reply. In a great client-agency relationship, the agency is proactive. This means frequently reaching out to your clients and keeping them updated on progress or issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On-demand staging environments like &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; simplify the collaboration process between webdev agencies and their clients.&lt;/strong&gt; With FeaturePeek, a floating UI overlays your deployment previews, making it easy for your reviewers to leave great feedback. Christine Kim (&lt;a href=&quot;https://github.com/chrismekim&quot;&gt;@chrismekim&lt;/a&gt;), another developer at Sanctuary Computer, describes “we’re a team of design-oriented developers, and FeaturePeek has been an incredible tool for collaborating with designers throughout the development process. Designers can easily click on a FeaturePeek link, follow the progress of a project, and catch quality issues early on.”&lt;/p&gt;
&lt;h1 id=&quot;trust-your-process&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#trust-your-process&quot; aria-label=&quot;trust your process permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Trust your process&lt;/h1&gt;
&lt;p&gt;Your internal dev team has already established a process and culture to help your agency execute efficiently. Agencies are fast-paced, and must work on multiple projects and support several clients in parallel. So it’s no surprise that many have developed core competency in building effective internal work processes, in addition to their design and development capabilities.&lt;/p&gt;
&lt;p&gt;That’s why it’s so important to spend time educating your client on how your team works. &lt;strong&gt;Every client has different needs, but being transparent about your internal work processes can help your clients engage more effectively with your team. You’re the experts!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Whatever your process, it’s important to reinforce agency-to-client collaboration by trusting your internal collaborative process. By continuously iterating and communicating with your clients, as you do with your own teams, you help ensure the best possible project outcome.&lt;/p&gt;
&lt;h1 id=&quot;get-client-feedback-early&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#get-client-feedback-early&quot; aria-label=&quot;get client feedback early permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Get client feedback early&lt;/h1&gt;
&lt;p&gt;Web development projects are often long and complicated, but with careful planning, you can deliver consistent value throughout the process. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rather than waiting until the end of the project for a big reveal, break the project down into stages — delivering value in each.&lt;/strong&gt; This way, not only does the client feel supported step-by-step, they’ve also got ample opportunity to feed back in an iterative way. &lt;/p&gt;
&lt;p&gt;One way to ensure client feedback throughout the project lifecycle is to provide on-demand staging environments that make it easy for clients to share feedback early and often. &lt;/p&gt;
&lt;p&gt;Feedback delivered late is difficult (and frustrating!) to respond to. While timely feedback keeps everyone aligned, satisfied, and motivated to get the job done.&lt;/p&gt;
&lt;h1 id=&quot;get-business-and-development-aligned&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#get-business-and-development-aligned&quot; aria-label=&quot;get business and development aligned permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Get business and development aligned&lt;/h1&gt;
&lt;p&gt;For many agencies, the individual or team that &lt;em&gt;won&lt;/em&gt; the project, and the individual or team who &lt;em&gt;manages&lt;/em&gt; the client, is often &lt;em&gt;entirely separate&lt;/em&gt; from the development team. And this can be a recipe for disaster when it comes to happy client relationships.&lt;/p&gt;
&lt;p&gt;Especially as everybody is &lt;a href=&quot;https://featurepeek.com/blog/how-to-make-your-team-still-feel-like-a-team-while-being-remote/&quot;&gt;managing remote and distributed teams in the middle of a global pandemic&lt;/a&gt;, more than ever teams are relying on collaboration tools to keep business and development efforts aligned. &lt;strong&gt;Having a single tool for visual QA that is accessible to both dev teams and non-technical users can help to keep everyone on the same page.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For Sanctuary Computer developer Kay Mok (&lt;a href=&quot;https://github.com/mokaymokay&quot;&gt;@mokaymokay&lt;/a&gt;), this keeps their code reviews focused. She shares that “FeaturePeek offers a simple and convenient solution that supplements our code review process and makes visual QA much faster and easier.”&lt;/p&gt;
&lt;h1 id=&quot;keep-it-simple&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#keep-it-simple&quot; aria-label=&quot;keep it simple permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Keep it simple&lt;/h1&gt;
&lt;p&gt;There’s a reason why product teams are so focused on the Minimum Viable Product, or MVP. That’s because &lt;strong&gt;establishing a standard of minimum viability is key to ensuring your team is always working on the most important items at hand.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In Agile, for example, simplicity means building the neatest solution that &lt;em&gt;might&lt;/em&gt; meet the requirements of your client, then incrementally building upon it until your client is satisfied.&lt;/p&gt;
&lt;p&gt;This has several benefits for client-agency relationships:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encourages regular feedback on work, improving communications&lt;/li&gt;
&lt;li&gt;Reduces time spent on potentially over-complicated solutions, reducing client spend&lt;/li&gt;
&lt;li&gt;Writing less code means fewer bugs, leading to less negative feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;learn-more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#learn-more&quot; aria-label=&quot;learn more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Learn More&lt;/h1&gt;
&lt;p&gt;Your clients are passionate about the user experience of their projects. &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; helps show your customers that you’re similarly passionate about the user experience you’re delivering to your agency clients. &lt;/p&gt;
&lt;p&gt;Choosing the right tools helps ensure consistent, effective collaboration with your clients and helps build relationships that lead to repeat business. By reflecting on the quality of your client-company dynamics, and actively working to improve them, you’ll build meaningful relationships with your customers, leading to greater, more effective collaboration and further pitches and briefs in the future.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com/product/teams&quot;&gt;Learn more about FeaturePeek Teams&lt;/a&gt;, our collaborative tool that supercharges deployment previews for webdev agencies and enterprises.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P.S. A big thank you to the super talented team at &lt;a href=&quot;https://www.sanctuary.computer/&quot;&gt;Sanctuary Computer&lt;/a&gt; for their help with this post!&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[FeaturePeek raises $1.8M in seed funding, announces FeaturePeek Indie]]></title><description><![CDATA[Today, we are excited to announce a major milestone in our company’s mission to shorten feedback loops for teams. We have raised $1.…]]></description><link>https://featurepeek.com/featurepeek-raises-1-8m-in-seed-funding/</link><guid isPermaLink="false">https://featurepeek.com/featurepeek-raises-1-8m-in-seed-funding/</guid><pubDate>Wed, 13 May 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Today, we are excited to announce a major milestone in our company’s mission to shorten feedback loops for teams. We have raised &lt;strong&gt;$1.8 million in seed funding&lt;/strong&gt; led by &lt;a href=&quot;https://viewpoints.matrixpartners.com/investing-in-featurepeek-3ea07b3bb406&quot;&gt;Matrix Partners&lt;/a&gt; and a select group of Angel investors. We are thrilled with this partnership, and are thankful to have the support of these fantastic investors as FeaturePeek helps provide the missing link in the frontend review process.&lt;/p&gt;
&lt;p&gt;We started FeaturePeek in 2019 to solve a real-world problem that we felt while collaborating with product and design teams: &lt;strong&gt;scrambling at the last minute to integrate last-minute feedback&lt;/strong&gt; into releases. By developing FeaturePeek and talking with our users, we know that teams need seamless tools earlier in the dev cycle to give effective feedback on frontend implementations. Unblocking stakeholders and shortening this feedback loop allows product, design, and engineering to save time and ship higher quality releases.&lt;/p&gt;
&lt;p&gt;FeaturePeek creates &lt;strong&gt;supercharged deployment previews&lt;/strong&gt; of your web frontend that you can share to quickly get feedback on your implementation in progress. &lt;strong&gt;A drawer overlay is added on top of your site&lt;/strong&gt; that makes it easy for your reviewers to take screenshots with annotations, capture screen recordings, leave comments, create tickets on popular bug-tracking platforms, and more. &lt;strong&gt;You get this functionality just by deploying to FeaturePeek&lt;/strong&gt; — no dependencies or code changes are needed.&lt;/p&gt;
&lt;p&gt;Along with our funding, &lt;strong&gt;we are announcing a new product&lt;/strong&gt; that we can’t wait for you to use.&lt;/p&gt;
&lt;h1 id=&quot;-featurepeek-indie-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-featurepeek-indie-&quot; aria-label=&quot; featurepeek indie  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;👩‍💻 FeaturePeek Indie 👨‍💻&lt;/h1&gt;
&lt;p&gt;We are excited to launch a new entry-level product, &lt;a href=&quot;/product/indie&quot;&gt;FeaturePeek Indie&lt;/a&gt;. This command-line tool is the easiest way to try FeaturePeek’s deployment previews, without needing to setup a CI pipeline or install a GitHub app. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/1412f6822b51155235432baaf9716775/cli.gif&quot; alt=&quot;CLI&quot;&gt;&lt;/p&gt;
&lt;p&gt;Best of all, it’s &lt;strong&gt;completely free&lt;/strong&gt; and &lt;a href=&quot;https://github.com/featurepeek/peek&quot;&gt;open source&lt;/a&gt;. We’re eager for developers to try this so they can easily share and get feedback on their work. Install the CLI with homebrew: &lt;code class=&quot;language-text&quot;&gt;brew install featurepeek/tap/peek&lt;/code&gt;, and be sure to leave any feedback via &lt;a href=&quot;https://github.com/featurepeek/peek/issues&quot;&gt;GitHub Issues&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;featurepeek-teams&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#featurepeek-teams&quot; aria-label=&quot;featurepeek teams permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;FeaturePeek Teams&lt;/h1&gt;
&lt;p&gt;Our original solution that fits into your Continuous Integration pipeline is now known as &lt;a href=&quot;/product/teams&quot;&gt;FeaturePeek Teams&lt;/a&gt;. &lt;strong&gt;It’s the easiest way to explore the benefits of deployment previews without having to switch infrastructure.&lt;/strong&gt; We’ve been busy listening to your feature requests — here are just a few that we’ve released in the last couple of weeks.&lt;/p&gt;
&lt;h2 id=&quot;-unified-drawer-ui&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-unified-drawer-ui&quot; aria-label=&quot; unified drawer ui permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;👨‍🎨 Unified drawer UI&lt;/h2&gt;
&lt;p&gt;The unified drawer brings new functionality and improved UX. Comments, page views, issues, and more are all presented together in a timeline view. You can file tickets to your connected integrations here, too.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/9a35e063f4a94c34301407404b0fcafa/drawer-timeline.gif&quot; alt=&quot;Timeline in the FeaturePeek drawer&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;-crop-and-annotate-screenshots&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-crop-and-annotate-screenshots&quot; aria-label=&quot; crop and annotate screenshots permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;📸 Crop and annotate screenshots&lt;/h2&gt;
&lt;p&gt;You can now crop and annotate screenshots right from your deployment preview and easily attach it to a comment.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.88812980358668%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAAC20lEQVQoz2WT2U8TURSH+39ojFJi3ODNP8Tokz4YF4yJSwRc3nziARcEqQsQIxGUUqB7O7R0SofSltYOFOOOCiKKli4USqAW4fN2ivrgJOeeO2dOvvmdc+7VPXV56XXKOOQwnmAchz9KjxTG4otg941iF3F3ICpsbMuimlkGFfE9hGdU1bxZvFu9I+iccgj38Bi9VjeNt5t59OQpJosd44CNngE7vWYbJrP9r/WKuLHfSp/FQWe3kYbGW5hsEpISpcTSOYWKwZE4N+60smd3JQNWM8VigUw6zUIqQ3Yxw/LyEvkty+WypNMpkfMTSXKzY/s2mg0P8UcS2IeC6FyCapcjNNxsprrqAEogAJubJH8kKeTzsL7B/8+mtgZHg1RW6rl7vwP/2BbQIRR6RR+aWh+yf/8+ZFnWknOzs2wsreD98JxEcpqV5TxTn76RWyuSSi1qOQHxc31FBc332pGFQkcJqJUcVLnV8oADJaC/DMwvLLBZKBL88oo3qTkyi2lmpmbIF9bJZHNloCKA+gqaDG34whM4fCWgXAbevlsG+ny+skLRr/Vfxf+r3VgvLdpWGVGo1Ou5Y2j/B7SJUQ+FxkVQlLxvL05J0pInPqX5nl0hv1ZgVZSZzOfEgLKsrhb4kVnScoYVhZ07d2kl/x3K6PNJ3EqMxqZWqqurOHzkCDU1Zzh0rIbztVeoq6vnWv0VLl6up7b2ElevXuPkqdPUXzhLzfGjHKzag+FB278ezs0n6ZcCBKMqb16/IhaLEYmEGY/HmBhXGVdVVDXOZCLBixeTJERMCoQ5e9/NuTYPtY8DWBUVj4hp5/CLAFo8I4TiL/k4O8/76a9MfRZ+5hvvxP6P/zj7nbn5jOZjb+do8byjZfCt5q3KJC4xC6c/jC4+NY1XXCmD0ceJRgvXO9yYheJOi0yXVabH7sfkDNBl89Lw7Bnt3SbMfS48wyEGHEN0GsXtcfiFugguAfwNNJf8HXutLdUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Annotate screenshots&quot;
        title=&quot;Annotate screenshots&quot;
        src=&quot;/static/84670551cd0a1ca357c4e017c45f4d96/e1e83/annotate.png&quot;
        srcset=&quot;/static/84670551cd0a1ca357c4e017c45f4d96/00a32/annotate.png 148w,
/static/84670551cd0a1ca357c4e017c45f4d96/abe81/annotate.png 295w,
/static/84670551cd0a1ca357c4e017c45f4d96/e1e83/annotate.png 590w,
/static/84670551cd0a1ca357c4e017c45f4d96/702f0/annotate.png 885w,
/static/84670551cd0a1ca357c4e017c45f4d96/48347/annotate.png 1180w,
/static/84670551cd0a1ca357c4e017c45f4d96/0ae24/annotate.png 2342w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;-file-tickets-with-third-party-integrations&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-file-tickets-with-third-party-integrations&quot; aria-label=&quot; file tickets with third party integrations permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;🐛 File tickets with third-party integrations&lt;/h2&gt;
&lt;p&gt;You can now connect your Trello boards and Clubhouse projects to FeaturePeek and file new issues from the FeaturePeek drawer. Do you have suggestions for what issue tracking service to integrate with next? &lt;a href=&quot;mailto:hello@featurepeek.com&quot;&gt;Let us know.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.66375545851528%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAABYlAAAWJQFJUiTwAAACbUlEQVQozx2R7U/TUBjF+ycKDtm63nZt13Xr6AAR0EWNEFADSmbGmAwQo3+BMSQmRj+QqEEFBIJIhDFmqV330nW7fVnbrd6ZnA/nfvg9z7nnwcpyuarrar2p1jWl2mgZZq/X9X0/t5K/NhgAFI0DMkxSYUAh0xcBcIIMEQAJu1BqktrQjU4TdpotaJueKume5+ULL4ZwKiaM0pzAJUSWT3KJFKBjA0PBUJjAARjGw9jFlVrT2poOa02IFtuWo+sW2lxY34zyAs0lwlQ0SFB8MvVw4ak4NiGI4zEhhZNMCNBYSVa1tt2GJoJrKIDjatB2e/7q2gbFMDQXpxgeBzSaMj6VjidFLi5EojzJcIjHLq8UCI2a1lIqNb0FXdezLMvr+rl8YTAQYmICJYgBir2Bk1EmhmZEKAYQkWEQHQiSWFFS6lobFdVpaLZp9Xq+47go9trG6s10dFzkZsKRGUSOjBGzj0K30sEJfnCMvSPS6RGmD2stA1WlQedvtYHIbrff9svXm/fmUunJ5CIde0wx4uRtfinLPJiPz01R91ML08L8BI/+XGlBy7DsUkWXKjVomlbH7p/q+cb1YYqNiyCeBPERNpYgiUgwSADAkmwCn7obIDnsrCw3dKjW9arebBumaXZMo+P3/K13759klpfzhWyukF0pZPNrz1YKmdxqJpvPrG9m3rydXVxCp6o4rmfaHdN2LNuVYbOoVyXYkJTq+eVVSVKKZRnprCQh33/+kc+RL5a3P+1gl7JimFYLGq7nobTLR1vkh8z0zqu9018733/sH53sHf78unf45dv+wfHp7n+/e3B8ePL74/bnfylYwIHWO9wRAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;File tickets in the FeaturePeek drawer&quot;
        title=&quot;File tickets in the FeaturePeek drawer&quot;
        src=&quot;/static/651ebe1d949f84c2ca4af3fd4efd7f13/e1e83/drawer-tickets.png&quot;
        srcset=&quot;/static/651ebe1d949f84c2ca4af3fd4efd7f13/00a32/drawer-tickets.png 148w,
/static/651ebe1d949f84c2ca4af3fd4efd7f13/abe81/drawer-tickets.png 295w,
/static/651ebe1d949f84c2ca4af3fd4efd7f13/e1e83/drawer-tickets.png 590w,
/static/651ebe1d949f84c2ca4af3fd4efd7f13/702f0/drawer-tickets.png 885w,
/static/651ebe1d949f84c2ca4af3fd4efd7f13/48347/drawer-tickets.png 1180w,
/static/651ebe1d949f84c2ca4af3fd4efd7f13/57f32/drawer-tickets.png 2290w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&quot;whats-next&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#whats-next&quot; aria-label=&quot;whats next permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What’s next&lt;/h1&gt;
&lt;p&gt;With this funding round, we are able to bring FeaturePeek Teams and FeaturePeek Indie to market, and expand our presence in the developer community. These products represent big first steps as engineering tools made for working closer with design and product teams. Thank you so much for your support — we look forward to hearing how your team likes FeaturePeek.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to import Mailchimp campaigns as a Gatsby source]]></title><description><![CDATA[Publishing your marketing newsletters on your website is a great way to increase the amount of content available on your domain…]]></description><link>https://featurepeek.com/how-to-import-mailchimp-campaigns-as-a-gatsby-source/</link><guid isPermaLink="false">https://featurepeek.com/how-to-import-mailchimp-campaigns-as-a-gatsby-source/</guid><pubDate>Thu, 16 Apr 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Publishing your marketing newsletters on your website is a great way to increase the amount of content available on your domain automatically. We do this here at &lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt; – we publish our Product Update newsletter publicly so that each campaign can be forever preserved in the archives (&lt;a href=&quot;https://featurepeek.com/product-updates/0f4fe58662&quot;&gt;here’s an example&lt;/a&gt;). We’ll show you how to do the same in this article.&lt;/p&gt;
&lt;p&gt;The content is already written – &lt;em&gt;don’t let it only be accessible via email inbox!&lt;/em&gt; The good news is that this is fairly trivial to set up if you’re building a static site with &lt;a href=&quot;http://gatsbyjs.org&quot;&gt;Gatsby&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Immediate benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improve SEO&lt;/strong&gt;: Importing from Mailchimp as a source means that the content lives on your domain (we’re not talking about just embedding an iframe) so you can get all the SEO juice for the keywords you use in your email marketing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduce newsletter churn&lt;/strong&gt;: Give your readers an opportunity to preview the content of the newsletter they’re signing up for by having the content available to read on your website. Your subscribers will be less likely to unsubscribe when they can see samples of what you’ve sent out in the past.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Code sample:&lt;/strong&gt; Our entire marketing site is open source, so you can see this code in action by &lt;a href=&quot;http://github.com/featurepeek/marketing-website&quot;&gt;visiting our repo&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;install-dependencies&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#install-dependencies&quot; aria-label=&quot;install dependencies permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Install dependencies&lt;/h2&gt;
&lt;p&gt;We’ll be adding the &lt;a href=&quot;https://www.gatsbyjs.org/packages/gatsby-source-mailchimp&quot;&gt;gatsby-source-mailchimp&lt;/a&gt; build-time dependency to do most of the heavy lifting for us here.&lt;/p&gt;
&lt;p&gt;Since we only want a subset of each campaign’s HTML source (we don’t need the &lt;code class=&quot;language-text&quot;&gt;&amp;lt;head&amp;gt;&lt;/code&gt; tags from Mailchimp, for example), we’ll also need a DOM parsing library. We’ll be using &lt;a href=&quot;https://www.npmjs.com/package/cheerio&quot;&gt;cheerio&lt;/a&gt; in this article, but you can swap it out for another if you’d like, as long as it’s compatible with Node.js (the native &lt;a href=&quot;https://caniuse.com/#feat=xml-serializer&quot;&gt;DOMParser&lt;/a&gt; would be ideal, but it’s only available to browsers).&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;yarn&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; gatsby-source-mailchimp cheerio&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;create-a-mailchimp-api-key&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#create-a-mailchimp-api-key&quot; aria-label=&quot;create a mailchimp api key permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Create a Mailchimp API key&lt;/h2&gt;
&lt;p&gt;After logging in to &lt;a href=&quot;https://login.mailchimp.com/&quot;&gt;Mailchimp&lt;/a&gt;, click your avatar in the top right and then click Account in the resulting dropdown menu. From there, click on Extras &gt; API keys.&lt;/p&gt;
&lt;p&gt;Click the “Create A Key” button to generate a new API key.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 26.709573612228482%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAyklEQVQY051PywrCMBDs//+QCF48KPgRgnhoa5ukMdk8bNqOm5SCenRhyGaYnZ2tnnqA7DtGj2maVqT03c8zlmVBru39rExtfNUNGrWUqIWAJYL3Ds45BO9L77mnGIspfsyW1enrXwkl8eCElIcZelBsSIgxIKc3RrPpuoisgRCsJcsaW3SCZxXr7m2D1yuiSnxSYHEMoWwIwfMAYRzHwlljikHMKacEpVSB1hqBucScJIfj9baefDmfcNjv0DY1BiXQd21J8k/lQG+8uYQbFqK4tQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;New API key&quot;
        title=&quot;New API key&quot;
        src=&quot;/static/c4417d76abe55cec57df9da95c31183b/e1e83/new-api-key.png&quot;
        srcset=&quot;/static/c4417d76abe55cec57df9da95c31183b/00a32/new-api-key.png 148w,
/static/c4417d76abe55cec57df9da95c31183b/abe81/new-api-key.png 295w,
/static/c4417d76abe55cec57df9da95c31183b/e1e83/new-api-key.png 590w,
/static/c4417d76abe55cec57df9da95c31183b/702f0/new-api-key.png 885w,
/static/c4417d76abe55cec57df9da95c31183b/48347/new-api-key.png 1180w,
/static/c4417d76abe55cec57df9da95c31183b/09920/new-api-key.png 2486w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You should rename the Label while you’re at it so that you and your teammates know what the key is correlated with – we named ours &lt;code class=&quot;language-text&quot;&gt;gatsby-source-mailchimp&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;save-the-mailchimp-api-key-as-an-environment-variable&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#save-the-mailchimp-api-key-as-an-environment-variable&quot; aria-label=&quot;save the mailchimp api key as an environment variable permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Save the Mailchimp API key as an environment variable&lt;/h2&gt;
&lt;p&gt;We’ll want to save the API key as an environment variable so that we don’t check the value into version control. Anyone can read or write data to/from your Mailchimp account with this API key, so you want to make sure that you’re careful with it.&lt;/p&gt;
&lt;p&gt;You probably have a &lt;code class=&quot;language-text&quot;&gt;.env.development&lt;/code&gt; and/or &lt;code class=&quot;language-text&quot;&gt;.env.production&lt;/code&gt; files in your project root if you initially followed &lt;a href=&quot;https://www.gatsbyjs.org/docs/environment-variables/#defining-environment-variables&quot;&gt;Gatsby’s docs&lt;/a&gt; – these gitignore’d files contain your project’s environment variables. Save a new line in them with the following:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;raw&quot;&gt;&lt;pre class=&quot;language-raw&quot;&gt;&lt;code class=&quot;language-raw&quot;&gt;MAILCHIMP_API_KEY=&amp;lt;YOUR_KEY_GOES_HERE&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Don’t forget to add this value to your servers and continuous integration platforms, as your build won’t build correctly without it.&lt;/p&gt;
&lt;h2 id=&quot;configure-the-gatsby-plugin&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#configure-the-gatsby-plugin&quot; aria-label=&quot;configure the gatsby plugin permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Configure the Gatsby plugin&lt;/h2&gt;
&lt;p&gt;Tell Gatsby that you’d like to use the &lt;code class=&quot;language-text&quot;&gt;gatsby-source-mailchimp&lt;/code&gt; plugin in your &lt;code class=&quot;language-text&quot;&gt;gatsby-config.js&lt;/code&gt; file. This will read from the &lt;code class=&quot;language-text&quot;&gt;MAILCHIMP_API_KEY&lt;/code&gt; environment variable that you defined earlier.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// gatsby-config.js&lt;/span&gt;
module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  plugins&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      resolve&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gatsby-source-mailchimp&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      options&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        key&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;MAILCHIMP_API_KEY&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// replace `us20` with the value in your Mailchimp dashboard URL&lt;/span&gt;
        rootURL&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;https://us20.api.mailchimp.com/3.0&quot;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;create-the-campaignpost-template-component&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#create-the-campaignpost-template-component&quot; aria-label=&quot;create the campaignpost template component permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Create the CampaignPost template component&lt;/h2&gt;
&lt;p&gt;This component will be what renders when someone loads an individual campaign post page. You might recognize the format of this component if you followed any of the Gatsby blog starters – it’s very &lt;a href=&quot;https://github.com/DSchau/gatsby-blog-starter-kit/blob/master/src/templates/blog-post.js&quot;&gt;similar to the BlogPost template component&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We’ll be checking that &lt;code class=&quot;language-text&quot;&gt;status === &amp;#39;sent&amp;#39;&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;post.send_time !== &amp;#39;Invalid date&amp;#39;&lt;/code&gt; in order to prevent accidentally publishing draft campaigns that haven’t been sent out yet.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// src/templates/CampaignPost.js&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; graphql&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Link &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gatsby&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; cheerio &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;cheerio&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Layout &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;components/Layout&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;SEO&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;components/Seo&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CampaignPost&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; post &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mailchimpCampaign
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; siteTitle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;site&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;siteMetadata&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; previous&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; next &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; props&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;pageContext

  &lt;span class=&quot;token comment&quot;&gt;// we don&apos;t want the full post.html -- just what is in the body container&lt;/span&gt;
  
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; $ &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; cheerio&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;load&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;html&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; bodyTable &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;.bodyContainer&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Layout&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;siteTitle&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;SEO&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token attr-name&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;preview_text&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; margin&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;auto&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; maxWidth&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;600&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;/product-updates&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;← All product updates&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;send_time &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Invalid date&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;send_time&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;campaign&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;dangerouslySetInnerHTML&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; __html&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; bodyTable &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;previous &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; previous&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;status &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;sent&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; previous&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/product-updates/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;previous&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;campaignId&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;prev&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              ← &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;previous&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;next &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; next&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;status &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;sent&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; next&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/product-updates/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;next&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;campaignId&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;next&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;next&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; →
            &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Layout&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pageQuery &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; graphql&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  query CampaignPostById($slug: String!) {
    site {
      siteMetadata {
        title
        author
      }
    }
    mailchimpCampaign(campaignId: { eq: $slug }) {
      html
      settings {
        preview_text
        subject_line
        title
      }
      campaignId
      send_time(formatString: &quot;MMMM DD, YYYY&quot;)
      status
    }
  }
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;create-productupdates-page-component&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#create-productupdates-page-component&quot; aria-label=&quot;create productupdates page component permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Create ProductUpdates page component&lt;/h2&gt;
&lt;p&gt;This page serves as the collection page for all of your campaigns. In this example, it’ll be served from the &lt;code class=&quot;language-text&quot;&gt;/product-updates&lt;/code&gt; route.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// src/pages/product-updates.js&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; graphql&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Link &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gatsby&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; Layout &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;components/Layout&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;SEO&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;components/Seo&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; JoinMailingList &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;components/JoinMailingList&quot;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;reverseChronologically&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; 
  &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;send_time&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;b&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;send_time&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ProductUpdates&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; data &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; props
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; siteTitle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;site&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;siteMetadata&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; campaigns &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;allMailchimpCampaign&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;edges

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Layout&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;siteTitle&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;SEO&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;All product updates&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;FeaturePeek product updates&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;JoinMailingList&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Archive&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;campaigns
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;reverseChronologically&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; node &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title
          &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;campaignId&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;small&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;send_time&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;small&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/product-updates/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;campaignId&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Link&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
              &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;settings&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;preview_text&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
            &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Layout&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pageQuery &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; graphql&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  query {
    site {
      siteMetadata {
        title
      }
    }
    allMailchimpCampaign(
      filter: { 
        status: { eq: &quot;sent&quot; }, 
        settings: { 
          title: { ne: &quot;&quot; } 
        } 
      }
    ) {
      edges {
        node {
          settings {
            preview_text
            subject_line
            title
          }
          campaignId
          send_time(formatString: &quot;MMMM DD, YYYY&quot;)
          status
        }
      }
    }
  }
&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;extend-createpages&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#extend-createpages&quot; aria-label=&quot;extend createpages permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Extend createPages&lt;/h2&gt;
&lt;p&gt;Finally, we need to create the graphQL query to pull the data from the Mailchimp source.&lt;/p&gt;
&lt;p&gt;If your Gatsby project already contains a blog, your &lt;code class=&quot;language-text&quot;&gt;createPages&lt;/code&gt; method in &lt;code class=&quot;language-text&quot;&gt;gatsby-node.js&lt;/code&gt; is probably already in use. You’ll need to combine what you already have with what is written in detail below in order to iterate over both your blog posts and Mailchimp campaigns. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// gatsby-node.js&lt;/span&gt;
exports&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;createPages&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; graphql&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; actions &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; createPage &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; actions
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; CampaignPost &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;./src/templates/CampaignPost.js&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;graphql&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
    {
      allMailchimpCampaign {
        edges {
          next {
            campaignId
            settings {
              preview_text
              subject_line
              title
            }
            status
          }
          previous {
            campaignId
            settings {
              preview_text
              subject_line
              title
            }
            status
          }
          node {
            html
            settings {
              preview_text
              subject_line
              title
            }
            campaignId
            send_time
            status
          }
        }
      }
    }
  &lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;errors&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;errors
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// Create product update pages&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; campaigns &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;allMailchimpCampaign&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;edges

    campaigns&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;campaign&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; previous &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
        index &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; campaigns&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; campaigns&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;index &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node
      &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; next &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; index &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; campaigns&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;index &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node

      &lt;span class=&quot;token function&quot;&gt;createPage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        path&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/product-updates/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;campaign&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;campaignId&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        component&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; CampaignPost&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        context&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          slug&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; campaign&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;campaignId&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          postPath&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;/product-updates/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;campaign&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;campaignId&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          previous&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
          next&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;rejoice-in-the-glory-of-automation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#rejoice-in-the-glory-of-automation&quot; aria-label=&quot;rejoice in the glory of automation permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Rejoice in the glory of automation&lt;/h2&gt;
&lt;p&gt;That’s all there is to it! Now the next time you rebuild your site, your campaigns will be pulled from Mailchimp and built as static HTML pages. You can &lt;a href=&quot;https://featurepeek.com/product-updates&quot;&gt;check out how ours look here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.20000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABVElEQVQoz41Ta4+CMBDk//+u+6CRmGiCJhijUXkKKCqKR3Fup7Gk5yO6yWTbhR12psW53W5gMGdVhag6Izyfcahr/F6vqAVXZtkbKKW6HjszHLNpmgZjz8NPrwd3NII3nWIwGGAymWA2m6Hf72Mk9eFwiKIoOiKb7B8ho5IJy/0e1ekEJR9oZJK2bXWTuq+ZCZvMXjuvxraDzZyeeAx+wMRbws1mo6XN53NM77J934cndhCu62rZJ1HxykfHHpdTZFmGOI6R5zmSJNFgjSjLUtfp4SvZT4T0cLlcIk1TTWAySbfb7ZPkj4S8HoaEBATJWOM6iiLERBiilqv1kfByuehmSjKkNjmtyESynxdIjsf3Hsr2XmhxKOXlJO182+12Xe6kfitZqUamiLBYLLBarfSJE+v1WuejTMWDIej3V5ID8Ye+UZ45ZYNQngVBoH8/0/dI+AfiL56X4VF8rgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Result&quot;
        title=&quot;Result&quot;
        src=&quot;/static/d35760486b09bfa758376f09940afbc0/e1e83/result.png&quot;
        srcset=&quot;/static/d35760486b09bfa758376f09940afbc0/00a32/result.png 148w,
/static/d35760486b09bfa758376f09940afbc0/abe81/result.png 295w,
/static/d35760486b09bfa758376f09940afbc0/e1e83/result.png 590w,
/static/d35760486b09bfa758376f09940afbc0/702f0/result.png 885w,
/static/d35760486b09bfa758376f09940afbc0/48347/result.png 1180w,
/static/d35760486b09bfa758376f09940afbc0/660f4/result.png 2000w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Remember, the source only gets queried at build time – so when you mail out a new newsletter, you’ll have to rebuild your Gatsby site to pick up the content and publish on your website.&lt;/p&gt;
&lt;h2 id=&quot;thanks-for-following-along&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#thanks-for-following-along&quot; aria-label=&quot;thanks for following along permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Thanks for following along!&lt;/h2&gt;
&lt;p&gt;One closing note: While I was writing this article, I verified that the code samples worked as expected by building the deployment preview of this blog post on &lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt;. It was super useful to confirm that the whole idea behind was behaving correctly on a server besides my local machine.&lt;/p&gt;
&lt;p&gt;We use FeaturePeek on featurepeek.com (meta) to iterate faster during development. Our blog (and entire marketing site for that matter) is open source on GitHub, so you can take a peek at the preview environments that deploy on &lt;a href=&quot;https://github.com/featurepeek/marketing-website/pulls&quot;&gt;our open pull requests&lt;/a&gt;. &lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to make your team still feel like a team while being remote]]></title><description><![CDATA[Well, we’re just over a month into shelter in place and it’s it’s starting to feel like the initial panic of “well, what do we do?” has worn…]]></description><link>https://featurepeek.com/how-to-make-your-team-still-feel-like-a-team-while-being-remote/</link><guid isPermaLink="false">https://featurepeek.com/how-to-make-your-team-still-feel-like-a-team-while-being-remote/</guid><pubDate>Thu, 16 Apr 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Well, we’re just over a month into shelter in place and it’s it’s starting to feel like the initial panic of “well, what do we do?” has worn off a bit. Teams are meeting regularly on Zoom, but a new set of challenges exist.&lt;/p&gt;
&lt;p&gt;We don’t know how long this will last, and even once sheltering in place is over, life most likely won’t go back to normal for quite some time, or possibly ever. The norm has changed and the past month has definitely shown that more teams will go fully remote in the future, pandemic or not.&lt;/p&gt;
&lt;p&gt;This pandemic has proven that remote work isn’t just the way of the future. It’s happening now, and there are plenty of positives. Technology has made it easier to connect, and educational programs are adapting. The world has changed, and it will never fully go back the way it was, nor should it just return to the status quo.&lt;/p&gt;
&lt;p&gt;At first glance, it might seem like teams have it figured out. Sure, you use Zoom for team meetings, and your team is still producing solid work, but how about the things that you can’t measure? &lt;em&gt;How does your team &lt;strong&gt;feel&lt;/strong&gt;? Are ideas still free flowing between team members? How is company culture maintaining or changing?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here are some ideas that have helped me and my team still feel like a team while staying remote.&lt;/p&gt;
&lt;h2 id=&quot;dont-over-zoom&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dont-over-zoom&quot; aria-label=&quot;dont over zoom permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Don’t over-Zoom&lt;/h2&gt;
&lt;p&gt;Zoom has had a massive increase in popularity over the past month and for good reason. However, with teams scrambling to maximize video conferencing, they can quickly become counterproductive if no thought is put into best practices.&lt;/p&gt;
&lt;p&gt;Save Zoom meetings for presentations or information distribution meetings, and don’t feel the need to have every meeting be an all-hands video call. It’s also important to not expect your team to spend all day on Zoom. If your team didn’t spend their whole day in the office in meetings, don’t expect them to be on a Zoom call all day. People still want to put their headphones on and be left alone sometimes. The idea that an teammate has a camera on most of the time doesn’t promote autonomy or personal ownership, and can show a lack of trust. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/7e218d5d63ed368b1469a20f13b117ee/trust.gif&quot; alt=&quot;trust.gif&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;figure-out-how-to-brainstorm-remotely&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#figure-out-how-to-brainstorm-remotely&quot; aria-label=&quot;figure out how to brainstorm remotely permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Figure out how to brainstorm remotely&lt;/h2&gt;
&lt;p&gt;Nothing will ever replace getting in the same room and jamming on an idea, but there are some great tools that are helping to bridge that gap without just being a video conference platform.&lt;/p&gt;
&lt;p&gt;Here’s how we do it at Feature Peek. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tandem.chat/&quot;&gt;Tandem&lt;/a&gt; - great app for workspace sharing. easy to jump into a spontaneous chat&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://slack.com/&quot;&gt;Slack&lt;/a&gt; - Pro tip, make specific channels for work and non work conversations. #project-chat, #water-cooler, etc&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://slite.com/&quot;&gt;Slite&lt;/a&gt; - Great for building a library of onboarding documents, better than a team wiki, great for collaboration.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://miro.com/&quot;&gt;Miro&lt;/a&gt; - Digital whiteboard for brainstorming&lt;/li&gt;
&lt;li&gt;There.pm - Simple way to keep track of your teammate’s timezones&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.donut.com&quot;&gt;Donut&lt;/a&gt; - Slack add on to make team bonding easier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zynq.io/remote/&quot;&gt;Zync&lt;/a&gt; - Avoid calendar Tetris by having Zync intelligently schedule meetings.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt; - Great for front end feedback and collaboration (shameless plug) &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;make-yourself-available-to-be-a-rubber-duck&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#make-yourself-available-to-be-a-rubber-duck&quot; aria-label=&quot;make yourself available to be a rubber duck permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Make yourself available to be a rubber duck&lt;/h2&gt;
&lt;p&gt;If you ask my team, I probably use the &lt;a href=&quot;https://en.wikipedia.org/wiki/Rubber_duck_debugging&quot;&gt;Rubber duck debugging&lt;/a&gt; method more than anyone else at FeaturePeek. Being at home has made that slightly more difficult, but making yourself available for a quick 5 minute chat can unblock you technically, and maintain the feeling of team collaboration and spontaneity.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 400px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAIBBAX/xAAXAQADAQAAAAAAAAAAAAAAAAABAgME/9oADAMBAAIQAxAAAAH2ZiMte1jTLJFNhx//xAAbEAACAgMBAAAAAAAAAAAAAAABAgAQAxESIv/aAAgBAQABBQJ25iNusyhovmiNzgV//8QAGBEAAgMAAAAAAAAAAAAAAAAAARACERL/2gAIAQMBAT8BERlWv//EABcRAQEBAQAAAAAAAAAAAAAAAAECEBH/2gAIAQIBAT8Bu+XjIuf/xAAWEAADAAAAAAAAAAAAAAAAAAABECD/2gAIAQEABj8CYr//xAAbEAEAAgMBAQAAAAAAAAAAAAABABEQITFBYf/aAAgBAQABPyER0tls3Y43DvkHhg2DBNMD+4//2gAMAwEAAgADAAAAEJwgfP/EABgRAQEAAwAAAAAAAAAAAAAAAAEQESFB/9oACAEDAQE/EGZdgg0z/8QAGBEBAAMBAAAAAAAAAAAAAAAAAQARMRD/2gAIAQIBAT8QfbINlkKKc//EAB4QAQEAAQQDAQAAAAAAAAAAAAERABAhMVFBYXHR/9oACAEBAAE/EAR0QuLwBoyaDTZtDJ+4oPAbN4zazkuFBvXrNwR+nT//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;duck.jpg&quot;
        title=&quot;duck.jpg&quot;
        src=&quot;/static/2b864462bafbdf429e63464bd4052a5c/b9af0/duck.jpg&quot;
        srcset=&quot;/static/2b864462bafbdf429e63464bd4052a5c/80465/duck.jpg 148w,
/static/2b864462bafbdf429e63464bd4052a5c/dffba/duck.jpg 295w,
/static/2b864462bafbdf429e63464bd4052a5c/b9af0/duck.jpg 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;My favorite debugging tool&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;perfect-the-daily-stand-up&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#perfect-the-daily-stand-up&quot; aria-label=&quot;perfect the daily stand up permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Perfect the daily stand-up&lt;/h2&gt;
&lt;p&gt;Daily stand up meetings to identify priorities, dependency conflicts, or areas of collaboration can be highly effective when run well. In my experience, however, they sometimes tend to devolve into an uninspiring summary of the current sprint board. And with quarantine inevitably making the days and weeks blend together, it’s even harder to make a daily stand up meeting worthwhile. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adding a framework to your daily standup&lt;/strong&gt; can keep it interesting and not just make it about what bugs you fixed yesterday. At FeaturePeek, our daily stand ups have every team member answering these questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What are your top priorities today?&lt;/li&gt;
&lt;li&gt;Did you discover anything interesting or unexpected yesterday?&lt;/li&gt;
&lt;li&gt;What challenges or roadblocks do you need help with?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With this simple framework, our stand-ups keep us all on the same page, and start the day with good jumping off points for collaboration and areas we know we should focus on.&lt;/p&gt;
&lt;h2 id=&quot;be-there&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#be-there&quot; aria-label=&quot;be there permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Be there&lt;/h2&gt;
&lt;p&gt;It’s becoming clear that being in the office is less about the work and more about the things you get for free. I’m not talking about the granola bars and La Croix — I’m talking about the personal moments of asking how someone is doing to understand what’s happening in their world, in their heart. Sure, this is important for building good team dynamics, but more importantly, it’s a major aspect of life that everyone is missing right now.&lt;/p&gt;
&lt;h2 id=&quot;dont-discount-1-1s&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dont-discount-1-1s&quot; aria-label=&quot;dont discount 1 1s permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Don’t discount 1-1’s&lt;/h2&gt;
&lt;p&gt;1-1’s are more important now than ever. Don’t neglect them and do what you can to make the most of them. Rather than being stuck at my desk like an ordinary Zoom conference, I’ve found that &lt;strong&gt;I am more present in my 1-1s if I take them while on a walk around the neighborhood&lt;/strong&gt; or the park. Getting outside and making that intentional time is crucial to connect with your team. And when you are in your 1-1, treat it like you would if you were in person. Sure, you should acknowledge how weird this is and the news of the day, but don’t forget to still manage performance, give feedback, and most importantly manage career growth. Just because the world feels like it’s on pause doesn’t mean your employees’ career goals are, and yours shouldn’t be either.&lt;/p&gt;
&lt;h2 id=&quot;be-patient-be-kind&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#be-patient-be-kind&quot; aria-label=&quot;be patient be kind permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Be patient, be kind&lt;/h2&gt;
&lt;p&gt;This situation isn’t normal, so don’t act like it is. Everyone is experiencing their own emotions, sense of loss, fear, and anxiety. Everyone is adjusting to a work/life balance that all just became one bowl of soup that you eat on your couch while wearing the same sweatpants for 3 days. Take it slow and be kind. Not everyone is going to adjust as quickly as you may expect, so don’t expect 100 percent productivity from your team. This is definitely a time where it’s more about quality over quantity. So make sure to focus on finding the humanity in this situation we are all in, and bring that energy to your team.&lt;/p&gt;
&lt;h2 id=&quot;do-it-for-your-culture&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#do-it-for-your-culture&quot; aria-label=&quot;do it for your culture permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Do it for your culture&lt;/h2&gt;
&lt;p&gt;You put the time and intention into building your &lt;strong&gt;&lt;em&gt;team and company culture, now is the time to use it or lose it.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Keep doing the things that make your team unique. All the funny, silly, and unique touches go a long way and are important to remember. For example, at FeaturePeek we name all of our releases after &lt;a href=&quot;https://www.imdb.com/name/nm0000115/#actor&quot;&gt;Nicolas Cage movies&lt;/a&gt;, and watch the trailers before we plan our sprints. We still watch them before the meeting, but just independently on our own machines rather than in one room together. We still make sure to save a few minutes to laugh about it together before jumping back into the meeting.&lt;/p&gt;
&lt;h2 id=&quot;show-off&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#show-off&quot; aria-label=&quot;show off permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Show off&lt;/h2&gt;
&lt;p&gt;Find a good way for your team to give a demo of what they are working on. Having an ‘over the shoulder’ review is vital to the dev cycle. Screen sharing or collaborating within a FeaturePeek environment can make for a smoother transition to virtual frontend review. Try an end of the week demo where everyone gets a turn showing off their work. It’s a great opportunity for your team to feel rewarded for their efforts.&lt;/p&gt;
&lt;p&gt;I’d love to hear about how your teams are adapting to this new normal. Feel free to &lt;a href=&quot;mailto:eric@featurepeek.com&quot;&gt;shoot me an email&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/in/eric-silverman-featurepeek&quot;&gt;connect with me on LinkedIn&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The 8 Best Tools For Code Review In 2020]]></title><description><![CDATA[We love great code reviews. They dramatically improve the quality of your code, which ultimately means better and more reliable products…]]></description><link>https://featurepeek.com/the-8-best-tools-for-code-review-in-2020/</link><guid isPermaLink="false">https://featurepeek.com/the-8-best-tools-for-code-review-in-2020/</guid><pubDate>Fri, 06 Mar 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;We love great code reviews. They dramatically improve the quality of your code, which ultimately means better and more reliable products.&lt;/p&gt;
&lt;p&gt;What we &lt;em&gt;don’t&lt;/em&gt; love about code reviews is how long they take, with many pull requests being painfully slow to approve. We shared a few tips to &lt;a href=&quot;/blog/why-are-so-many-orgs-slow-to-approve-pull-requests/&quot;&gt;speed code reviews up here&lt;/a&gt;, but another big factor is having the right &lt;em&gt;tools&lt;/em&gt; for the job. &lt;/p&gt;
&lt;p&gt;In this article we’ll share some of the best tools we’ve used during the code review process. Many of the tools listed here are available through the &lt;a href=&quot;https://github.com/marketplace&quot;&gt;GitHub Marketplace&lt;/a&gt;, and we’ve given the pros and cons of each one below. &lt;/p&gt;
&lt;h2 id=&quot;accesslint&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#accesslint&quot; aria-label=&quot;accesslint permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AccessLint&lt;/h2&gt;
&lt;p&gt;How accessible is your software? &lt;/p&gt;
&lt;p&gt;Chances are, you probably don’t know for sure. The sad truth is that while web accessibility standards are well documented, they’re rarely part of the code review process.&lt;/p&gt;
&lt;p&gt;That’s why we love &lt;a href=&quot;https://github.com/marketplace/accesslint&quot;&gt;AccessLint&lt;/a&gt;, which automatically runs a series of accessibility tests and comments on your pull request with easy suggestions to resolve them. This includes major accessibility features, as well as those that benefit those with temporary conditions (like a broken arm) or more minor ailments (like bad eyesight).&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.200655200655206%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAdyppAP/xAAXEAEAAwAAAAAAAAAAAAAAAAAQASFC/9oACAEBAAEFAqh0f//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABYQAAMAAAAAAAAAAAAAAAAAAAERIP/aAAgBAQAGPwJCv//EABoQAAIDAQEAAAAAAAAAAAAAAAERABAhQWH/2gAIAQEAAT8hScAOQUdTyIV//9oADAMBAAIAAwAAABAn3//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABoQAQADAQEBAAAAAAAAAAAAAAEAESExQWH/2gAIAQEAAT8QCiAYHkWWXsx8lLQJrn2UcCc5P//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;AccessLint&quot;
        title=&quot;AccessLint&quot;
        src=&quot;/static/ea778575a7932c87782969653c078506/4e7e4/access-lint.jpg&quot;
        srcset=&quot;/static/ea778575a7932c87782969653c078506/80465/access-lint.jpg 148w,
/static/ea778575a7932c87782969653c078506/dffba/access-lint.jpg 295w,
/static/ea778575a7932c87782969653c078506/4e7e4/access-lint.jpg 590w,
/static/ea778575a7932c87782969653c078506/61170/access-lint.jpg 885w,
/static/ea778575a7932c87782969653c078506/b04ab/access-lint.jpg 1180w,
/static/ea778575a7932c87782969653c078506/2ba06/access-lint.jpg 1221w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you’re not already on your accessibility, you really need to be. In many countries, this is now a legal requirement. &lt;/p&gt;
&lt;p&gt;In the US, there have been various lawsuits against inaccessible websites that do not comply with ADA guidelines. In the UK, web accessibility is protected by the Equalities Act.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gives instant WCAG 2.0 accessibility feedback for common accessibility issues&lt;/li&gt;
&lt;li&gt;Available through GitHub Marketplace, so can be added instantly&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not a comprehensive review and only covers basic issues&lt;/li&gt;
&lt;li&gt;Limited file type support (Haml, HTML, ERB/Rails)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free for all open-source public projects&lt;/li&gt;
&lt;li&gt;Free for educational institutions for public and private projects&lt;/li&gt;
&lt;li&gt;$49/month for unlimited public and private projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;imgbot&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#imgbot&quot; aria-label=&quot;imgbot permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Imgbot&lt;/h2&gt;
&lt;p&gt;When you are focused on shipping code and reaching deadlines, it’s easy to forget to optimize images. &lt;/p&gt;
&lt;p&gt;But smaller images mean a better experience for your users, with fast load times, higher conversion rates and reduced bandwidth costs. So it’s really important not to overlook this. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://imgbot.net&quot;&gt;Imgbot&lt;/a&gt; is a simple tool that handles losslessly compressing all the images in your repositories. There’s no fancy stuff going on here, just a super simple and mega effective tool to cover off this specific review necessity.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 82.38805970149254%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAQABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAMCBAX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHUk8ElgP/EABcQAAMBAAAAAAAAAAAAAAAAAAADEyD/2gAIAQEAAQUCisgogrH/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAaEAACAgMAAAAAAAAAAAAAAAAAAjORASAy/9oACAEBAAY/AuMURqRrWn//xAAaEAACAgMAAAAAAAAAAAAAAAAAARAhMVHB/9oACAEBAAE/Id5qOEAatmEI/9oADAMBAAIAAwAAABDwD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAAICAgMAAAAAAAAAAAAAAAABETEhUXGB8f/aAAgBAQABPxDJbnUtOK6nniTI+BJub0Salx0f/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Imgbot&quot;
        title=&quot;Imgbot&quot;
        src=&quot;/static/2cdee4adbb52528fdf20605e9e5c937f/4e7e4/imgbot.jpg&quot;
        srcset=&quot;/static/2cdee4adbb52528fdf20605e9e5c937f/80465/imgbot.jpg 148w,
/static/2cdee4adbb52528fdf20605e9e5c937f/dffba/imgbot.jpg 295w,
/static/2cdee4adbb52528fdf20605e9e5c937f/4e7e4/imgbot.jpg 590w,
/static/2cdee4adbb52528fdf20605e9e5c937f/61170/imgbot.jpg 885w,
/static/2cdee4adbb52528fdf20605e9e5c937f/b04ab/imgbot.jpg 1180w,
/static/2cdee4adbb52528fdf20605e9e5c937f/6a63a/imgbot.jpg 1340w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatically optimizes images losslessly, but can be set to more aggressive compression if required&lt;/li&gt;
&lt;li&gt;Once set up, no interaction is required - just approve the incoming merges.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pricing is high for small teams &lt;/li&gt;
&lt;li&gt;Would love to see support for video files in future&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free for open source projects&lt;/li&gt;
&lt;li&gt;$10 per month for personal projects&lt;/li&gt;
&lt;li&gt;$30 per month for professional projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;lgtm&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#lgtm&quot; aria-label=&quot;lgtm permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;LGTM&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://lgtm.com&quot;&gt;LGTM&lt;/a&gt; is a code analysis platform that focuses on finding 0-days (an unaddressed software vulnerability) and preventing critical issues in your product.&lt;/p&gt;
&lt;p&gt;If an issue is detected by their 1600+ analyses, it is automatically flagged on the pull request to be resolved or mitigated.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 73.65638766519824%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3aFB/8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQABBQJf/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAGBAAAwEBAAAAAAAAAAAAAAAAARARAGH/2gAIAQEAAT8hnTgxV//aAAwDAQACAAMAAAAQcM//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhQRBRYbH/2gAIAQEAAT8QDTaV3K1i31iOqjkg2+8f/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;LGTM&quot;
        title=&quot;LGTM&quot;
        src=&quot;/static/5f21e4f0106dd278318ab0dc8021c1d0/4e7e4/lgtm.jpg&quot;
        srcset=&quot;/static/5f21e4f0106dd278318ab0dc8021c1d0/80465/lgtm.jpg 148w,
/static/5f21e4f0106dd278318ab0dc8021c1d0/dffba/lgtm.jpg 295w,
/static/5f21e4f0106dd278318ab0dc8021c1d0/4e7e4/lgtm.jpg 590w,
/static/5f21e4f0106dd278318ab0dc8021c1d0/61170/lgtm.jpg 885w,
/static/5f21e4f0106dd278318ab0dc8021c1d0/bb423/lgtm.jpg 1135w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Their security analysis is unparalleled in the industry, with a dedicated team of security researchers who have found &lt;a href=&quot;https://lgtm.com/security&quot;&gt;107 CVEs&lt;/a&gt; to date in high-profile projects like UBoot, Apache Struts, the Linux Kernel, Memcached, VLC, and Apple’s XNU.&lt;/p&gt;
&lt;p&gt;Example issues detected includes regular expression injection, XSS detection, and poor code quality leading to security issues.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wide support for programming languages, including C, C++, Java, Javascript, and Python&lt;/li&gt;
&lt;li&gt;High level of detection of vulnerabilities and important code problems&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No Go support - try Deep Source below for this&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;deepsource&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#deepsource&quot; aria-label=&quot;deepsource permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DeepSource&lt;/h2&gt;
&lt;p&gt;Used by companies like NASA, Uber, and Slack, &lt;a href=&quot;https://deepsource.io&quot;&gt;DeepSource&lt;/a&gt; detects documentation coverage issues and security vulnerabilities automatically.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37.164179104477604%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAHABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3gUH/8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQABBQJ//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQAGPwJ//8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQABPyF//9oADAMBAAIAAwAAABAAD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABgQAQADAQAAAAAAAAAAAAAAAAEAESFh/9oACAEBAAE/EB1Ox0hdT//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;DeepSource&quot;
        title=&quot;DeepSource&quot;
        src=&quot;/static/45dbcdf407655505ec63ebbf98555eb9/4e7e4/deepsource.jpg&quot;
        srcset=&quot;/static/45dbcdf407655505ec63ebbf98555eb9/80465/deepsource.jpg 148w,
/static/45dbcdf407655505ec63ebbf98555eb9/dffba/deepsource.jpg 295w,
/static/45dbcdf407655505ec63ebbf98555eb9/4e7e4/deepsource.jpg 590w,
/static/45dbcdf407655505ec63ebbf98555eb9/61170/deepsource.jpg 885w,
/static/45dbcdf407655505ec63ebbf98555eb9/b04ab/deepsource.jpg 1180w,
/static/45dbcdf407655505ec63ebbf98555eb9/6a63a/deepsource.jpg 1340w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Example issues detected include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you use a module but fail to include it in your requirements management&lt;/li&gt;
&lt;li&gt;Static Application Security Testing (SAST) issues&lt;/li&gt;
&lt;li&gt;Sensitive information committed to the repository instead of a private environment file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DeepSource automatically adds annotations and comments to pull requests, making it easy to see issues and ensure good security code. This makes the &lt;em&gt;entire&lt;/em&gt; code review process quicker and ensures higher code quality across the project.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gives instant security feedback in a friendly way&lt;/li&gt;
&lt;li&gt;Easy-to-use web interface&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Limited to Python and Go&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free for all open-source public projects&lt;/li&gt;
&lt;li&gt;For private projects, from $12 per month&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;codelingo&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#codelingo&quot; aria-label=&quot;codelingo permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Codelingo&lt;/h2&gt;
&lt;p&gt;Once you’ve set standards for code quality, you need to check that they are being met. Most teams use a generic linter to do this, but there is a better way.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href=&quot;https://www.codelingo.io&quot;&gt;Codelingo&lt;/a&gt; — this tool allows you to define and check your rules programmatically in a codelingo.yaml file. &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.385685884691846%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAECAwX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHuTTQA/8QAFhABAQEAAAAAAAAAAAAAAAAAEAIy/9oACAEBAAEFAmMn/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAGhAAAgIDAAAAAAAAAAAAAAAAARAAESFRgf/aAAgBAQABPyGxqDqK8n//2gAMAwEAAgADAAAAEDAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHBABAAEEAwAAAAAAAAAAAAAAAQARITFxEFGR/9oACAEBAAE/EMhluJbU9S/TGBStXO3hn//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Codelingo&quot;
        title=&quot;Codelingo&quot;
        src=&quot;/static/09a87eed54da906cdf2844ab9033b637/4e7e4/codelingo.jpg&quot;
        srcset=&quot;/static/09a87eed54da906cdf2844ab9033b637/80465/codelingo.jpg 148w,
/static/09a87eed54da906cdf2844ab9033b637/dffba/codelingo.jpg 295w,
/static/09a87eed54da906cdf2844ab9033b637/4e7e4/codelingo.jpg 590w,
/static/09a87eed54da906cdf2844ab9033b637/61170/codelingo.jpg 885w,
/static/09a87eed54da906cdf2844ab9033b637/96d00/codelingo.jpg 1006w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The main advantage of Codelingo over generic code quality tools is that you can flexibly write rules that actually work for &lt;em&gt;your team,&lt;/em&gt; rather than being limited by a generic linter.&lt;/p&gt;
&lt;p&gt;Should the rules not be met in a pull request, Codelingo automatically comments on the pull request and notifies the contributor to be fixed. Simple.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Can define bespoke code quality rules &lt;/li&gt;
&lt;li&gt;Automatically resolves minor code quality issues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only supports PHP, Python, Go and C#&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generous free plan for public repositories&lt;/li&gt;
&lt;li&gt;$15/month per organization member, with assistance to write rules for your most significant issues&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;deepscan&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#deepscan&quot; aria-label=&quot;deepscan permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DeepScan&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://deepscan.io&quot;&gt;DeepScan&lt;/a&gt; is an advanced static analysis tool that supports JavaScript, TypeScript, React, and Vue.js.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.71641791044776%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEDBf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHYV1ZMsH//xAAZEAADAAMAAAAAAAAAAAAAAAAAAhMBEDH/2gAIAQEAAQUCmpNCaaxw/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8Bqv/EABgQAAMBAQAAAAAAAAAAAAAAAAACMpEg/9oACAEBAAY/AoUhcIXOP//EABgQAAMBAQAAAAAAAAAAAAAAAAABEDGx/9oACAEBAAE/IdeEAiCgsP/aAAwDAQACAAMAAAAQxB//xAAWEQADAAAAAAAAAAAAAAAAAAAAARH/2gAIAQMBAT8QiIj/xAAWEQEBAQAAAAAAAAAAAAAAAAAAEVH/2gAIAQIBAT8QtWv/xAAdEAEAAgEFAQAAAAAAAAAAAAABABExECFRcbHR/9oACAEBAAE/EBmyF7WfkFw5yCvIkvooTLRwT//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;DeepScan&quot;
        title=&quot;DeepScan&quot;
        src=&quot;/static/c426af68dfab63a2da7150dac27a7b12/4e7e4/deepscan.jpg&quot;
        srcset=&quot;/static/c426af68dfab63a2da7150dac27a7b12/80465/deepscan.jpg 148w,
/static/c426af68dfab63a2da7150dac27a7b12/dffba/deepscan.jpg 295w,
/static/c426af68dfab63a2da7150dac27a7b12/4e7e4/deepscan.jpg 590w,
/static/c426af68dfab63a2da7150dac27a7b12/61170/deepscan.jpg 885w,
/static/c426af68dfab63a2da7150dac27a7b12/b04ab/deepscan.jpg 1180w,
/static/c426af68dfab63a2da7150dac27a7b12/6a63a/deepscan.jpg 1340w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It automatically identifies possible runtime errors and potential quality issues, going beyond what ESLint can do by truly understanding the data-flow of your entire application.&lt;/p&gt;
&lt;p&gt;DeepScan also provides helpful metrics on team member performance and how closely they follow code standards, helping managers provide constructive feedback. &lt;/p&gt;
&lt;p&gt;We also love their grading system, which assigns your projects a simple grade of either “Poor”, “Normal”, or “Good”.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Specialist tools for JavaScript, TypeScript, React, and Vue.js projects&lt;/li&gt;
&lt;li&gt;A simple grading system for feedback&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Limits on language and library support &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free for open source projects&lt;/li&gt;
&lt;li&gt;From $15.96 per seat per month&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;codescene&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#codescene&quot; aria-label=&quot;codescene permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CodeScene&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://empear.com&quot;&gt;CodeScene&lt;/a&gt; is a behavioral code analysis tool that analyzes behavioral data as recorded in version-control systems. This lets CodeScene uncover both organizational information such as knowledge distribution, inter-team coordination bottlenecks in code, as well as prioritizing technical issues based on the estimated return on investment if the findings are addressed. &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 48.35820895522389%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAAD/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAWpOtK2l/8QAGxAAAQQDAAAAAAAAAAAAAAAAAQACAxIQEzP/2gAIAQEAAQUChA01Cq1Q8Bj/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAeEAABAgcBAAAAAAAAAAAAAAAAATECAxAhMlGRof/aAAgBAQAGPwKCyNoZOGHhLr//xAAdEAACAQQDAAAAAAAAAAAAAAAAAVEQMUFhgZGh/9oACAEBAAE/IckHAxS3A0Oh4EX0/9oADAMBAAIAAwAAABArz//EABYRAAMAAAAAAAAAAAAAAAAAAAEQQf/aAAgBAwEBPxAxf//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAAICAgMAAAAAAAAAAAAAAAABEUExoSFhsf/aAAgBAQABPxB7vmwLx7p6FaEqfFiLZidyKz//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;CodeScene&quot;
        title=&quot;CodeScene&quot;
        src=&quot;/static/b6cfd7246d184204eccf099b2c997248/4e7e4/codescene.jpg&quot;
        srcset=&quot;/static/b6cfd7246d184204eccf099b2c997248/80465/codescene.jpg 148w,
/static/b6cfd7246d184204eccf099b2c997248/dffba/codescene.jpg 295w,
/static/b6cfd7246d184204eccf099b2c997248/4e7e4/codescene.jpg 590w,
/static/b6cfd7246d184204eccf099b2c997248/61170/codescene.jpg 885w,
/static/b6cfd7246d184204eccf099b2c997248/b04ab/codescene.jpg 1180w,
/static/b6cfd7246d184204eccf099b2c997248/6a63a/codescene.jpg 1340w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore the efficiency of your organization with respect to Conway’s Law.&lt;/li&gt;
&lt;li&gt;Detect sub-systems with low team autonomy that become productivity bottlenecks.&lt;/li&gt;
&lt;li&gt;Measure the technical risk when a key developer leaves the project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Analyze up to 5 projects for free&lt;/li&gt;
&lt;li&gt;Unlimited git repos in analyses starts at $249/month&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;featurepeek&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#featurepeek&quot; aria-label=&quot;featurepeek permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;FeaturePeek&lt;/h2&gt;
&lt;p&gt;Before we go, there is one more tool for your consideration — our very own &lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 590px;&quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 39.680426098535285%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABPElEQVQoz41Sy26EMAzk/7+ut1562FYsFEhC3gFCMrWzu+0eqqqWRh45ePyie5Er3lYNS5BKYVkWxBjhvId1Dt4HpLThLzMxY9RH893rOKNXJGgdFqkgSdiRiGW4gBAT0rYjnwU5n9847mDu0w5lI0I60D2qfM4Cl48e0yKhtIWgIoxA3aX9QKSkuB0IW26JG/HtyO2Nv1HUCBfuSq0opcAaAykF5nmCEAvmaSI+YxhH9NcrhmHAKAwuS8QwSTg5YSfBSvkPK6Wi4wBjUQ7vg0D/KXGddfOGimitsVJ1YyxW5gRjOb42DjwE602wURLUsWJyFTIUCH9ijfiX8XTP6B6tpkjXDI72sbc9xeDbpY217drsDxqRk87zB78KcofOeWge0W/QIZPITZBj/AfwyDnfdsYNtN0/od5v8QXmrmzrvq3mOgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;FeaturePeek&quot;
        title=&quot;FeaturePeek&quot;
        src=&quot;/static/316e2e5e988ef3e654cf929bcb16f3d7/e1e83/featurepeek.png&quot;
        srcset=&quot;/static/316e2e5e988ef3e654cf929bcb16f3d7/00a32/featurepeek.png 148w,
/static/316e2e5e988ef3e654cf929bcb16f3d7/abe81/featurepeek.png 295w,
/static/316e2e5e988ef3e654cf929bcb16f3d7/e1e83/featurepeek.png 590w,
/static/316e2e5e988ef3e654cf929bcb16f3d7/702f0/featurepeek.png 885w,
/static/316e2e5e988ef3e654cf929bcb16f3d7/48347/featurepeek.png 1180w,
/static/316e2e5e988ef3e654cf929bcb16f3d7/19cd1/featurepeek.png 1502w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;One of the most tedious parts of the code review process is running your peers’ branches locally to confirm that their code works as expected. &lt;/p&gt;
&lt;p&gt;The truth is, many times this step simply just gets skipped. And non-technical stakeholders (such as a designer or a product manager) with no knowledge of git or frontend development &lt;em&gt;definitely&lt;/em&gt; don’t do it.&lt;/p&gt;
&lt;p&gt;With &lt;strong&gt;automated deployment previews for every pull request&lt;/strong&gt;, reviewers can see the code working, just by clicking a link, before any code gets merged into the default branch. &lt;/p&gt;
&lt;p&gt;What sets FeaturePeek apart from other deployment preview services? &lt;strong&gt;FeaturePeek overlays collaboration tools on top of every environment to empower your reviewers leave great reviews&lt;/strong&gt;. The collaboration tools include commenting, filing new issues with bug templates, screen recording, pixel measurement, and more. This functionality comes standard just by deploying to FeaturePeek — no modifications to your frontend stack required.&lt;/p&gt;
&lt;p&gt;Like all the tools in this blog post, FeaturePeek plugs into GitHub seamlessly, so getting up and running just takes a few minutes. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dashboard.featurepeek.com/login&quot;&gt;You can try FeaturePeek for free for 14 days by creating a new account here.&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ephemeral, on-demand deployment previews for every frontend pull request&lt;/li&gt;
&lt;li&gt;Floating widget on every preview makes it easy for your team to leave feedback&lt;/li&gt;
&lt;li&gt;Hosting provider / PaaS agnostic, works with static and dockerized frontends&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Let us know if you can think of any!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free for public repos&lt;/li&gt;
&lt;li&gt;$19/user/month for private repos ($16/user/month for annual commitment)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[The subtle art of giving great code reviews]]></title><description><![CDATA[Peer code review is the biggest and best thing you can do to improve the quality of your code. So much so, that in the book Code Complete…]]></description><link>https://featurepeek.com/the-subtle-art-of-giving-great-code-reviews/</link><guid isPermaLink="false">https://featurepeek.com/the-subtle-art-of-giving-great-code-reviews/</guid><pubDate>Thu, 06 Feb 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Peer code review is the biggest and best thing you can do to improve the quality of your code.&lt;/p&gt;
&lt;p&gt;So much so, that in the book &lt;a href=&quot;https://www.amazon.com/exec/obidos/ASIN/0735619670/codihorr-20&quot;&gt;Code Complete&lt;/a&gt;, Steve McConnell gives real-world examples of the dramatic impact code review can have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AT&amp;#x26;T reported a &lt;strong&gt;14% increase&lt;/strong&gt; in developer productivity and a 90 percent decrease in defects after they introduced reviews.&lt;/li&gt;
&lt;li&gt;Jet Propulsion Laboratories estimates that it &lt;strong&gt;saves about $25,000 per inspection&lt;/strong&gt; by fixing defects at an early stage.&lt;/li&gt;
&lt;li&gt;Aetna Insurance Company was able to &lt;strong&gt;decrease its development resources by 20%.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Having a second pair of eyes give your work a once-over can help prevent mission-critical bugs from entering into the wild. And you can learn a thing or two along the way. &lt;/p&gt;
&lt;h2 id=&quot;so-what-exactly-is-a-code-review&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#so-what-exactly-is-a-code-review&quot; aria-label=&quot;so what exactly is a code review permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;So, what exactly is a code review?&lt;/h2&gt;
&lt;p&gt;A code review happens once a developer has submitted a contribution to the project.&lt;/p&gt;
&lt;p&gt;This is known as a ‘pull request’, and you can read a detailed definition and learn how to use them effectively in &lt;a href=&quot;/blog/why-are-so-many-orgs-slow-to-approve-pull-requests/&quot;&gt;our previous article&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Before this contribution can be added to the project, other team members will review the code, checking for issues, suggesting improvements and ensuring overall product quality.&lt;/p&gt;
&lt;p&gt;This code review can take place whether the team feels most comfortable. It could be comments on Github, a chat on Slack, via Skype or in person. &lt;/p&gt;
&lt;h2 id=&quot;what-are-the-benefits-of-a-code-review-to-your-team&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-are-the-benefits-of-a-code-review-to-your-team&quot; aria-label=&quot;what are the benefits of a code review to your team permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What are the benefits of a code review to your team?&lt;/h2&gt;
&lt;p&gt;The benefits of code review are obvious — you’ll discover bugs, improve code quality and build better projects, too.&lt;/p&gt;
&lt;p&gt;But the major benefits of code review are about &lt;em&gt;people&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;Sure, you can use testing, but the statistics seriously speak for themselves — the average defect detection rate is only 25% for unit testing, 3% for function testing, and 45% for integration testing. &lt;/p&gt;
&lt;p&gt;Therefore, your code reviews must never be &lt;em&gt;entirely&lt;/em&gt; automated. Instead, try incorporating some of these ideas into the process: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sharing Knowledge:&lt;/strong&gt; When programming, there are often several ways to solve a problem. Reflecting on why this particular approach was chosen reveals hidden knowledge. For example, the reviewee might have a different understanding of the architecture of the application, a superior knowledge of the technology being used or is lacking a key skill — all of which are opportunities to share knowledge. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Estimates:&lt;/strong&gt; When estimates are wrong, code reviews are an opportunity to see where the hidden complexities or difficulties were. This leads to more accurate estimates in the future.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mentoring:&lt;/strong&gt; Code reviews can uncover areas for improvement and self-development, which is invaluable to any reviewee. It can also be valuable for the reviewer, who will learn by teaching others.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check requirements:&lt;/strong&gt; Code reviews are the perfect opportunity for agile teams to return to the user story acceptance criteria and check that requirements are met. For added insight, involve stakeholders, designers, and product managers with review tools like &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-to-give-great-code-reviews&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-to-give-great-code-reviews&quot; aria-label=&quot;how to give great code reviews permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How to give great code reviews&lt;/h2&gt;
&lt;h3 id=&quot;always-give-constructive-feedback&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#always-give-constructive-feedback&quot; aria-label=&quot;always give constructive feedback permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Always give constructive feedback&lt;/h3&gt;
&lt;p&gt;Nobody likes being criticized, especially by their fellow team members. For a code review to be great, the reviewer must balance being positive with avoiding code defects.&lt;/p&gt;
&lt;p&gt;The first step is to &lt;strong&gt;remove the &lt;em&gt;stigma&lt;/em&gt; from reviews&lt;/strong&gt;. Bugs should not be seen as negatives, but instead as an opportunity to teach, fix bad habits and to improve code quality. &lt;/p&gt;
&lt;p&gt;This means that the number of errors produced by each team member should not be tracked, nor used in performance evaluation reviews. &lt;/p&gt;
&lt;p&gt;The next step is to reframe the code review as a &lt;em&gt;coaching opportunity&lt;/em&gt;. Instead of harsh criticisms, employ the &lt;a href=&quot;https://en.wikipedia.org/wiki/Socratic_method&quot;&gt;Socratic method&lt;/a&gt;. The most effective way to do this is to &lt;strong&gt;encourage self-evaluation by asking questions&lt;/strong&gt;, paving the way while helping them discover it for themselves. Just like this: &lt;/p&gt;
&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;Critical Feedback  🙀&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;&lt;strong&gt;Constructive Feedback 😸 &lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;&lt;strong&gt;Outcome 😻&lt;/strong&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&quot;Why doesn&apos;t this have test coverage?&quot;
   &lt;/td&gt;
   &lt;td&gt;&quot;How could more test coverage benefit us as a team?&quot;
   &lt;/td&gt;
   &lt;td&gt;Improved understanding of test coverage
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&quot;This function is terrible / complicated!&quot;
   &lt;/td&gt;
   &lt;td&gt;&quot;How could we improve this function to make it simpler?&quot;
   &lt;/td&gt;
   &lt;td&gt;Future functions will be easier to understand
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;This doesn&apos;t match the design!
   &lt;/td&gt;
   &lt;td&gt;&quot;Looks good, but it&apos;s different from the design — was there some complexity in implementing the design as specified?&quot;
   &lt;/td&gt;
   &lt;td&gt;Identify issues with requirements or skills
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;If one of your reviewers is struggling with constructive feedback, coaching or relationship training might also be appropriate — &lt;strong&gt;the goal is to always keep your team feeling motivated&lt;/strong&gt; and ready to do their best work! &lt;/p&gt;
&lt;h3 id=&quot;agree-standards-and-follow-them&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#agree-standards-and-follow-them&quot; aria-label=&quot;agree standards and follow them permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Agree standards and follow them&lt;/h3&gt;
&lt;p&gt;Positive peer pressure is a powerful tool. As developers know that their peers will see their code during the review process, allow them to improve their code before submitting it. After all, we all want to look good in front of our team members!&lt;/p&gt;
&lt;p&gt;So, follow these steps to ensure that each reviewer is doing the best they can:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agree a definition of ‘good code’ with your team. This might include formatting, commenting, security considerations or other considerations unique to your industry or team. Use a &lt;a href=&quot;https://github.com/eslint/eslint&quot;&gt;linter&lt;/a&gt; if you aren’t already. It should also include a summary of how to make a pull request that can be reviewed quickly — &lt;a href=&quot;/blog/why-are-so-many-orgs-slow-to-approve-pull-requests/#how-can-you-speed-up-pull-requests&quot;&gt;see our guide to authoring better pull requests&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Include a ‘good code’ checklist in every pull request. The submitter must complete this pull request.&lt;/li&gt;
&lt;li&gt;The reviewer should check the code to ensure this checklist is accurately completed. &lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;always-be-timely&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#always-be-timely&quot; aria-label=&quot;always be timely permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Always be timely&lt;/h3&gt;
&lt;p&gt;Code reviews are blockers — until a review has been completed and the code merged, the next stage cannot be completed. If issues are identified, the developer might need to redo work, slowing development further.&lt;/p&gt;
&lt;p&gt;Resolve this issue by agreeing to complete code reviews within a certain amount of time. For example, you could agree to have the code review completed and pull requests merged within 2 business days. &lt;/p&gt;
&lt;p&gt;Of course, a goal without a plan is just a wish. Therefore, make plans to ensure success, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow your reviewers to prioritize reviews over other tasks when required, and never penalize them for missing deadlines as a result.&lt;/li&gt;
&lt;li&gt;Assign more reviewers as needed. &lt;/li&gt;
&lt;li&gt;Reduce the number of approvals required. Some teams require 2 reviewers to approve before merging — if this is a blocker for your product, ask yourself: is this always necessary?&lt;/li&gt;
&lt;li&gt;Measure the time taken to complete pull requests and seek feedback and suggestions for improvements regularly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;so-are-you-ready-to-give-great-code-reviews&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#so-are-you-ready-to-give-great-code-reviews&quot; aria-label=&quot;so are you ready to give great code reviews permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;So, are you ready to give great code reviews?&lt;/h2&gt;
&lt;p&gt;Now you know how to give great code reviews that improve code quality and improve team productivity, your next step is to automate and systemize where possible. Try adding &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; into your review workflow to reduce the friction of doing peer code reviews today. &lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why are so many organizations slow to approve pull requests?]]></title><description><![CDATA[Pull requests can be notoriously cumbersome and slow to approve, causing a ripple effect of problems as a result.  What exactly is a pull…]]></description><link>https://featurepeek.com/why-are-so-many-orgs-slow-to-approve-pull-requests/</link><guid isPermaLink="false">https://featurepeek.com/why-are-so-many-orgs-slow-to-approve-pull-requests/</guid><pubDate>Thu, 23 Jan 2020 12:12:03 GMT</pubDate><content:encoded>&lt;p&gt;Pull requests can be notoriously cumbersome and slow to approve, causing a ripple effect of problems as a result. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What exactly &lt;em&gt;is&lt;/em&gt; a pull request, and why can they be so tricky for developers to push through? Most importantly, what can be done to minimize the problem?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-exactly-is-a-pull-request&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-exactly-is-a-pull-request&quot; aria-label=&quot;what exactly is a pull request permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What exactly is a pull request?&lt;/h2&gt;
&lt;p&gt;Put simply, a pull request is how developers submit their contributions. &lt;/p&gt;
&lt;p&gt;At its most basic form, a pull request contains the changes made to the code of the project. The best pull requests will contain a description of &lt;strong&gt;what&lt;/strong&gt; has changed, &lt;strong&gt;why&lt;/strong&gt; those changes have been made, and facilitate &lt;strong&gt;discussion&lt;/strong&gt; between developers, product managers, and designers. &lt;/p&gt;
&lt;p&gt;The pull request can then be code reviewed, checked for bugs and feedback given. Finally, the code is given the green light, and the changes get merged to the master codebase.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At least, this is how it &lt;em&gt;should&lt;/em&gt; work in an ideal world.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the real world, though, software is messy and pull requests can get complicated. &lt;/p&gt;
&lt;p&gt;They can even conflict with each other, preventing the code from being merged into the main project. This results in a delay in the pull request from being approved, which ultimately leads to a huge blocker for the project overall. &lt;/p&gt;
&lt;p&gt;Worse still, there’s a direct correlation between the duration of a pull request and business spend. Making it quite a costly issue to have. &lt;/p&gt;
&lt;p&gt;But why does this happen? And is there anything that developers can do to limit this risk? &lt;/p&gt;
&lt;h2 id=&quot;why-can-pull-requests-take-a-long-time-to-approve&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#why-can-pull-requests-take-a-long-time-to-approve&quot; aria-label=&quot;why can pull requests take a long time to approve permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Why can pull requests take a long time to approve?&lt;/h2&gt;
&lt;p&gt;The three most common reasons for slow pull requests are: &lt;/p&gt;
&lt;h3 id=&quot;1-they-are-difficult-to-deploy&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-they-are-difficult-to-deploy&quot; aria-label=&quot;1 they are difficult to deploy permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. They are difficult to deploy&lt;/h3&gt;
&lt;p&gt;It is often very time-consuming for a reviewer to download the branch, make sure it works locally, and check that everything works as expected.&lt;/p&gt;
&lt;p&gt;This is particularly true for non-technical stakeholders (such as a UXer or a product manager) who might not even know how to run the application locally.&lt;/p&gt;
&lt;p&gt;This is where review tools like &lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt; shine. With automated deployment for every pull request, reviewers can see the code working instantly on a web page and give feedback quickly. Even better, it’ll automatically remind the reviewer on Slack that they need to approve the pull request, to avoid unnecessary delays.&lt;/p&gt;
&lt;h3 id=&quot;2-there-are-merge-conflicts&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-there-are-merge-conflicts&quot; aria-label=&quot;2 there are merge conflicts permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. There are merge conflicts&lt;/h3&gt;
&lt;p&gt;Merge conflicts occur when two branches have made changes to the same line in a file, or one branch has deleted a file. There’s no two ways about it: merge conflicts are bad news when it comes to approving a pull request. &lt;/p&gt;
&lt;p&gt;The good news, though, is that they can be avoided by following these 3 simple rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keep the changes in your branch as small as possible&lt;/strong&gt; — With fewer code changes, it is less likely conflicts will occur. Many small changes are better than few large changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebase from master when it changes&lt;/strong&gt; – This updates your branch with the latest version of the master, so you can resolve any conflicts locally. This essentially rewrites the order of the commit history, so if you’ve already pushed your branch, you’ll have to force-push for the change to land upstream.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review pull requests faster and more frequently&lt;/strong&gt; — The longer a pull request stays open, the more likely the code will be behind merged changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-you-have-bad-pull-request-etiquette&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-you-have-bad-pull-request-etiquette&quot; aria-label=&quot;3 you have bad pull request etiquette permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. You have bad pull request etiquette&lt;/h3&gt;
&lt;p&gt;If your team is submitting complicated pull requests that are difficult to understand, you’ll lose productivity quickly. The good news is, there are some relatively simple rules that all developers can follow to make sure that their pull request etiquette is optimized for success.&lt;/p&gt;
&lt;p&gt;In a nutshell, the best pull requests are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Submitted frequently&lt;/strong&gt; — Submitting pull requests frequently means that likely only a small amount of code has changed, making it simpler to explain and less likely to have unintended impacts on other areas. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As small as possible&lt;/strong&gt; — Breaking down a big change into many smaller requests makes the code &lt;em&gt;much&lt;/em&gt; easier to review. There is no rule for the number of lines of code, as every project is different, but agree on a reasonable limit with your team.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Well documented&lt;/strong&gt; — Pull requests should contain summary notes for the reviewer on what has changed. This makes it much easier to review. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In line with the Single Responsibility Principle&lt;/strong&gt; — Code changes should aim to only solve &lt;em&gt;one&lt;/em&gt; problem. If a piece of code affects a lot of the rest of the code in the project it becomes very difficult to test, slowing down the review process.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It helps a lot to have a &lt;a href=&quot;https://featurepeek.com&quot;&gt;preview link&lt;/a&gt; in every pull request, so that reviewers don’t have to run your code locally.&lt;/p&gt;
&lt;h2 id=&quot;how-can-you-speed-up-pull-requests&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-can-you-speed-up-pull-requests&quot; aria-label=&quot;how can you speed up pull requests permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How can you speed up pull requests?&lt;/h2&gt;
&lt;p&gt;If your pull requests take a long time to review and it’s slowing development and innovation, try these 6 quick tips to unlock increased developer productivity:&lt;/p&gt;
&lt;h3 id=&quot;1-automate-deployment&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-automate-deployment&quot; aria-label=&quot;1 automate deployment permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Automate deployment&lt;/h3&gt;
&lt;p&gt;When a pull request is made, use an &lt;a href=&quot;https://featurepeek.com&quot;&gt;automated deployment tool&lt;/a&gt; to make an instant preview of the change available.  This also enables non-technical stakeholders to see changes instantly, helping to keep your team on track.&lt;/p&gt;
&lt;h3 id=&quot;2-write-great-commit-messages&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-write-great-commit-messages&quot; aria-label=&quot;2 write great commit messages permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. Write great commit messages&lt;/h3&gt;
&lt;p&gt;Commit messages tell the story of how the code was written and what issues were overcome. By making these detailed, it’s easier to understand the whole pull request and therefore review it much more quickly. &lt;/p&gt;
&lt;p&gt;A great commit message has a subject that briefly explains what you did and a body that explains &lt;strong&gt;what&lt;/strong&gt; you’ve done, &lt;strong&gt;how&lt;/strong&gt; you’ve done it and &lt;strong&gt;why&lt;/strong&gt; you did it in that way.&lt;/p&gt;
&lt;p&gt;If you haven’t already, decide with your team if you’d like to follow a &lt;a href=&quot;https://www.conventionalcommits.org/en/v1.0.0/&quot;&gt;commit message convention&lt;/a&gt;. This will help automatically decide release version numbers by following &lt;a href=&quot;https://semver.org&quot;&gt;semantic versioning&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;3-set-and-enforce-good-pull-request-etiquette&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-set-and-enforce-good-pull-request-etiquette&quot; aria-label=&quot;3 set and enforce good pull request etiquette permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Set and enforce good pull request etiquette&lt;/h3&gt;
&lt;p&gt;In the next planning meeting or sprint retrospective, write down a few simple rules and agree to hold each other to account (Remember: a good pull request is small, well-documented and follows the &lt;a href=&quot;https://en.wikipedia.org/wiki/Single_responsibility_principle&quot;&gt;single responsibility principle&lt;/a&gt;.) &lt;/p&gt;
&lt;p&gt;If pull requests continue to be slow, ask your pull request approvers to always reject pull requests which don’t meet these rules. You’ll lose productivity in the short term, but set good behaviors for the future.&lt;/p&gt;
&lt;h3 id=&quot;4-detox-your-code-reviews&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-detox-your-code-reviews&quot; aria-label=&quot;4 detox your code reviews permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. Detox your code reviews&lt;/h3&gt;
&lt;p&gt;Code reviews are an essential part of the pull request approval process, but can be toxic and painfully slow. You can detox code review by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Peer review&lt;/strong&gt; — Many organizations only allow senior developers or managers to review code, creating a gatekeeper. Make code reviews feel more collaborative by encouraging peers to review each others code instead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Being constructive&lt;/strong&gt; — It goes without saying: don’t only say negative things in a review, even if the code must be rejected. Find the good parts of their code to celebrate, and frame criticism constructively as an opportunity for growth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automation&lt;/strong&gt; — Set code standards and enforce them automatically with code quality analysis tools. This provides instant code review against defined standards, improving code quality without an awkward code review meeting.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;5-add-more-reviewers&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5-add-more-reviewers&quot; aria-label=&quot;5 add more reviewers permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5. Add more reviewers&lt;/h3&gt;
&lt;p&gt;If you’ve made all the changes above and pull requests are still slow, it might be an issue with your reviewers. Ask your existing reviewers how you can help them review more quickly — it might be a simple matter of not having enough time or the right frontend review &lt;a href=&quot;https://featurepeek.com/&quot;&gt;tools in your workflow&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Code-review-as-a-service tool &lt;a href=&quot;https://www.pullrequest.com&quot;&gt;PullRequest&lt;/a&gt; recommends having at least two reviewers per PR: one who has knowledge of the particular code being changed, and one who doesn’t (a neutral third-party). It’s even recommended to have someone review a language they’re unfamiliar with over not having anyone review at all.&lt;/p&gt;
&lt;h3 id=&quot;6-avoid-merge-conflicts&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6-avoid-merge-conflicts&quot; aria-label=&quot;6 avoid merge conflicts permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6. Avoid merge conflicts&lt;/h3&gt;
&lt;p&gt;Resolving merge conflicts drains time, enthusiasm and productivity from developer teams. Most are unnecessarily caused by bad pull-request etiquette, so following the other tips in this article should reduce them.  &lt;/p&gt;
&lt;h2 id=&quot;are-you-ready-to-fix-your-pull-request-bottlenecks&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#are-you-ready-to-fix-your-pull-request-bottlenecks&quot; aria-label=&quot;are you ready to fix your pull request bottlenecks permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Are you ready to fix your pull request bottlenecks?&lt;/h2&gt;
&lt;p&gt;Once you’ve encouraged your team to follow good pull request etiquette, document clearly and fix toxic review habits, the next step is to automate as much of the pull request process as possible. Try adding &lt;a href=&quot;https://featurepeek.com/&quot;&gt;FeaturePeek&lt;/a&gt; into your review workflow to reduce the friction of approving pull requests. &lt;/p&gt;</content:encoded></item><item><title><![CDATA[Where should your team review your frontend changes?]]></title><description><![CDATA[TL;DR: Ask for visual feedback on your new frontend features in isolated remote environments. You can quickly achieve this setup with…]]></description><link>https://featurepeek.com/where-should-your-team-review-your-frontend-changes/</link><guid isPermaLink="false">https://featurepeek.com/where-should-your-team-review-your-frontend-changes/</guid><pubDate>Tue, 26 Nov 2019 12:12:03 GMT</pubDate><content:encoded>&lt;!--_This article intended to be read by frontend engineers, full-stack engineers, and web developer generalists._--&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Ask for visual feedback on your new frontend features in isolated remote environments. You can quickly achieve this setup with &lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt;, a new service that enables frontend deployment previews for static and containerized web apps regardless of cloud provider.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You’ve just finished developing a new feature&lt;/strong&gt; for your web app, and you’re ready to get feedback from the rest of your team. You’re pretty sure it’s what your designer intended in their prototypes, although you had to take &lt;em&gt;a few&lt;/em&gt; liberties – you did some guesswork when mockups for tablet breakpoints weren’t supplied, and you had to come up with a workaround or two due to a technical constraint. You want to get some feedback on your work before rolling out the feature to production. &lt;/p&gt;
&lt;p&gt;Engineers can leave feedback on GitHub or similar during code review, but this part of the &lt;a href=&quot;https://blog.ycombinator.com/product-development-cycle-fundamentals/&quot;&gt;product development lifecycle&lt;/a&gt; isn’t accessible to those in non-code-savvy roles. What’s the best way to open up your work to the rest of your team? &lt;/p&gt;
&lt;p&gt;Let’s explore some options. Ideally, we’d want a solution that: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduces the duration of feedback loops&lt;/strong&gt; between cross-functional teams. You should be able to send a link for someone to review as soon as &lt;em&gt;you&lt;/em&gt; are ready, not as soon as your internal infrastructure allows you to be ready.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Circumvents performing code review on the same feature twice.&lt;/strong&gt; You shouldn’t depend on your developer peers to finish reviewing your code before you’re able to share your work with someone else on your team. If you receive feedback to make changes, your peers will have to do code review &lt;em&gt;again&lt;/em&gt; for what is essentially the same feature.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Requires as little maintenance and code changes as possible.&lt;/strong&gt; You shouldn’t have to spend time building infrastructure to support a basic review process. If possible, you’d like to lean on an existing tool that has already solved this problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;in-person-or-screensharing-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#in-person-or-screensharing-&quot; aria-label=&quot;in person or screensharing  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;In person (or screensharing) 👎&lt;/h1&gt;
&lt;p&gt;While rolling up to your colleague’s desk (or &lt;a href=&quot;https://tandem.chat&quot;&gt;virtual desk&lt;/a&gt; if your team is remote) can clear up quick clarifying questions, it poses problems when trying to gather detailed critique. Common pitfalls include: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scheduling common availability is difficult.&lt;/strong&gt; What if your reviewer is in a meeting? Or working heads-down on an upcoming deliverable? You both need to have uninterruptible availability to get their feedback synchronously. Trying to get two people’s schedule to sync up is too time-intensive and breaks their flow, especially in fast-moving startups. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You miss out widening your surface area of test cases.&lt;/strong&gt; When you show someone a feature that you’ve coded up on your own machine, you are forgoing the opportunity to apply variance to it.  How does it respond to production data? Does it require a font that is only installed locally? How does it behave when you’re logged in under a different user account? You’ve tested responsiveness in Chrome DevTools — how about on a real device? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You become responsible for taking notes of reviewer feedback.&lt;/strong&gt; You can jot reviewer feedback down while in person, or create a quick todo list, but ad-hoc review that exists outside of formal tools is undocumented and bound to slip through the cracks. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The productivity benefits of &lt;a href=&quot;https://blog.remote.com/why-you-should-be-doing-async-work/&quot;&gt;asynchronous communication&lt;/a&gt; are clear. You should avoid collecting feedback synchronously whenever possible.&lt;/p&gt;
&lt;h1 id=&quot;local-dev-server-tunnel-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#local-dev-server-tunnel-&quot; aria-label=&quot;local dev server tunnel  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Local dev server tunnel 👎&lt;/h1&gt;
&lt;p&gt;How about opening a tunnel to your local development server’s running port? You could use &lt;a href=&quot;https://ngrok.com&quot;&gt;ngrok&lt;/a&gt; to expose a port so that someone outside of your LAN could access your local dev server. &lt;/p&gt;
&lt;p&gt;There are lots of problems with this approach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Your machine must be powered on and online.&lt;/strong&gt; As soon as you close your laptop, the bridge to your dev server is terminated. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You can’t checkout another branch while the tunnel is live.&lt;/strong&gt; If you wanted to show someone something on a specific branch, you’d have to stay on that branch. This means that you are blocked from working on anything else.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your reviewers aren’t getting a production build.&lt;/strong&gt; Instead, what they’re seeing is the development build, which isn’t as performant as what eventually gets pushed to production.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;local-build-during-code-review-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#local-build-during-code-review-&quot; aria-label=&quot;local build during code review  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Local build during code review 👎&lt;/h1&gt;
&lt;p&gt;As a developer, you’re familiar with conducting code review when your coworkers open pull requests. The code may look correct… but does it work? A good way to test if it works is to run the code yourself. However, to do that on your own machine requires you to jump through a few hoops. The following flow should look all too familiar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stop what you’re doing &lt;/li&gt;
&lt;li&gt;Stash any unstaged changes&lt;/li&gt;
&lt;li&gt;Fetch from origin&lt;/li&gt;
&lt;li&gt;Checkout their branch&lt;/li&gt;
&lt;li&gt;Install dependencies (and potentially restart your development server)&lt;/li&gt;
&lt;li&gt;➡️ &lt;strong&gt;Actually verify the new feature and provide feedback&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Checkout your original branch&lt;/li&gt;
&lt;li&gt;Pop your git stash&lt;/li&gt;
&lt;li&gt;Reinstall dependencies (and potentially restart your development server)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can see the trouble with this — there are &lt;strong&gt;many steps you must accomplish before and after verifying&lt;/strong&gt; that make the task a tedious effort. Most of the cognitive load of verifying someone else’s feature on your machine comes from stopping what you’re doing. &lt;/p&gt;
&lt;p&gt;Furthermore, unless your entire team is fluent with git, this option is only available to developers. What about the non-developers on your team?&lt;/p&gt;
&lt;h1 id=&quot;staging-or-qa-server-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#staging-or-qa-server-&quot; aria-label=&quot;staging or qa server  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Staging or QA server 👎&lt;/h1&gt;
&lt;p&gt;Your continuous integration pipeline builds the latest changes from a protected branch in your git repo, and deploys the build to an internal server. It seems like a safe place to review new features, because it’s a close representation of what production will look like when it eventually goes out the door. However, there are some problems with using this traditional method: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feedback from reviewers causes more code review.&lt;/strong&gt; When you ask someone for feedback on your work, they will most likely respond with at least &lt;em&gt;some&lt;/em&gt; critique, which will require code changes to fix.  Your developer peer must be asking themselves, “Didn’t I already review this feature?” You should aim to have every new feature only go through code review once to avoid bottlenecks in your workflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Other developers could break your changes.&lt;/strong&gt; The problem with this approach is that other developers on your team could inadvertently merge a change of theirs that breaks the functionality of your new feature. By passing around a link to an environment that gets fed from top-of-tree, you aren’t guaranteeing that your feature is isolated. By the time your reviewer tests your new feature, a part of it (or the whole thing!) could not function as intended, even though it worked when it was on its own branch. Not only does this waste your reviewer’s time, but it causes them to think that you incompetently didn’t perform a basic test of your own work. A better option would be to guarantee that the code you push is the code your reviewer tests — this is what we mean when we say &lt;strong&gt;you should test features in isolation&lt;/strong&gt;. A staging / QA environment is great for testing a whole release, not individual features. &lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;feature-environments-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#feature-environments-&quot; aria-label=&quot;feature environments  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Feature environments 👍&lt;/h1&gt;
&lt;p&gt;The best place to review your feature is on the feature branch itself. Ideally, as soon as you push your branch to your repo, your CI builds an image that is deployed to a dedicated host. &lt;strong&gt;Feature environments are automatic and ephemeral&lt;/strong&gt;, orchestrated via webhooks from your repo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Asynchronous.&lt;/strong&gt; No scheduling calendars, syncing up for in-person walkthroughs, or tunneling to your local dev server.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instant.&lt;/strong&gt; No need to wait for unit tests or code review to pass before you can get feedback from designers, marketers, or other stakeholders on your team. No need to checkout branches and install dependencies just to verify your coworker’s code. Shorten feedback loops with your reviewers so that you don’t need to ask your developer peers to review the same feature multiple times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accurate.&lt;/strong&gt; You can find more issues ahead of time by running your code on a machine that isn’t your local dev box. Rest assured that what you see is what you will deploy, because your build comes from your CI server.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Isolated.&lt;/strong&gt; Since the feature environment spins up from &lt;em&gt;your&lt;/em&gt; branch, no one else will accidentally break your feature. Reviewers won’t be upset that your feature clearly doesn’t work. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Imagine every pull request in your repo having its own live, up-to-date environment. Links to the environment are posted as a comment in your pull request, and to a Slack channel. As soon as your feature gets merged, the environment gets torn down.&lt;/p&gt;
&lt;h1 id=&quot;feature-environments-as-a-service-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#feature-environments-as-a-service-&quot; aria-label=&quot;feature environments as a service  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Feature environments as a service 👍👍&lt;/h1&gt;
&lt;p&gt;Developing the infrastructure in-house to support feature environments yourself takes developer time and ongoing maintenance. You should instead focus on building the product(s) that are core to your business. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://featurepeek.com&quot;&gt;FeaturePeek&lt;/a&gt; is a feature-environments-as-a-service platform that integrates with your GitHub organization. In just a few clicks, you can start building on-demand feature environments for every frontend pull request. On top of that, &lt;strong&gt;FeaturePeek overlays feedback and collaboration tools over every feature environment&lt;/strong&gt;, so your reviewers can leave comments, file bugs, attach screen recordings, and more — all from the context of the environment itself.&lt;/p&gt;
&lt;p&gt;We launched to solve this problem that we’ve seen so many small- to medium-sized companies encounter. &lt;a href=&quot;https://dashboard.featurepeek.com&quot;&gt;Start a free trial today&lt;/a&gt; and let us know what you think. &lt;/p&gt;</content:encoded></item></channel></rss>