<?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" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Culture - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Culture - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 04 Jun 2026 05:20:33 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/culture/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Lessons I learned in my first months as a non-traditional software engineer ]]>
                </title>
                <description>
                    <![CDATA[ By Kalalau Cantrell I am about 3 months into my journey as a new software engineer. I work at a place where the bar is high for what it means to craft quality software. My peers are well-educated and highly disciplined engineers with many years of ex... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/lessons-i-learned-in-my-first-months-as-a-non-traditional-software-engineer-ac2ada05ba14/</link>
                <guid isPermaLink="false">66c35a2e9de50ee9ca7fa6e1</guid>
                
                    <category>
                        <![CDATA[ Culture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 22 Apr 2019 16:22:54 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*VQHcr8rqEd56zFj52mG6dA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Kalalau Cantrell</p>
<p>I am about 3 months into my journey as a new software engineer. I work at a place where the bar is high for what it means to craft quality software. My peers are well-educated and highly disciplined engineers with many years of experience. Those conditions alone would be enough to cause someone new to wonder things like “Am I good enough to be here?” or “Will I be able to keep up?”</p>
<p>To top it off, however, I have the fact that my background in software is non-traditional. My degree is in music and I am self-taught in programming. You can probably imagine the kind of <a target="_blank" href="https://en.wikipedia.org/wiki/Impostor_syndrome">impostor syndrome</a> that someone in my position might feel when surrounded by people who are so smart and credentialed.</p>
<p><strong>The self-doubt could have been paralyzing. But, somehow it didn’t last very long at all.</strong></p>
<p>So, how did that happen? How did the doubt give way to the enthusiasm to learn and grow that I mostly feel today? I made a list of 31 experiences that helped me embrace being new and non-traditional rather than fearing it. I studied the list and in it noticed three patterns, which I’ve formed into lessons, that I’d like to share with you.</p>
<p>To keep this post at a nice length, I kept the actual list out but you can <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md">view it here</a> if you’d like to read about each experience. I cite related experiences in brackets throughout the post (e.g. [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#23-company-has-a-bi-monthly-stand-up-to-discuss-new-things-the-organization-wants-to-learn">23</a>]). Below are the three lessons that I gleaned from pondering the list and reflecting on each experience.</p>
<h3 id="heading-be-vulnerable">Be Vulnerable</h3>
<p>Resist the urge to hide your ignorance. It is natural to want to appear invulnerable. You don’t want to look like you don’t know what you’re doing, right? I’ve observed, however, that any effort put toward appearing invulnerable is an effort that does not go toward overcoming your ignorance. It makes it much harder to learn and grow if you never let yourself feel safe.</p>
<p>An easy way to check that you’re in a safe place is to show some vulnerability. If someone asks you whether you understand something, try revealing that you may have gaps in your understanding [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#11-team-members-constantly-check-if-i-understand-and-when-they-do-ive-erred-on-the-side-of-being-open-to-a-teaching-moment-rather-than-trying-to-prove-what-i-know-ive-noticed-that-the-team-jumps-on-the-opportunity-to-help-me-learn-this-attitude-is-well-described-by-the-expose-your-ignorance-pattern-in-the-book-apprenticeship-patterns">11</a>]. If you find that your vulnerability is met with support and encouragement, you are among great people. You are in a prime environment to learn and grow.</p>
<p>Thankfully, the place I work makes it pretty easy to show vulnerability [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#1-company-gave-me-the-title-of-apprentice">1</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#10-project-manager-said-you-contribute-to-the-team-on-day-one-because-newer-people-asking-questions-helps-more-experienced-people-get-a-deeper-understanding-of-their-skills-too">10</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#15-during-an-all-company-meeting-president-began-an-announcement-about-a-sensitive-topic-by-saying-i-may-not-say-this-100-correctly-but-give-me-some-grace-and-hear-what-im-really-trying-to-say-here-showing-an-attitude-of-vulnerability-toward-the-members-of-his-company">15</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#17-experienced-team-member-said-dont-worry-i-literally-just-learned-this-a-few-months-ago-when-talking-about-the-reselect-js-library-this-made-me-realize-theres-no-need-to-appear-invulnerable">17</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#18-well-regarded-engineer-in-the-company-said--please-challenge-me-on-this-idea-i-think-im-looking-for-some-accountability-when-sharing-his-opinion-on-the-importance-of-detailed-commit-messages-this-made-me-realize-that-even-the-smartest-engineers-can-show-vulnerability">18</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#19-member-of-leadership-team-said-im-still-figuring-out-how-best-to-do-my-job-during-a-new-hire-orientation-type-of-meeting">19</a>]. It makes it much easier to show vulnerability when those around you do it, too, especially those in leadership positions [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#15-during-an-all-company-meeting-president-began-an-announcement-about-a-sensitive-topic-by-saying-i-may-not-say-this-100-correctly-but-give-me-some-grace-and-hear-what-im-really-trying-to-say-here-showing-an-attitude-of-vulnerability-toward-the-members-of-his-company">15</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#17-experienced-team-member-said-dont-worry-i-literally-just-learned-this-a-few-months-ago-when-talking-about-the-reselect-js-library-this-made-me-realize-theres-no-need-to-appear-invulnerable">17</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#18-well-regarded-engineer-in-the-company-said--please-challenge-me-on-this-idea-i-think-im-looking-for-some-accountability-when-sharing-his-opinion-on-the-importance-of-detailed-commit-messages-this-made-me-realize-that-even-the-smartest-engineers-can-show-vulnerability">18</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#19-member-of-leadership-team-said-im-still-figuring-out-how-best-to-do-my-job-during-a-new-hire-orientation-type-of-meeting">19</a>].</p>
<h3 id="heading-value-your-relationships-as-much-as-your-technical-skills">Value your relationships as much as your technical skills</h3>
<p>When you’re ramping up, technical skills are important but they are only part of the equation. It’s easy to focus too narrowly on “what you know” and “what you can do” and neglect the benefits that come from connecting with your peers. I’ve experienced, however, that the greatest strides in ramping up are made once you’ve established a relationship with your team.</p>
<p>Many of the experiences that helped me feel more comfortable as a new engineer were not related to gaining or demonstrating technical skills [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#4-company-assigned-me-a-personal-guide-on-day-one">4</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#5-scrum-master-of-my-team-said-well-get-you-there-moments-after-getting-to-know-me">5</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#8-team-asked-for-my-input-during-standup-and-pair-programming-within-my-first-few-days-of-starting-with-them">8</a>]. Even the experiences that had some technical qualities about them [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#6-team-had-me-pair-programming-within-a-day-of-starting-with-them">6</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#27-team-had-me-do-my-first-pr-within-my-3rd-sprint-with-them-quickly-followed-by-my-2nd-and-3rd">27</a>] were helpful to me not necessarily because they involved technical achievements but more so because they involved accomplishments I made <strong>with my team</strong>.</p>
<h3 id="heading-overcoming-your-ignorance-is-a-lifelong-journey-so-go-at-a-pace-that-makes-sense-for-you">Overcoming your ignorance is a lifelong journey, so go at a pace that makes sense for you</h3>
<p>It is a journey but you may sometimes feel the compulsion to treat it like a race. If you’re like me, you have a “things-to-learn” list that only seems to get longer and there never seems to be enough time in a day for crossing things off of it. But that is just a perception. If you carry that perception, you will find yourself rushing.</p>
<p>Rush for long enough and you start to appreciate just how long the trail really is. Rushing is tiring. Pause for a moment and realize that you have the rest of your career to cross things off that list. You need to find a pace that is sustainable for the long haul.</p>
<p>The right pace will be different for each person depending on their home situation, their personal goals, and their career goals. I have a family at home but I manage to find regular time for professional development because at this stage in my career, it is a high priority for me.</p>
<p>My current pace is 60–90 minutes every night or so after my family goes to bed. I spend this time either getting extra practice with the tools I use at work, playing with technologies that I’m just interested in, or reading books and blogs [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#31-60---90-minutes-every-night-or-so-of-learning-time-reading-side-projects-experimenting-with-code">31</a>]. It’s only been about 3 months, but I can already tell that making this investment is like taking steps on the long trail toward overcoming my ignorance.</p>
<p>I’m fortunate that my employer regularly hosts events that promote continual learning [<a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#13-company-encouraged-me-to-purchase-any-learning-materials-i-needed-for-professional-development-and-reimbursed-me-from-day-one">13</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#21-people-in-the-company-are-constantly-sharing-things-they-learn-in-the-form-of-blogs-and-internal-talks">21</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#22-attended-study-groups-organized-by-members-of-the-company-where-people-of-all-experience-levels-get-together-to-learn-something-new">22</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#23-company-has-a-bi-monthly-stand-up-to-discuss-new-things-the-organization-wants-to-learn">23</a>, <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md#25-attended-a-company-sponsored-hackathon-where-coworkers-of-all-skill-levels-got-together-and-worked-on-things-they-wanted-to-learn">25</a>]. It helps me remember to travel with patience when I see that my peers of all skill levels are traveling, too.</p>
<h3 id="heading-final-thoughts">Final Thoughts</h3>
<p>Despite the odds described in the intro, I come to work not fearing being new but actually relishing it. Many small but meaningful <a target="_blank" href="https://github.com/klcantrell/blog-content/blob/72b4a4eb94f8f10d935be724b7836e332942cf44/3-lessons-learned-in-my-first-months-as-a-nontraditional-software-engineer/31-experiences.md">experiences</a> have helped me go from “Am I good enough to be here?” to “I can learn, grow, and contribute here”.</p>
<p>If you are an experienced engineer or in a leadership position, I hope reading this will encourage you to foster an environment where vulnerability, strong relationships, and lifelong learning are encouraged. If you are at the beginning of your journey like I am, I hope you found something here that you can take back and apply to your own story. Thanks for reading!</p>
<blockquote>
<p>Originally posted on <a target="_blank" href="http://blog.kalalau-cantrell.com/2019/04/3-lessons-i-learned-in-my-first-months-as-a-non-traditional-software-engineer/">blog.kalalau-cantrell.com</a>.</p>
</blockquote>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to cultivate great culture within your team ]]>
                </title>
                <description>
                    <![CDATA[ By Crunch Tech Talented people rank having a ‘great culture’ highly when evaluating potential employers. It can serve as a useful barometer to whether they’ll be happy and supported to thrive in their role. Successful businesses also understand that ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/cultivating-great-culture-within-a-team-a26a7c0cc4a2/</link>
                <guid isPermaLink="false">66c34872a124e2df05195f21</guid>
                
                    <category>
                        <![CDATA[ business ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Culture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 07 Jan 2019 12:04:31 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*rdeDIgZQkRkYhq1uBlkaSg.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Crunch Tech</p>
<p>Talented people rank having a ‘great culture’ highly when evaluating potential employers. It can serve as a useful barometer to whether they’ll be happy and supported to thrive in their role.</p>
<p>Successful businesses also understand that having a great culture leads to better performance, staff retention, and attracts top talent. However, you can’t buy great culture and neither is it sustainable to force it from the top-down, or via HR alone. The good news is that it doesn’t need to cost money and is genuinely attainable. The bad news is that it takes time, can’t be achieved alone, and isn’t easily quantifiable.</p>
<p>Building positive culture at the department or team level serves you well in reducing the impact of other challenges that may fall outside your influence. This is also where most people can make an impact, so I’ll focus on this in this article.</p>
<p>An indicator that good culture has been established within a team is when its members are motivated to seek new ways of improving culture themselves, forming a nice virtuous circle. However, this Promised Land can seem distant — so here are some pointers to start cultivating that mindset.</p>
<h3 id="heading-1-give-people-freedom-and-theyll-innovate-impress-and-surprise"><strong>1. Give people freedom and they’ll innovate, impress, and surprise</strong></h3>
<p>Micro-management is unnecessary if you’ve hired the right people. Almost everyone wants to do a good job when they turn up to work each day — so let them.</p>
<p>As a manager, relinquishing control, visibility, and dare I say, some credit for a team’s actions can feel unnerving. But by ensuring those closest to the product have sufficient autonomy, <em>workers</em> become <em>committed team members</em> who are motivated to solve problems it’s possible you’re not even aware of. Seeing the achievements (and consequent recognition) of team members you’ve enabled to thrive brings a very wholesome satisfaction.</p>
<p>The importance of allowing people the <a target="_blank" href="https://medium.com/@crunchtech/the-importance-of-time-to-think-f2ae19667937">freedom and time to think</a> shouldn’t be underestimated.</p>
<h3 id="heading-2-encourage-broader-thinking"><strong>2. Encourage broader thinking</strong></h3>
<p>Teams are more engaged if they’ve played a part in shaping their surroundings, processes, and the principles they advocate.</p>
<p>Making decisions on the team’s behalf, whether big or small, is likely to result in the team feeling less accountable for outcomes — be it quality, hitting deadlines, or customer satisfaction.</p>
<p>Where possible, distribute ownership or seek the team’s involvement in the following:</p>
<ul>
<li>The recruitment strategy and interview process</li>
<li>Mentoring, irrespective of function / seniority</li>
<li>Evolving any <a target="_blank" href="https://blog.usejournal.com/is-your-process-giving-you-a-false-sense-of-efficiency-2e039cd2aa8b">formalised processes</a> the team adheres to</li>
<li>Producing a Manifesto that outlines the teams North Star principles (perfect for hanging on the walls or an induction pack)</li>
</ul>
<h3 id="heading-3-you-succeed-or-you-learn"><strong>3. You succeed or you learn</strong></h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/yWmeQPEoJLKe9Z0iB-Mk9diCs2r2z-koBSgz" alt="Image" width="700" height="409" loading="lazy"></p>
<p>A team inspired to be brave in trying new techniques and technologies (or setting themselves bold goals) can achieve successes that a cautious team can’t. Being part of a brave team brings an energy that’s hard to beat.</p>
<p>By definition being brave has a degree of risk attached that most teams will avoid unless it’s been acknowledged and accepted by some form of seniority. Gaining this acceptance can be easier if there’s confidence in a review process designed to draw learning from an incident and heed how to prevent the same or a similar incident reoccurring.</p>
<h3 id="heading-4-sharing-amp-transparency"><strong>4. Sharing &amp; transparency</strong></h3>
<p>At a business level, introducing a forum to share client feedback, sales performance, notable successes or failures can help form a Community and allow individuals to see how their personal efforts contribute to the success of the business.</p>
<p>This level of transparency might be uncomfortable when the business is underperforming, but if you’ve hired good, conscientious people, then holding back information may be more damaging. It can also help build empathy for an unpopular but necessary directive that requires the team to go against their preferred approach.</p>
<p>At a team level, encouraging members to share amongst themselves and shout about their achievements is also a great way for their efforts to be recognised. Possible forums are blogs and internal/external talks on challenges faced or newly acquired knowledge, or departmental updates.</p>
<h3 id="heading-5-keep-things-fun"><strong>5. Keep things fun</strong></h3>
<p>Employee happiness isn’t the top priority for most companies, but it’s worth remembering that ‘‘<em>happy team members are productive team members’’</em>. Besides, being serious all the time is exhausting for anyone.</p>
<p>Don’t fret when team members talk off-topic, encourage it even. Understanding each other’s personalities, motivation, and sense of humour will bond a team far beyond one that simply acknowledges each other’s R&amp;R’s. It’ll make those unavoidable ‘difficult conversations’ far easier if they’ve developed a shared trust.</p>
<p>Other ways to achieve a happier environment include encouraging face-to-face communication, leaders being considered approachable, and team-wall space being seen as fair-game for <a target="_blank" href="http://ronjeffries.com/xprog/articles/bigvisiblecharts/">Big Visible Charts</a>, Team Manifesto’s, Definition of Done etc.</p>
<p>In conclusion, investing in team culture attracts and retains the talented people that are essential for your team or even business to thrive. Take a moment to consider if you’re doing enough to champion a positive culture in your team, and reassess the true cost of that action you know doesn’t put culture ‘front and centre’.</p>
<p><em>Written by Jamie Hollis - Developer, turned Scrum Master, turned Development Manager.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Why Team Culture is Critical for Successful Microservices ]]>
                </title>
                <description>
                    <![CDATA[ By Jake Lumetta Developers are increasingly turning to microservices to build and modify individual components independently. Microservices are clearly beneficial from a technical standpoint, but before teams decide to implement microservices, they s... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/why-team-culture-is-critical-for-successful-microservices-2b0e24f124e9/</link>
                <guid isPermaLink="false">66c3672663ac6ce6ab8eba31</guid>
                
                    <category>
                        <![CDATA[ Culture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Microservices ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Productivity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 20 Aug 2018 17:21:15 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*xxKgPqB6Hkmx6y3gJS8LwA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Jake Lumetta</p>
<p>Developers are increasingly turning to microservices to build and modify individual components independently. Microservices are clearly beneficial from a technical standpoint, but before teams decide to implement microservices, they should consider how creating microservices will impact team culture.</p>
<p>This article offers advice and insights from CTO’s who have enjoyed the successes and endured the growing pains of implementing microservices, as well as guidance for how to smoothly integrate microservices into your team’s culture.</p>
<h3 id="heading-rule-1-you-cant-build-successful-microservices-without-a-successful-team-culture">Rule # 1: You can’t build successful microservices without a successful team culture.</h3>
<p>Back when I was working with Java developers, I remember there being a source of tension within the camp around who got to work on the newest and meatiest features. Our engineering leadership had decided that we would exclusively use Java to build all new microservices.</p>
<p>There were great reasons for this decision, but — as I will explain later — such a restrictive decision came with some consequences in terms of team morale. We learned an important lesson there: to the extent possible, communicating the “why” of a technical decision to the team can go a long way towards creating a culture where people are kept in the loop.</p>
<p>When it comes to organizing and managing a team around microservices, it’s always challenging to balance the mood, morale, and overall culture of your team. In most cases, the leadership needs to balance the risk of team members using new technology against the needs of the client and the business itself.</p>
<p>This dilemma, and many others like it, has led CTOs to ask themselves questions such as: How much freedom should I give my team when it comes to adopting new technologies? And perhaps even more importantly, how can I manage the overarching culture within my camp?</p>
<h4 id="heading-give-every-team-member-a-chance-to-thrive">Give every team member a chance to thrive</h4>
<p>When the engineering leaders mentioned above decided that Java was the best technology to use when building microservices, the decision was really best for the company. Java is performant, and many of the senior people on the team we well versed with it. So that’s why we went with Java. However, not everyone on the team had experience with Java.</p>
<p>The problem was, our team was split into two camps: the Java guys, and the JavaScript guys. As time went by, new and exciting projects came up, and we’d always reach for Java to get the job done. Before long, there was some annoyance within the JavaScript camp that crept up.</p>
<p>“Why do the Java guys always get to work on the exciting new projects, while we’re left to do the mundane front-end tasks like implementing third party analytics tools? We want a big, exciting project to work on, too!”</p>
<p>Like most rifts, it started out small but grew worse over time.</p>
<p>The lesson I took from that experience was to take your team’s expertise and favored technologies into account when choosing a <em>de facto</em> tech stack for your microservices, as well as when it comes to adjusting the level of freedom you give your team to pick and choose their tools.</p>
<p>Sure, you need to have some structure, but if you’re too restrictive — or worse yet, blind to the desire of people in your team to innovate with different technologies — you may have a rift of your own to manage.</p>
<p>So, evaluate your team closely, and come up with a plan that empowers everyone in your team. That way, every section of your team can get involved in major projects, without anyone feeling like they aren’t being given a chance to thrive.</p>
<h3 id="heading-technology-choices-stability-vs-flexibility">Technology choices: stability vs flexibility</h3>
<p>One of the biggest issues CTOs and developers have to wrestle with is how much technological freedom to allow developers.</p>
<p>Let’s say you hire a new junior developer. They may be excited about some brand new fresh off the press JavaScript framework. Almost too new.</p>
<p>That framework, while sporting some technical breakthroughs, may not have proven itself in production environments, and it most probably doesn’t have great support available. CTOs have the hard choice between okaying that move for the good of morale and excitement within the camp — or declining it to safeguard the needs of the company, to protect the company’s bottom line, and to keep the project stable as the deadline approaches.</p>
<p>The right answer depends on a lot of different factors, which also means there is no right answer.</p>
<h4 id="heading-technological-freedom">Technological freedom</h4>
<p>Some CTOs and founders fully embrace technological freedom and then allow things to settle naturally on a few technologies that work well when turning to deployment.</p>
<p>“We give our team and ourselves 100% freedom in considering technology choices. We eventually identified two or three technologies not to use in the end, primarily due to not wanting to complicate our deployment story,” said <a target="_blank" href="https://twitter.com/stympy?lang=en">Benjamin Curtis</a>, Co-founder of <a target="_blank" href="https://www.honeybadger.io/">Honeybadger</a>.</p>
<p>“In other words, we considered introducing new languages and new approaches into our tech stack when creating our microservices, and we actually did deploy a production microservice on a different stack at one point. [While we do generally] stick with technologies that we know in order to simply our ops stack, we periodically revisit that decision to see if potential performance or reliability benefits would be gained by adopting a new technology, but so far we haven’t made a change,” Curtis continued.</p>
<p>When I spoke with <a target="_blank" href="https://twitter.com/stephenlb">Stephen Blum</a>, CTO at <a target="_blank" href="https://www.pubnub.com/">PubNub</a>, he too expressed a similar view in favor of welcoming pretty much any technology that cuts the mustard:</p>
<p>“We’re totally open with it. We want to continue to push forward with new open source technologies that are available and we only have a couple constraints with the team that are very fair: must run in container environment and it has to be cost-effective,” Blum said.</p>
<h4 id="heading-high-freedom-high-responsibility">High-freedom, High-responsibility</h4>
<p>Freedom comes with a caveat though: if developers enjoy the fruits of freedom of technology choices, they also need to take ownership of making sure the build works.</p>
<p>During my interview with <a target="_blank" href="http://sumologic.com">Sumo Logic</a> CTO <a target="_blank" href="https://twitter.com/raychaser">Christian Beedgen</a> and Chief Architect <a target="_blank" href="https://twitter.com/stefanzier">Stefan Zier</a>, they expanded on this topic. They added clout to the position that, if you’re going to give developers freedom to choose their technology, it has to come with a high level of responsibility attached.</p>
<p>“It’s really important that [whoever builds] the software takes full ownership for it. In other words, they not only build software, but they also run the software and remain responsible for the whole lifecycle,” they said.</p>
<p>They continued by explaining that a system that resembles a federal government system should be put into place to help keep those freedoms in check by heightening responsibility.</p>
<p>“[You need] a federal culture really. You’ve got to have a system where multiple, independent teams can come together towards the greater goal. That limits the independence of the units to some degree, as they have to agree that there is potentially a federal government of some sort. But within those smaller groups, they can make as many decisions on their own as they like within guidelines established on a higher level,” he said.</p>
<p>Decentralized, federal, or however you wish to frame it, certainly seems to be an attractive approach to structuring microservice teams. It’s an approach that gives each team and each team member the freedom they want — without giving anyone free reign to pull the entire project apart at the seams.</p>
<p>But not everyone agrees.</p>
<h4 id="heading-restrict-technology-to-simplify-things">Restrict technology to simplify things</h4>
<p>On the other hand, <a target="_blank" href="https://twitter.com/darbyfrey">Darby Frey</a>, Co-founder of Lead Honestly, takes a more restrictive approach to technology selection.</p>
<p>“At my last company, we had a lot of services and a fairly small team, and one of the main things that made it work, especially for the team size that we had, was that every app was the same. Every backend service was a Ruby app,” he explained.</p>
<p>Frey told me how this helped simplify the life of his team, as every service has, “the same testing framework, the same database backend, the same background job processing tool, etc. Everything was the same.”</p>
<p>At the same time, Frey is sympathetic to the concept of developers wanting to introduce a new language, admitting that he “loves the idea of trying new things”. However, he feels that the cons outweigh the pros.</p>
<p>“Having a polyglot architecture can increase the development and maintenance costs. If it’s just all the same, you can focus on business value and business features and not have to be super siloed in how your services operate. I don’t think everybody loves that decision, but at the end of the day when they have to fix something on a weekend or in the middle of the night, they appreciate it,” said Frey.</p>
<h3 id="heading-centralized-or-decentralized-organization">Centralized or decentralized organization</h3>
<p>The way your team is structured is also going to impact your microservices engineering culture — for better, or worse.</p>
<p>For example, it’s common for software engineers to write the code before shipping it off to the operations team, who in turn deploy it to the servers. But when things break (and things always break!), an internal conflict occurs.</p>
<p>Because operation engineers don’t write the code themselves, they rarely understand problems when they first arise. As a result, they have to get in touch with those who did code it — the software engineers. So, right from the get-go, you’ve got a middleman relaying a message between the problem and the team that can fix that problem.</p>
<p>To add an extra level of complexity, because software engineers aren’t involved with operations, they often can’t fully appreciate how their code affects the overall operation of the platform. They only come to know of any issue when operations engineers complain about it. As you can see, this is a relationship that’s destined for constant conflict.</p>
<h4 id="heading-decentralized-high-responsibility">Decentralized = high-responsibility</h4>
<p>One way to attack this problem is by following the lead of Netflix and Amazon, both of which favor decentralized governance. James Lewis and Martin Fowler, two software development thought leaders, laid out their thoughts via a <a target="_blank" href="https://martinfowler.com/articles/microservices.html#ProductsNotProjects">lengthy blog post</a>. According to them, decentralized governance is the way to go when it comes to microservice team organization.</p>
<p>“One of the consequences of centralized governance is the tendency to standardize on single technology platforms. Experience shows that this approach is constricting — not every problem is a nail and not every solution a hammer,” the article reads.</p>
<p>“Perhaps the apogee of decentralized governance is the ‘build it, run it’ ethos popularized by Amazon. Teams are responsible for all aspects of the software they build including operating the software 24/7,” it continues.</p>
<p>Netflix, Lewis and Fowler write, is another company pushing higher levels of responsibility on development teams. They hypothesize that, because they’ll be responsible and called upon should anything go wrong later down the line, more care will be taken during the development and testing stages to ensure each microservice is in ship shape.</p>
<p>“These ideas are about as far away from the traditional centralized governance model as it is possible to be,” they conclude.</p>
<h4 id="heading-whos-getting-paged-on-the-weekends">Who’s getting paged on the weekends?</h4>
<p>When considering centralized or decentralized culture, you should think about how that impacts your team members when problems inevitably crop up at inopportune times. You see, a decentralized system implies that each decentralized team takes responsibility for one service, or one set of services. But that too creates a problem: silos.</p>
<p>That’s one reason why <a target="_blank" href="https://twitter.com/darbyfrey">Darby Frey</a>, the Co-founder of Lead Honestly, isn’t a proponent of the concept of decentralized governance.</p>
<p>“The pattern of ‘a single team is responsible for a particular service’ is something you see a lot in microservice architectures. We don’t do that, for a couple of reasons. The primary business reason is that we want teams that are responsible not for specific code but for customer-facing features. A team might be responsible for order processing, so that will touch multiple code bases but the end result for the business is that there is one team that owns the whole thing end to end so there are fewer cracks for things to fall through,” Frey explained.</p>
<p>The other main reason, he continued, is that developers can take more ownership of the overall project:</p>
<p>“They can actually think about [the project] holistically,” said Frey.</p>
<p>Nathan Peck, Developer Advocate for Container Services at Amazon Web Services, <a target="_blank" href="https://medium.com/@nathankpeck/microservice-principles-decentralized-governance-4cdbde2ff6ca">explained this problem in more depth here</a>. In essence, when you separate the software engineers and the operations engineers, you make life harder for your team whenever an issue arises with the code — which is bad news for end users, too.</p>
<h4 id="heading-does-decentralization-need-to-lead-to-separation-and-siloization">Does decentralization need to lead to separation and siloization?</h4>
<p>Peck goes on to explain that his solution lies in <a target="_blank" href="https://opensource.com/resources/devops">DevOps</a>, a model aimed at tightening the feedback loop by bringing these two teams closer together. This strengthens team culture and communication in the process. Peck describes this as the, “you build it, you run it” approach.</p>
<p>However, that doesn’t mean teams have to get siloed or distanced away from partaking in certain tasks, as Frey suggests might happen.</p>
<p>“One of the most powerful approaches to decentralized governance is to build a mindset of ‘DevOps,’” Peck wrote. “[With this approach], engineers are involved in all parts of the software pipeline: writing code, building it, deploying the resulting product, and operating and monitoring it in production. The DevOps way contrasts with the older model of separating development teams from operations teams by having development teams ship code ‘over the wall’ to operations teams who were then responsible to run it and maintain it.”</p>
<p>DevOps, as <a target="_blank" href="http://armory.io">Armory</a> CTO <a target="_blank" href="https://twitter.com/imosquera">Isaac Mosquera</a> explained, is an agile software development framework and culture that’s gaining traction thanks to — well, pretty much everything that Peck said.</p>
<p>Interestingly, Mosquera feels that this approach actually flies in the face of <a target="_blank" href="https://en.wikipedia.org/wiki/Conway%27s_law">Conway’s Law</a>:</p>
<blockquote>
<p>“Organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations.” — M. Conway</p>
</blockquote>
<p>“Instead of communication driving software design, now software architecture drives communication. Not only do teams operate and organize differently, but it requires a new set of tooling and process to support this type of architecture, i.e. DevOps,” Mosquera explained.</p>
<p><a target="_blank" href="https://twitter.com/cristoirmac">Chris McFadden</a>, VP of Engineering at <a target="_blank" href="https://www.sparkpost.com/">SparkPost</a>, has an interesting example that might be worth following. At SparkPost, you’ll find decentralized governance — but you won’t find a one-team-per-service culture.</p>
<p>“The team that is developing these microservices started off as one team, but they’re now split up into three teams under the same larger group. Each team has some level of responsibility around certain domains and certain expertise, but the ownership of these services is not restricted to any one of these teams,” said McFadden.</p>
<p>This approach, McFadden explained, allows for any team to work on anything from new features to bug fixes to production issues relating to any of those services. There’s total flexibility, and not a silo in sight.</p>
<p>“It allows [the teams to be] a little more flexible both in terms of new product development as well, just because you’re not getting too restricted and that’s based on our size as a company and as an engineering team. We really need to retain some flexibility,” he continued.</p>
<p>However, size might matter here, as McFadden admitted that if SparkPost was a lot larger, “then it would make more sense to have a single, larger team own one of those microservices.”</p>
<p>“[It’s] better, I think, to have a little bit more broad responsibility for these services and it gives you a little more flexibility. At least that works for us at this time, where we are as an organization,” he said.</p>
<h3 id="heading-a-successful-microservices-engineering-culture-is-a-balancing-act">A successful microservices, engineering culture is a balancing act</h3>
<p>When it comes to technology, freedom — with responsibility — looks to be the most rewarding path. Team members with differing technological preferences will come and go, while new challenges may require you to ditch the technologies that have previously served you well. Software development is constantly in flux, and so you’ll need to continually balance the needs of your team as new devices, technologies, and clients emerge.</p>
<p>As for structuring your teams, a decentralized, yet un-siloed approach that leverages DevOps and instills a “you build it, you run it” mentality seems to be popular, although other schools of thought do exist. As usual, you’re going to have to experiment to see what suits your team best.</p>
<p>Here’s a quick recap on how to ensure your team culture meshes well with a microservices architecture:</p>
<ul>
<li><strong>Be sustainable, yet flexible</strong>: Balance sustainability without forgetting about flexibility and the need for your team to be innovative when the right opportunity comes along. However, there’s a distinct difference of opinion over how you should achieve that balance.</li>
<li><strong>Give equal opportunities</strong>: Don’t favor one section of your team over another. If you’re going to impose restrictions, make sure it’s not going to fundamentally alienate team members from the get-go. Think about how your product roadmap is shaping up and forecast how it will be built and who’s going to do the work.</li>
<li><strong>Structure your team to be agile, yet responsible</strong>: Decentralized governance and agile development is the flavor of the day for a good reason, but don’t forget to install a sense of responsibility within each team.</li>
</ul>
<p><em>If you’ve enjoyed this article, please help it spread by clapping below! For more content like this, follow us on <a target="_blank" href="https://twitter.com/ButterCMS">Twitter</a> and <a target="_blank" href="https://buttercms.com/blog/">subscribe</a> to our blog.</em></p>
<p><em>And if you want to add a blog or CMS to your website without messing around with Wordpress, <a target="_blank" href="https://buttercms.com/">you should try Butter CMS</a>.</em> <a target="_blank" href="https://buttercms.com/">ButterCMS</a> is a headless CMS that lets you build CMS-powered apps using any programming language including <a target="_blank" href="https://buttercms.com/ruby-cms/">Ruby</a>, <a target="_blank" href="https://buttercms.com/rails-cms/">Rails</a>, <a target="_blank" href="https://buttercms.com/nodejs-cms/">Node.js</a>, <a target="_blank" href="https://buttercms.com/python-cms/">Python</a>, <a target="_blank" href="https://buttercms.com/asp-net-cms/">ASP.NET</a>, <a target="_blank" href="https://buttercms.com/flask-cms/">Flask</a>, <a target="_blank" href="https://buttercms.com/django-cms/">Django</a>, <a target="_blank" href="https://buttercms.com/golang-cms/">Go</a>, <a target="_blank" href="https://buttercms.com/php-cms/">PHP</a>, <a target="_blank" href="https://buttercms.com/laravel-cms/">Laravel</a>, <a target="_blank" href="https://buttercms.com/angular-cms/">Angular</a>, <a target="_blank" href="https://buttercms.com/react-cms/">React</a>, <a target="_blank" href="https://buttercms.com/elixir-cms/">Elixir</a>, <a target="_blank" href="https://buttercms.com/phoenix-cms/">Phoenix</a>, <a target="_blank" href="https://buttercms.com/meteor-cms/">Meteor</a>, <a target="_blank" href="https://buttercms.com/vuejs-cms/">Vue.js</a>, and <a target="_blank" href="https://buttercms.com/gatsbyjs-cms/">Gatsby.js</a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to create a web performance culture inside your team ]]>
                </title>
                <description>
                    <![CDATA[ By Alex Moldovan Those who work with me know that I’m always obsessing about performance. Words like: critical rendering path, bundle size and frames-per-second are a common thing around the office. But it’s all for a good reason. Performance should ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/creating-a-web-performance-culture-inside-your-team-f00c0d79765f/</link>
                <guid isPermaLink="false">66d45d5ebd438296f45cd381</guid>
                
                    <category>
                        <![CDATA[ Culture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 18 Jul 2018 12:32:57 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*f-Ey0tW6O_vFHz_RPZWh_A.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Alex Moldovan</p>
<p>Those who work with me know that I’m always obsessing about performance. Words like: critical rendering path, bundle size and frames-per-second are a common thing around the office. But it’s all for a good reason.</p>
<p>Performance should be a <strong>first class citizen</strong> in software engineering.</p>
<p>Having a strong <strong>performance culture</strong> in your team can ensure that you mitigate — ahead of time — any risks associated with bad performance.</p>
<p>But why is it so important? And what are those risks?</p>
<h2 id="heading-why-performance-matters">Why performance matters</h2>
<p>Remember that as web developers, our goal is to create the best possible experience for our users.</p>
<h3 id="heading-performance-is-about-usability">Performance is about usability.</h3>
<p>There are many studies (<a target="_blank" href="https://www.doubleclickbygoogle.com/articles/mobile-speed-matters/">[1]</a>, <a target="_blank" href="https://wp-rocket.me/blog/speed-up-your-website-make-the-first-few-seconds-count/">[2]</a>, <a target="_blank" href="https://www.fastcompany.com/1825005/how-one-second-could-cost-amazon-16-billion-sales">[3]</a>) that show a direct correlation between business goals and usability on the web.</p>
<p>A fast and snappy website can make the difference between success and failure when it comes to the relationship with your users.</p>
<p>Your fancy UI framework and architecture won’t matter at all if your website is perceived as slow and laggy. Not to mention the scenario in which users leave because they are waiting behind a spinner or a white screen.</p>
<p><a target="_blank" href="https://developer.akamai.com/blog/2016/09/14/mobile-load-time-user-abandonment">53% of the users will close your website within 3 seconds</a> if you don’t show any content.</p>
<p>Furthermore, performance is also a metric in mobile page ranking, <a target="_blank" href="https://webmasters.googleblog.com/2018/01/using-page-speed-in-mobile-search.html">according to Google</a>.</p>
<h3 id="heading-performance-is-about-accessibility">Performance is about accessibility.</h3>
<p>Let’s talk about the global market. Performance budgets are also important when it comes to the cost of data. How much does a user pay to visit your website?</p>
<p>You can find out using <a target="_blank" href="https://whatdoesmysitecost.com/#usdCost">this website</a>. Then you can ask yourself: “Am I willing to pay x cents to visit my website?” You might be surprised by your own answer.</p>
<p>Furthermore, there are countries where the vast majority of <a target="_blank" href="https://www.smartinsights.com/mobile-marketing/mobile-marketing-analytics/mobile-marketing-statistics/">internet time is spent via mobile</a>. So you have to take a mobile-first approach in optimizing performance.</p>
<p>By omitting this, you are rendering your product inaccessible for a lot of people!</p>
<h3 id="heading-performance-is-about-empathy">Performance is about empathy</h3>
<p>We have the tendency to see our work strictly through our own eyes. This is dangerous, as it leads to a superficial understanding of our users’ needs.</p>
<p>Not to mention our constant need to work on the cool stuff (new technology, state of the art frameworks, and so on) and ignore boring and tedious jobs.</p>
<p>Performance matters, and you have to work on optimizing it with <strong>empathy</strong> and <strong>selflessness</strong> in mind. But these qualities, unfortunately, don’t come by default in all working environments.</p>
<h2 id="heading-plan-for-the-worst">Plan for the worst</h2>
<p>A colleague showed me an interesting scenario a few weeks ago. There’s a home decor website which is using some CMS system behind the scenes to manage data. Someone uploaded this image:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/4u0XBu8dfPbS9KEEuq0Uc1ad5g9cMbqoJb3g" alt="Image" width="550" height="264" loading="lazy">
<em>screenshot from Chrome Dev Tools</em></p>
<p>It’s <strong>9.3 MegaBytes</strong> of data which takes roughly <strong>7 seconds</strong> to load on an ultra fast Wi-Fi connection and on a MacBook Pro. Can you image how much time this would take on a mobile device? The answer is <strong>infinity</strong>! Because the mobile browser becomes unresponsive when you open the website.</p>
<p><a target="_blank" href="http://www.homemade-modern.com/ep106-media-console/">Here’s the website</a> if you’re curious, but please proceed with care as it will potentially block your browser!</p>
<p>We shouldn’t blame the user. They wanted to display a very detailed image of an assembly.</p>
<p>Coming back to the idea of <strong>understanding</strong> our users, we should always prepare for the worst scenarios when it comes to user created content.</p>
<p>As a developer, you are <strong>completely responsible</strong> for the way in which your users interact with your software.</p>
<h2 id="heading-when-to-optimize">When to optimize</h2>
<p>There are two approaches to performance optimizations. <a target="_blank" href="https://twitter.com/benschwarz?s=17">Ben Schwarz</a> summarizes the two approaches in his deck, <a target="_blank" href="https://speakerdeck.com/benschwarz/the-critical-request">The Critical Request</a>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/LQhLZLaEKGlTWi5btGkboK0W2JOjNv6QRxKF" alt="Image" width="800" height="445" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/fulD0TWIdNZHkuxffOBGWBmxvWBZftfMwpZc" alt="Image" width="800" height="444" loading="lazy">
<em><strong>Reactive</strong> (top) vs <strong>Proactive</strong> (bottom) approach to optimizing performance</em></p>
<p>On one end, we have the traditional: “Houston we have a problem!” approach. This is a highly <strong>reactive</strong> way of treating performance issues. I also like to call it the: “Oh shoot! Call in the consultant!” problem.</p>
<p>Not only is this costly for your business, but it can also be a great demotivator for the team. It can even lead to conflict when people are not connected with the goals of performance optimization.</p>
<p>On the other end, we have the <strong>proactive</strong> approach. You bake performance optimization into your software development process.</p>
<p>If you need to convince the business side to try the proactive approach, check out <a target="_blank" href="https://wpostats.com/">WPO stats</a>. This is great resource with case studies that show the benefits of performance optimizations.</p>
<p>Once the approach is in place, it’s the team and the culture that solve the problems ahead of time, rather than the consultant who comes in to save the day. And done right, this can be a great motivator for the team.</p>
<p>But performance awareness doesn’t happen over night. You have to create the right context for people to be aware of the impact of what they do.</p>
<h2 id="heading-measure-and-act">Measure and Act</h2>
<p>Do you know how many users are landing on your site from mobile devices? How often are you testing in bad network conditions? How often do you take out a mid-range device, like a <a target="_blank" href="https://www.gsmarena.com/motorola_moto_g4-8103.php">Moto G4</a>, and start playing with your application?</p>
<p>These are all relevant scenarios that your users might encounter every day!</p>
<p>Know your user base, and know your device and browser usages. Good and relevant <strong>metrics</strong> are everything if you want to implement a performance culture.</p>
<p>Once you have the metrics, it’s time to establish the <strong>performance budgets</strong>.</p>
<p>Finally, time to act! Here are some tools and practices you can introduce into your regular work environment:</p>
<h3 id="heading-step-1-measure-performance-indicators">Step 1: Measure performance indicators</h3>
<ul>
<li><a target="_blank" href="https://developers.google.com/web/tools/lighthouse/">Lighthouse</a> is an amazing project and is available in Chrome Dev Tools. It will give you great insights into potential performance improvements. It will also give you some nice suggestions for SEO, Accessibility, and Best Practices.</li>
<li><a target="_blank" href="https://webpagetest.org/">Webpagetest</a> is great for keeping track of metrics and comparing waterfall charts before and after deploys. I can also recommend <a target="_blank" href="https://gtmetrix.com/">gtmetrix</a>, a less known tool, with a very easy to use interface.</li>
</ul>
<h3 id="heading-step-2-automate">Step 2: Automate</h3>
<ul>
<li>Add performance related build steps into your CI. <a target="_blank" href="https://github.com/siddharthkp/bundlesize">bundlesize</a> is a great package if you want to define some hard limits for your bundles.</li>
<li>Build automated tests that will fail if loading times or other relevant metrics exceed certain thresholds. <a target="_blank" href="https://github.com/GoogleChrome/puppeteer">Puppeteer</a> has direct access to the Chrome API so you can leverage that in your tests.</li>
</ul>
<h3 id="heading-step-3-make-it-visual">Step 3: Make it visual</h3>
<ul>
<li>Everyone in the team should be aware of the impact of the code they write. <a target="_blank" href="https://github.com/webpack-contrib/webpack-bundle-analyzer">Webpack bundle analyzer</a> is a great way of visualizing what goes inside the output bundles. People might think twice before using a library which increases the overall size by 10%.</li>
<li><a target="_blank" href="https://github.com/wix/import-cost">import cost</a> for VSCode will show you how much code you are adding to the project by using certain dependencies. Again, it’s all about making sure everyone is fully aware of the impact of what they do.</li>
</ul>
<h3 id="heading-step-4-enforce-and-empower">Step 4: Enforce and Empower</h3>
<ul>
<li>You have to be ready to enforce strict rules within the organization. In our case, we created a <a target="_blank" href="https://github.com/FortechRomania/js-team-showcase/blob/master/how-we-work/performance/checklist.md">performance checklist</a> to be followed on each project.</li>
<li>Make sure <strong>everyone</strong> in the team gets to work on the performance optimization tasks. You don’t want to have a single person that does that, because you get into the consultant scenario again. By splitting the tasks, everyone gets familiar with the context and with the different ways of preventing problems.</li>
</ul>
<p>Building a performance oriented <strong>culture</strong> is a step by step process. And it’s a process of <strong>understanding</strong> the problems and <strong>acting</strong> on them.</p>
<p>One constant in the entire process is the need to <strong>educate</strong> people.</p>
<p>Performance optimization techniques are not complicated. But they need some technical background and a good understanding of how the web works.</p>
<p>Building on top of a solid foundation can help your team grasp even the most advanced techniques for speeding up your application.</p>
<p>In our case, we make sure web performance is part of the learning path for all engineers. We don’t just enforce a checklist. We make sure people have a good environment to learn the reasons behind the techniques.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/hkpZovJ1oITO9WFs3xjZzrDaUKIPzwyZ2Ig6" alt="Image" width="800" height="600" loading="lazy">
_[Performance cheatsheet poster](https://github.com/FortechRomania/js-team-showcase/blob/master/how-we-work/performance/performance-cheatsheet.png" rel="noopener" target="<em>blank" title=") in our office at Fortech</em></p>
<h2 id="heading-performance-as-part-of-software-quality">Performance as part of software quality</h2>
<p>In the end, working on performance is the same as working on UX, security, or accessibility. It is part of the <strong>software</strong> <strong>quality</strong> that you offer.</p>
<p>At times, it might seem like extra effort for something that is not requested of you. Performance might not be part of your non-functional requirements, after all.</p>
<p>But coming back to the idea of responsibility, it is our duty to provide the best possible quality. And performance is one of the pillars of software quality.</p>
<p>If I were to sum up the path towards a performance culture, these are the key takeaways:</p>
<ul>
<li>Raise awareness, and build with empathy for the user</li>
<li>Favour the proactive approach and deal with issues ahead of time</li>
<li>Measure and act in a continuous loop</li>
<li>Spread the knowledge and involve the entire team in the process</li>
<li>Make it part of your software quality as an end goal</li>
</ul>
<h2 id="heading-references">References</h2>
<p>Since a lot of people ask for materials on web performance, here are a couple of places you can start from:</p>
<ul>
<li><a target="_blank" href="https://developers.google.com/web/fundamentals/performance/why-performance-matters/">Google Developers portal</a> has great articles on performance optimization techniques</li>
<li><a target="_blank" href="https://www.perf-tooling.today/">perf-tooling.today</a> offers a lot of great resources on web performance</li>
<li><a target="_blank" href="https://medium.com/dev-channel">The Chrome DevTeam’s publication</a> explores a lot of great ideas and case studies about improving the performance of popular websites.</li>
<li>Check out our <a target="_blank" href="https://github.com/FortechRomania/js-team-showcase/blob/master/how-we-work/performance/checklist.md">performance checklist on github</a> and contribute with ideas!</li>
<li>Also have a look at Smashing Magazine’s 2018 <a target="_blank" href="https://www.smashingmagazine.com/2018/01/front-end-performance-checklist-2018-pdf-pages/">front-end performance checklist</a>, it is really impressive!</li>
</ul>
<p>I’m super curious to hear your thoughts on this. Is your team embracing a performance culture? What works for you? What doesn’t? Leave a comment and share if you enjoyed this article!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The most important lessons I learned from working at an amazing startup ]]>
                </title>
                <description>
                    <![CDATA[ By Yan Cui I recently left Space Ape Games after a won­der­ful year. I learnt a lot, and worked on some chal­leng­ing tech­ni­cal prob­lems. Here are seven lessons that I learned from one of the most well-run companies I have encountered in my 13 yea... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-most-important-lessons-i-learned-from-working-at-an-amazing-startup-3a95279eea04/</link>
                <guid isPermaLink="false">66c361c8c6c49ae59cf21af3</guid>
                
                    <category>
                        <![CDATA[ careers ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Culture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Life lessons ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 29 Mar 2018 11:39:54 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*-20oUUryud1eJZimkeBYow.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Yan Cui</p>
<p>I recently left <a target="_blank" href="http://spaceapegames.com/">Space Ape Games</a> after a won­der­ful year. I learnt a lot, and worked on some <a target="_blank" href="https://tech.spaceapegames.com/2017/10/24/tackling-scalability-challenges-in-realtime-multiplayer-games-with-akka-and-aws/">chal­leng­ing tech­ni­cal prob­lems</a>.</p>
<p>Here are seven lessons that I learned from one of the most well-run companies I have encountered in my 13 year career.</p>
<h3 id="heading-define-what-culture-you-want-and-organize-yourself-to-optimize-towards-achieving-that-culture">Define what culture you want, and organize yourself to optimize towards achieving that culture</h3>
<p>Lots of com­pa­nies talk about how great their cul­ture is, but few talk about <em>what their cul­ture actually is</em>. Worse yet, I sus­pect most end up with a cul­ture they don’t want, because the cul­ture grew organ­i­cal­ly and with­out guid­ance.</p>
<p>To this day, the <a target="_blank" href="https://www.slideshare.net/reed2001/culture-2009/">Net­flix cul­ture deck</a> from 2009 is still the one of the best things you can read about cul­ture.</p>
<blockquote>
<p>Real com­pa­ny val­ues are the behav­iors and skills that we par­tic­u­lar­ly val­ue in fel­low employ­ees.</p>
<p>— Reed Hast­ings</p>
</blockquote>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*9JyviH9V6_4KiRBY.png" alt="Image" width="800" height="596" loading="lazy"></p>
<p>Be clear about the culture you want to build from the start. These are the characteristics and skills that we value in each other at Space Ape:</p>
<p><strong>Pas­sion­ate</strong>: you have a pas­sion for games, and you want to build games that are fun and engag­ing.</p>
<p><strong>Cre­ative</strong>: you are not afraid to stray off the beat­en path and try some­thing new. You accept the risks that come with cre­ativ­i­ty. You won’t let fail­ures stop you from suc­ceed­ing.</p>
<p><strong>Judge­ment</strong>: you make smart bets. You bal­ance the risks of cre­ativ­i­ty with method­i­cal analy­sis of the poten­tial rewards to make smart bets.</p>
<p><strong>Depend­able</strong>: you are depend­able and trust­wor­thy. We believe in small, autonomous teams. For this to work, we need to be able to depend on every indi­vid­ual in the team.</p>
<p><strong>Focus</strong>: when required, you can put aside per­son­al projects and focus on delivering the best game pos­si­ble.</p>
<p><strong>Mas­tery</strong>: you are a mas­ter of your craft. You want to become the best ver­sion of your­self and are always look­ing for ways to improve.</p>
<p><strong>Col­lab­o­ra­tive</strong>: you work well with oth­ers. You are will­ing to make sac­ri­fices and com­pro­mis­es for the greater good of the com­pa­ny. Game mak­ing is an inher­ent­ly cre­ative and col­lab­o­ra­tive process. We need peo­ple that can thrive in a col­lab­o­ra­tive envi­ron­ment.</p>
<p><strong>Inclu­sive</strong>: you wel­come oth­ers for who they are. You treat oth­ers equal­ly and fair­ly, the same way that you expect to be treat­ed.</p>
<p><strong>Reit­er­ate</strong> <strong>this vision regularly</strong>. We find that if it is not reiterated at least once every couple of months, then it starts to slip through the collective consciousness.</p>
<p>Make sure new employ­ees are imbued with your vision. And remind employees of their duty to main­tain your culture.</p>
<h3 id="heading-culture-lives-and-dies-by-the-people-you-hire-and-fire">Culture lives and dies by the people you hire and fire</h3>
<p>This shared under­stand­ing of cul­ture needs to filter through to every hir­ing deci­sion.</p>
<p>“C<em>ul­ture fit</em>” is often used to enforce exist­ing bias­es, especially when said culture is nev­er defined up front to begin with. Fortunately, this has nev­er been the case in any of the hir­ing com­mit­tees I have sat on. When­ev­er “cul­ture fit” is raised as a con­cern, you must give clear exam­ples from your inter­ac­tion with the inter­vie­wee.</p>
<p>At the same time, you shouldn’t hire some­one who might be detri­men­tal to your cul­ture — not even when you are des­per­ate for anoth­er pair of hands on deck!</p>
<p>The cost of a bad hire to your cul­ture is too great.</p>
<p>The founders also act as the van­guards for your cul­ture. They watch from afar, but they’re nev­er afraid to step in when they see the dan­ger signs. If a long time employ­ee starts to show signs of self-enti­tle­ment, then expect a gen­tle reminder about the company’s com­mit­ment to inclu­sion and fairness.</p>
<p>Even when you have built a great culture, you can’t afford to take it for granted. <strong>It’s the duty of everyone involved to keep that culture strong</strong>.</p>
<h3 id="heading-people-are-your-most-important-product">People are your most important product</h3>
<p>This is true for most com­pa­nies, which is why it should be a no-brain­er to invest in the peo­ple and help them grow.</p>
<p>Offer train­ing bud­gets to every­one, and pro­vide man­agers with man­age­ment coach­es. The results will be well worth it.</p>
<h3 id="heading-founders-need-to-communicate-the-vision-of-the-company-openly-clearly-and-frequently">Founders need to communicate the vision of the company openly, clearly, and frequently</h3>
<p>Avoid impres­sive-sound­ing but vague mis­sion state­ments. Vague goals that do not define clear, action­able tar­gets are hard to fol­low and apply. Collaboration suf­fers when peo­ple do not have a <strong>shared under­stand­ing</strong> of the com­pa­ny vision.</p>
<p>Our founders reit­er­ate the com­pa­ny mis­sion at every quar­ter­ly com­pa­ny meet­ing. The <strong>rep­e­ti­tion</strong> has been impor­tant in rein­forc­ing the <em>shared</em> <em>under­stand­ing</em> of the goal. I recent­ly also saw Ryan Cald­beck, the CEO of <em>Cir­cle­Up,</em> say the same thing on Twit­ter.</p>
<p>Our mis­sion state­ment is <em>“to build a top gross­ing mobile game by own­ing a genre.”</em> Sim­ple, unglam­orous, but easy to under­stand.</p>
<h3 id="heading-be-honest-about-conflict-of-interest">Be honest about conflict of interest</h3>
<p>Man­agers usu­al­ly have the best inten­tions when they set out per­son­al objectives for their charges. Every­one gets a set of objec­tives that align with the company’s goal. Where is the con­flict of inter­est?</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*eX91HejD_UyyAs8h.png" alt="Image" width="800" height="519" loading="lazy">
<em>What you might think when you set out personal objectives.</em></p>
<p>Things seldom work out as you expect, though. What usually hap­pens is that some projects will go more smooth­ly than oth­ers. At the same time, some projects deliv­er more val­ue to the com­pa­ny than oth­ers.</p>
<p>Nod if this sce­nario sounds famil­iar.</p>
<p>You’re work­ing on project X, and your end of year pay raise, bonus, and promotion hopes are all rid­ing on the suc­cess of project X.</p>
<p>A col­league is work­ing on project Y, and he needs you to work on some­thing to unblock his project. Project Y is more valu­able to the com­pa­ny, but help­ing this col­league means los­ing progress on project X.</p>
<p>What do you do?</p>
<p>Do you do the right thing by the com­pa­ny and help this col­league? In the process you might lose the pay raise, bonus, and pro­mo­tion that you have worked so hard for.</p>
<p>Or do you put his request in the back­log and focus on project X?</p>
<p>Hel­lo, <em>con­flict of inter­est</em>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*-5e8qr0Ma7nNyOTU.png" alt="Image" width="800" height="512" loading="lazy">
<em>What actually happens when employees need to collaborate with one another, and often have to sacrifice their self-interest for the greater good of the company.</em></p>
<p>If you think this only hap­pens in poor­ly-run com­pa­nies, then you’re wrong. Even Google is not immune to this con­flict of inter­est, as is evi­dent in Michael Lynch’s <a target="_blank" href="https://mtlynch.io/why-i-quit-google/">arti­cle</a> on why he quit Google.</p>
<p><strong>Team­work requires <em>will­ing</em> sac­ri­fice.</strong></p>
<p>In foot­ball, a “team play­er” car­ries the con­no­ta­tion of being will­ing to sac­ri­fice themselves for the team. Be it risk­ing injury in a 50–50 chal­lenge, or pass­ing to a team­mate who’s more like­ly to score.</p>
<p>How do you trans­late this to the work place? How do you encour­age peo­ple to make will­ing sac­ri­fices for the good of the com­pa­ny?</p>
<p>You have to start by being hon­est about this con­flict of inter­est.</p>
<p>Your employ­ees are not saints, they are flesh and blood with real world problems. What if they need the pay raise to start a fam­i­ly? And what’s wrong with want­i­ng career pro­gres­sion?</p>
<p>Employ­ees have every right to act in their best inter­est. It is your job as employ­er to <strong>cre­ate an envi­ron­ment where employ­ees are not penalized for mak­ing self-sac­ri­fice</strong>.</p>
<p>You can do this in sev­er­al ways.</p>
<p>The biggest, most effective way is to <strong>sep­a­rate</strong> <strong>per­son­al objec­tives and 360 reviews from performance and salary reviews</strong>.</p>
<p>Per­son­al objec­tives are for your per­son­al devel­op­ment only. Your man­ag­er can help you decide what areas to improve on, but the final deci­sion is yours. You’re encour­aged, but <em>not required</em>, to set per­son­al objec­tives.</p>
<p>360 reviews are also for you and you alone. You choose from whom you want feedback, and how to pro­ceed with the feed­back you receive.</p>
<p>The feed­back is anonymous, and only the man­ag­er of the review­er knows who delivered that feedback. This is main­ly to mit­i­gate any unnec­es­sary ten­sion from ill-considered feed­back.</p>
<p>Your man­ag­er and the founders are also there to help you process the feedback if you need their help.</p>
<p>Per­for­mance and salary reviews are based on what you <strong>actu­al­ly con­tributed</strong>, not some arbi­trary tar­gets that were set months ago.</p>
<p>For us, this unusu­al way of work­ing start­ed with a frank dis­cus­sion about this conflict of inter­est. It has been iter­at­ed upon over time and will con­tin­ue to evolve. It’s been such a fresh breath of air for me to work for a com­pa­ny that not only rec­og­nizes the prob­lem but active­ly seeks to tack­le it.</p>
<h3 id="heading-marry-creativity-with-ownership">Marry creativity with ownership</h3>
<p>Cul­ti­vate cre­ativ­i­ty from the whole com­pa­ny using game jams and hackathons. But remember that <strong>cre­ativ­i­ty needs to be guid­ed, and hypotheses need to be test­ed.</strong></p>
<p>We use a creative funnel to guide ideas from hypothesis to production.</p>
<p>The game jams gen­er­ate ideas to feed the top of the funnel. Every­one can come up with ideas for new games. You have the <strong>own­er­ship</strong> and <strong>responsibility</strong> to pol­ish your idea and pitch it to the rest of the com­pa­ny.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*G_52ShW4NtA41tWg.png" alt="Image" width="800" height="540" loading="lazy"></p>
<p>Teams form organ­i­cal­ly around ideas that they’re excit­ed about and believe can be top-gross­ing. <strong>This is NOT a top-down deci­sion</strong>.</p>
<p>The founders are there to offer guid­ance and help with per­son­nel move­ment. Whilst your idea might be great, the founders can guide you on shap­ing the idea to fit your mis­sion.</p>
<p><em>Is it eco­nom­i­cal­ly fea­si­ble to build?</em></p>
<p><em>What is the mar­ket com­pe­ti­tion like? Is the genre sat­u­rat­ed with high qual­i­ty offer­ings already? Does this genre have top gross­ing poten­tial?</em></p>
<p><em>Do we have the tech­ni­cal exper­tise to build it? If not, how dif­fi­cult is it to hire someone with that exper­tise?</em></p>
<p>The teams that form around an idea focus on pro­to­typ­ing and iter­at­ing on the idea. The idea becomes a playable game, and the rest of the com­pa­ny then plays and pro­vides feed­back.</p>
<p>The team owns the idea, and is trust­ed with mak­ing the deci­sions to keep going or kill it if they no longer believe in it. Again, <strong>this is NOT a top-down deci­sion —</strong> the deci­sion is made within the team.</p>
<p>Which brings us to the next point.</p>
<h3 id="heading-recognize-that-creativity-requires-mistakes">Recognize that creativity requires mistakes</h3>
<p><strong>Cre­ativ­i­ty needs fail­ures to suc­ceed</strong>.</p>
<p>Being cre­ative and exper­i­ment­ing with new ideas means tak­ing on risks. If you don’t risk, you will not win big — at least not with­out the mar­ket­ing bud­get and brand that goes with estab­lished franchises.</p>
<p>To let teams take on risk, and to trust them to make the right deci­sion on the company’s behalf and kill a pro­to­type, is hard.</p>
<p>For this to hap­pen, you need <strong>an envi­ron­ment where employ­ees are not penalized for mak­ing sacrifices</strong>.</p>
<p>We do this by cre­at­ing a <strong>safe­ty net for jobs</strong>.</p>
<p>Your job is not tied to the pro­to­type. If a team decides to kill its idea, then the team mem­bers move into oth­er game teams, or they’ll stay togeth­er and pro­to­type anoth­er game idea.</p>
<p>To prove this approach works beyond our scale, con­sid­er <em>Super­cell</em> and <em>Clash Royale</em>. The team behind <em>Clash Royale</em> was work­ing on anoth­er idea before they came up with that one. The idea test­ed well in beta, it had good reten­tion and mon­e­ti­za­tion stats. But it was not great, cer­tain­ly not on par with <em>Clash of Clans</em>.</p>
<p>The team made the deci­sion to kill the idea because they believed they could do bet­ter. So they took the learn­ings from the previous game, iter­at­ed on the ideas fur­ther, and they cre­at­ed <em>Clash Royale</em>.</p>
<p>Rec­og­nize that peo­ple and their tal­ents are your great­est assets. <strong>Hire and keep great peo­ple</strong> rather than hiring for and keeping certain roles.</p>
<h3 id="heading-conclusions">Conclusions</h3>
<p>So there you have it. Seven things that I learned from my time at <em>Space Ape Games</em>.</p>
<p>What stood out most for me is that a company needs to have a clear identity — it needs to know who it wants to be, and it needs to orga­nize itself to become that com­pa­ny.</p>
<p>And while I love the ethos on small autonomous teams, and the flat hierarchy structure, it also has a downside: at this stage of my career, I am accus­tomed to hav­ing a wide range of respon­si­bil­i­ties, and I crave it.</p>
<p>As time went by, I felt that itch for more respon­si­bil­i­ty creep­ing back. When my old friend <em>Bruno Tavares</em> pitched me the idea of join­ing <em>DAZN</em> to work on all the great things they’re doing, it was hard to say no.</p>
<p>With a heavy heart, this is my farewell let­ter to <em>Space Ape Games</em> and the great peo­ple with­in. You guys are awesome! And I hope the lessons I’ve learned there help others as well.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
