Refactoring
Building a world class engineering organization — learning from cave paintings and horsey land art

Summarized using AI

Building a world class engineering organization — learning from cave paintings and horsey land art

Shane Becker • April 24, 2023 • Atlanta, GA

In his presentation at RailsConf 2023, Shane Becker explores how lessons from ancient human architecture can inform the creation of world-class engineering organizations. He introduces the theme by referencing enduring structures like Stonehenge and the Lascaux cave paintings to highlight the significance of durability through material and maintenance. Becker encourages engineers to consider what practices will ensure their work endures over time.

Key Points Discussed:
- Historical Examples: Becker draws parallels from various enduring human achievements, including the Brewarrina Aboriginal Fish Traps, the White Horse of Uffington, and the Japanese Shinto shrines. He emphasizes the importance of maintenance in preserving these structures.
- Personal Journey: Shane shares insights from his career path, touching on his experiences in small startups and large corporations, and the supportive culture that has enabled him to thrive as a neurodivergent individual.
- Importance of Community: A strong focus is placed on the community's role in achieving collective goals, stating that no significant endeavor in engineering can be achieved alone.
- Defining World-Class Engineering Organizations: Becker describes a world-class engineering organization as one that prioritizes people, values collaboration, and processes decisions collectively. He emphasizes the need for shared values and diversity in teams as a driver for better business outcomes.
- Tactical Strategies for Improvement: Becker outlines tactical strategies including:
- Working in small, manageable chunks to reduce risk and increase adaptability.
- Keeping the default branches of repositories deployable at all times to ensure smooth business operations.
- Emphasizing early involvement in product design and feature development with a focus on addressing needs before they become burdensome.
- Prioritizing documentation and clear ownership of projects to reduce friction and improve maintainability.
- Cultural Aspects: He highlights the importance of writing principles and values to guide team decisions and promote a culture of success, advocating for simplified coding practices and leveraging existing conventions rather than reinventing the wheel.

Conclusion: Becker concludes with a call to action, urging teams to reflect on their practices and implement changes that can foster a healthier work environment and more robust engineering endeavors. His message stresses that the secret to building a world-class organization is to start anywhere and embrace a mindset of continuous improvement.

Building a world class engineering organization — learning from cave paintings and horsey land art
Shane Becker • April 24, 2023 • Atlanta, GA

Building a world class engineering organization — learning from cave paintings and horsey land art by Shane Becker

Human built things survive for a Very Long Time™ by one of two ways: materials or maintenance.

What we can learn from Stonehenge, Lascaux cave paintings, Brewarrina Aboriginal Fish Traps, the White Horse of Uffington, Iranian windmills, and Japanese Shinto shrines?

If we knew for certain that our Rails apps would be in use in ten years (or a hundred!), what would future us wish that we would've done now to build a better future?

RailsConf 2023

00:00:20.420 I want to tell a story that starts 40,000 years ago when a group of people in Australia got together and built a system of fishing traps in a river that has been in use for 40,000 years.
00:00:28.380 It’s believed to be the oldest remaining human-built structure. Around the same time, our other ancestors in Europe and Asia were painting inside caves, depicting many animals and, of course, some iconic negative hand stencils.
00:00:35.100 It’s fascinating to think we accomplished this massive feat of creativity and ingenuity, separated by time and space, without any way to exchange ideas or inspiration, suggesting that to be human is to create.
00:00:42.239 Fast forward many thousands of years, we observe another example of remarkable human achievement: Stonehenge. This megalithic structure was erected by a group of humans, also around the same time when the Pharaohs in Egypt were forcing countless enslaved people to build monumental structures like the Great Pyramids and the Sphinx.
00:00:49.860 In England, we see the creation of a site known as the White Horse of Uffington, where individuals whose origins are unknown dug and constructed minimalist land art about the size of an American football field.
00:00:55.739 This site, filled with chalk rock from a nearby quarry, is remarkable and filled with the creativity of those early people, showcasing their expression, even if we’re uncertain of its exact representation.
00:01:03.600 Then, around 1,400 years ago, something different occurred in Japan. A shrine was built next to an existing shrine as an exact duplicate, followed by the dismantling of the original shrine, a practice that has been repeated every 20 years since.
00:01:09.299 Similarly, about a thousand years ago in Iran, people built windmills in a particularly windy region, which have remained in use ever since.
00:01:14.580 These windmills have continuously powered their various needs for centuries, and while a government development plan may have threatened their existence recently, they have otherwise stood the test of time.
00:01:20.400 So if you only came to learn about cave paintings and horsey land art, you're free to go. Thank you for attending my TED talk.
00:01:26.460 But I believe there are valuable lessons hidden within these stories that can guide us in building better engineering organizations.
00:01:33.479 First, let me introduce myself. My name is Shane Becker, and I share my face on the internet. I have a neurodevelopmental condition known as Fantasia, meaning I have trouble visualizing things in my mind.
00:01:39.060 I also have ADHD, which you may know about, and I'm on the autism spectrum. Some people refer to that as being neurodiverse or neurospicy.
00:01:44.400 If you can relate to any of this, know that you're not alone, you're not broken. I have a wonderful team around me who accepts, supports, and celebrates me for who I am.
00:01:49.460 I’m incredibly grateful for their kindness and understanding. My managers, the whole company — they're really great to me for that.
00:01:56.099 You can find me online as 'vegan straight edge' in most places, but not Twitter anymore due to its comment feature. Instead, you can find me on Mastodon at vegan straight ruby.social.
00:02:02.819 In 2005, shortly before doing a wobbly handstand at Four Corners, I watched the infamous 'Build a Blog in 15 Minutes' screencast, which blew my mind and changed my life.
00:02:09.599 It introduced me to three pivotal things that I’ve utilized every day since: Ruby, Rails, and TextMate, my favorite code editor. A few years later, in 2009, I unexpectedly find myself on stage at RubyConf in Kobe.
00:02:17.160 I stood in the back of the room with my friend Gay, filmed it, and ended up giving my first talk. Surprisingly, I discovered I loved speaking publicly, especially among peers who laughed at my jokes.
00:02:24.360 A decade ago, I was up on stage at RailsConf Minneapolis, reflecting on how this community profoundly transformed my life.
00:02:30.780 In March 2020, I planned to tour with Rage Against the Machine to promote anarchist literature, but everything shifted dramatically due to the pandemic.
00:02:37.320 We’ve all lost so much; many of those times were exceptionally difficult. The isolation I experienced during those hardest times was profound, and it was the most alone I’ve ever felt.
00:02:43.620 However, there were individuals in my life who made a significant difference, and they mean the world to me.
00:02:49.620 Now, standing here with all of you feels like a kind of coming home, albeit a different home because we can never return to the place that we once knew.
00:02:55.260 It's essential to embrace change, so I’d like to thank my friend Jim for his encouragement to submit this talk and get back into sharing ideas.
00:03:01.440 I live in Portland, Oregon, and I'm currently a Staff Engineer after previously serving as an Engineering Manager for a company based in San Francisco, California.
00:03:08.099 We operate as a hybrid model, with some team members in the office while most of us work remotely.
00:03:15.780 For the past four years, I've worked at Hover, and it’s important to clarify we’re not the domain registrar.
00:03:23.400 In the last two months, I've started taking ADHD medication, which causes dehydration, so I’ll be drinking a lot of water while I speak.
00:03:29.640 At the core, our work involves using our apps to take photos of houses, which we then transform into 3D models using the magic of computer vision and machine learning, yielding detailed measurements and textures.
00:03:36.120 These models are utilized by homeowners, roofing and windows contractors, insurance companies, and more.
00:03:41.220 Here are some examples of what we create; these are all renders of the same house represented in various styles. We heavily utilize Rails applications in our work.
00:03:48.780 We have several frontend applications, and while we’re transitioning many components to ERB views, we're also integrating Stimulus and Hotwire where appropriate.
00:03:55.319 On the 3D side, our approach is flexible, adopting whatever tools work best for us, and we’re always on the lookout for talent.
00:04:02.820 So, if you’re interested in any of these roles, feel free to approach me; I have business cards here for that purpose.
00:04:09.599 And for those watching this at a later time, welcome from the future! Just so you know, we are still hiring.
00:04:17.160 Throughout my career, I've worked at various companies, from tiny three-person startups to large corporations like Google.
00:04:25.740 I've also worked closely with immensely talented individuals, which has shaped my perspective on software development.
00:04:32.760 Today's talk revolves around observations I've made over the past couple of decades while making software, predominantly using Rails.
00:04:40.320 I often find myself reflecting on the advice I've encountered in programmatic guides or magazines.
00:04:46.800 Now, as I transition back into our narrative, I feel like I'm on time with our engagement, so let's dive into our main topic.
00:04:54.120 When humans construct things meant to endure, they usually last due to the quality of materials or consistent maintenance.
00:05:00.990 Products like cave paintings reside within rock, while grand structures like Stonehenge and the pyramids are also crafted from stone.
00:05:07.740 However, many lasting structures owe their endurance to the ongoing maintenance provided by countless people over generations.
00:05:14.940 For instance, the White Horse of Uffington would be lost to time without the annual effort of people maintaining it.
00:05:21.420 Every year, groups of people haul chalk from a nearby quarry to refill the figure, a practice extending back 3,000 years.
00:05:26.400 The origin of the figure is uncertain, and its representation remains abstract, yet the act of maintaining it serves to keep it alive.
00:05:30.900 So how do we transition from discussing materials and maintenance in ancient history to creating a world-class engineering organization?
00:05:38.160 I’ll refer to the phrase 'world-class' throughout this talk for brevity and structure our discussion around these questions.
00:05:46.140 Some questions are straightforward, and I’ll breeze through them, while the latter questions will delve deeper into more actionable, Rails-specific insights.
00:05:53.880 When should you start? Right now! Always seize the moment; never wait or think it’s too late to improve.
00:06:01.019 Where should you apply these improvements? Everywhere! Regardless of your position within a company, you can make your workspace better, and positivity is contagious.
00:06:07.740 Why should you do this? Because why not? This motivation alone is reason enough.
00:06:13.800 We should transition from a state of mediocrity to something great because, if engineers do not advocate for ourselves and our needs, design and product teams will not do it.
00:06:20.160 As time has shown, entropy will always move in one direction. We cannot ignore ongoing maintenance, whether it be in air filters in homes or software systems; everything demands attention.
00:06:26.460 And ultimately, we all face mortality, making the argument that nothing matters true in some abstract sense.
00:06:32.280 Still, I strongly believe that optimism is a helpful strategy for forging a better future.
00:06:39.960 Without believing a brighter future is possible, we fail to rise to the challenge of making it a reality.
00:06:46.320 This notion holds merit in our personal lives, professional spheres, and collective endeavors in social justice.
00:06:52.440 Many of us have significant power and privilege in this industry, and we should leverage that power to uplift ourselves and others, including those who have not yet joined us.
00:07:00.060 This includes future teammates who may not work with us yet, and it’s crucial to create an environment that values effort and teamwork.
00:07:06.600 When we push for circumstances where everyone can contribute, vibrant outcomes are often the result, even for easily accomplished tasks.
00:07:12.360 The reality is that most tasks in our workflows consist of forms, web pages, and relatively simple outputs.
00:07:19.680 True challenges arise only when decisions made lead to complexity that unnecessarily complicates processes.
00:07:25.920 And yes, a strong engineering organization enables the product team to thrive; the reverse, however, is not always true.
00:07:31.320 That said, in my experience, I have collaborated with remarkable and intelligent product managers and designers, making for a strong partnership.
00:07:37.960 When those professionals understand the importance of synergy in teamwork, it makes tackling problems together rewarding.
00:07:45.540 So who is responsible for driving this positive change?
00:07:51.660 Do we seek the mythical 10x programmer or the elusive ninja superstar? No, that's not the case — anyone in this room or watching this video can enact change.
00:07:58.320 It’s not about individual talent or capability; it's about people sharing values and acting upon those values collectively.
00:08:05.940 This approach is equally effective regardless of company size, whether in startups or larger corporations, or even in non-profits or open-source projects.
00:08:11.400 Furthermore, the majority of the challenges we face are not complex computer science problems but rather unremarkable issues requiring thoughtful resolution.
00:08:18.420 So, let's prioritize making the mundane unremarkable, honing our focus on what is truly remarkable.
00:08:26.520 We shouldn’t indiscriminately use JavaScript for all tasks; it should be employed where it adds unique value, like on Google Maps.
00:08:34.380 Ultimately, this is about fostering strong relationships among the people in our workspaces, focusing on how we can collaborate to shape our surroundings.
00:08:40.320 In conclusion, no significant endeavor in engineering or in our lives can be accomplished in isolation; we must embark on this journey together.
00:08:48.360 Drawing from an old anarchist belief, I maintain that my individual liberty is tied closely to our collective emancipation.
00:08:53.940 We must extend this concept into our professional domains, recognizing that my individual engineering experience hinges on our shared engineering experiences.
00:09:00.960 Refactoring cannot solely be the responsibility of one person; it requires collective effort.
00:09:08.640 Remarkably, those cave paintings that survived the test of time were not painted by a singular artist, nor was Stonehenge erected by one individual—it takes a community.
00:09:15.840 This collective effort is essential; we succeed together or not at all.
00:09:20.040 Now, let’s explore what defines a world-class engineering organization.
00:09:26.580 I suspect everyone has a personal definition in their mind, which is fine.
00:09:32.700 As Coach Lasso once said about the offsides rule in soccer, 'I’ll know it when I see it.' That's a bit elusive, but I aim to provide clarity.
00:09:39.960 I previously delivered a talk on this internally within my company and sought a succinct way to express what denotes a world-class engineering organization.
00:09:46.320 In my experience, this concept is less of a definitive noun, something static to aspire toward, but rather an adjective, describing a way of being.
00:09:53.760 What is a world-class engineering organization? It’s a place that engages in world-class engineering practices.
00:10:01.860 One influential series of books published in the 70s comprised 'A Timeless Way of Building' and 'Pattern Language,' which shaped the direction of Agile development.
00:10:08.520 The concept of organic order implies that a whole system cannot be designed or constructed independently; rather, it emerges as a collection of local actions and individual parts.
00:10:16.320 Consider a forest: it doesn’t exist on its own; it’s a collection of trees and the myriad of life connecting them.
00:10:23.940 In contrast, a tree farm lacks the organic complexity found in a true forest.
00:10:30.420 While there are many necessary actions we need to implement, the overarching principle is always about the people.
00:10:37.860 The crux of our lives revolves around interactions and relationships, forming our culture, values, and actions.
00:10:45.779 Writing down our principles is crucial to maintaining clarity in our goals and priorities, thereby guiding our actions.
00:10:51.960 These principles need to be concise and memorable; they should embody the spirit of our mission.
00:10:58.920 Consider Google’s original mission statement — it's memorable and concise, enabling everyone to rally around it.
00:11:06.300 Furthermore, a relevant example from our own community is Matt's design principle for Ruby: 'optimize for our happiness.'
00:11:12.840 When we write these principles down and make them accessible, they evolve into a shared artifact for decision-making moving forward.
00:11:20.479 This helps eliminate subjective opinions and hierarchical battles over who holds the loudest voice at any given moment.
00:11:27.840 Also, it’s important to remember that diverse teams produce better outcomes.
00:11:34.680 This isn’t just a moral or ethical argument; numerous studies affirm that diverse teams yield greater results.
00:11:41.220 A world-class engineering organization should not be filled solely with individuals who share a similar background or demographic.
00:11:48.480 It's essential to recognize that you don't need only PhD holders or principal engineers to contribute meaningfully.
00:11:55.920 Teaching hospitals exemplify this; they consistently rank among the best, showing lower mortality rates and higher success rates.
00:12:02.880 The mixture of various experience levels cultivates teamwork, amplifies listening, learning, and ultimately enhances expertise.
00:12:09.479 Now, I hope I’m not speeding through this; I want to convey these thoughts efficiently.
00:12:16.460 As someone with ADHD, I appreciate faster-paced content but aim to keep you engaged and alert.
00:12:22.900 Earlier, I touched on some abstract principles, but now we will delve into more tactical advice that can profoundly impact your engineering organization.
00:12:30.020 If you take away only one thing from this talk, please let it be this: everything is better when implemented in small chunks.
00:12:37.560 This applies to everything — from methods and classes to deploys and pull requests. A single character change or line modification in a PR is much easier to manage.
00:12:44.220 Additionally, this approach minimizes potential disruption; in the event of a problematic deployment, the rolling back process becomes much more manageable.
00:12:51.120 Next, striving for a deployable state should be the default for any repository's main branch, regardless of its naming convention.
00:12:58.920 Moreover, I propose that if the continuous integration (CI) tests for your main branch do not pass, treat that occurrence with the same urgency as an incident.
00:13:05.480 We can't conduct business if we cannot ship software, so we must adopt a mindset that prioritizes maintainability.
00:13:13.680 Since the nature of our work is inherently change-oriented, neglecting aspects of maintenance leads us to trouble.
00:13:19.600 We cannot defer necessary tasks, like changing air filters at home; these small shifts are merely parts of our ongoing responsibilities.
00:13:26.680 No one is coming to grant permission for refactoring; it's part of our job's very nature.
00:13:32.480 We must maintain efforts to ensure changes are easy and systematic, enabling us to make those small yet impactful adjustments.
00:13:39.160 It's important to separate efforts related to behavior from those of refactoring; large PRs can often cause disarray and complexity.
00:13:45.960 Refactoring should primarily focus on the internal structure without changing its external behavior.
00:13:52.600 An example would be moving from one ORM tool like ActiveRecord to another without altering customer experiences—that's refactoring.
00:13:59.120 Ensure a distinction is made between behavioral changes and structural changes; it allows reviewers to evaluate changes based on language mechanics and company goals.
00:14:06.320 When we adhere to conventions, both organizationally and within development standards, we promote ease and understanding.
00:14:13.660 Always prioritize established conventions over configuration, as it greatly eases onboarding and retention of new hires.
00:14:21.600 Ensure documentation for non-standard practices is available and up to date to minimize confusion.
00:14:28.720 Let’s focus on sharing ownership of software concepts, naming things based on their functions rather than arbitrary terms.
00:14:33.720 If you’re using tools or services, ensure naming conventions reflect their purpose, not who is currently providing them.
00:14:40.680 By naming structured entities like 'feature flag' instead of using branding terms, we enhance clarity and lessen future technical debt.
00:14:46.840 Foster a culture of collaboration; pair programming, collaborative pull request reviews, and cross-team engagement are crucial.
00:14:54.360 Embrace discussions around test automation; while it’s great to write tests for features, leveraging CI processes is the next logical step.
00:15:00.780 Without automation, we may not run tests regularly, resulting in undefined problems down the line.
00:15:06.480 Writing down knowledge ensures its accessibility, preventing dependencies on individuals by allowing insights to be shared indiscriminately.
00:15:12.600 Addressing challenges early prevents potential setbacks. It’s much easier to influence decisions at the early planning stages of a feature’s conception.
00:15:20.240 Bring engineering into the conversation early on, fostering collaboration between product, design, and engineering to set projects in a direction that is sustainable.
00:15:28.420 Also, the onboarding process for new team members should be collaborative and supportive; don’t expect them to rush into overwhelming tasks immediately.
00:15:35.220 Instead, focus on acclimating them to the team dynamic before they begin contributing through code.
00:15:41.180 Security and accessibility are fundamental; consider them non-negotiable and integrate them early in the development cycle, not as afterthoughts.
00:15:48.420 Additionally, resilient architecture is vital; employing patterns like circuit breakers and feature flags will prepare systems for inevitable failure.
00:15:55.120 Every software solution will experience failures; therefore, we must empower teams and create environments where innovation flourishes.
00:16:02.680 Introducing migration strategies shouldn’t be sorely rooted in individual effort; the aim should be cohesive transitions.
00:16:09.640 At times, migrating to a new system or approach can create a backlog of issues—failure to complete migrations leads to accumulating complexity and chaos.
00:16:17.420 Ultimately, we must improve based on what we measure; we tend to look at metrics like revenue, active users, and service uptime.
00:16:24.920 However, we should also search for indicators that prompt behaviors fostering system upgrades and encourage the resolution of persistent issues.
00:16:31.740 Moreover, the ongoing maintenance of core systems should not become a burden assigned solely to individual contributors.
00:16:38.280 We must ensure our teams develop adequate resources to prevent burnout and maintain enthusiasm.
00:16:43.660 Finally, while reflecting on my takeaways for Ruby on Rails, I wish to highlight three critical sections for a thriving organization.
00:16:51.240 The first involves a commitment to conventions; in every way possible, adhere to established standards to reduce complexity.
00:16:58.200 Valid reasons exist for implementing microservices, but one must take care that services evolve organically and aren’t simply product of individual whims.
00:17:04.840 And remember, as we choose to build or break down services, we must consider the long-lasting ramifications of those decisions.
00:17:12.960 Developers must leverage the Rails view structure, rather than opting for over-complicated JavaScript implementations when simpler solutions exist.
00:17:20.880 In summary, prioritize effective and straightforward solutions wherever possible.
00:17:27.420 Throughout the organization, we should constantly seek to reduce friction in individual experiences tied to software development.
00:17:34.440 When we utilize technology that reduces friction, reliability is ensured, and functionality becomes familiar.
00:17:41.220 Conventional tools and mechanisms are often best, as their predictability allows us to focus on meaningful development work.
00:17:47.880 Integrating first-party tools directly to our established systems helps streamline the onboarding and enhance our work quality.
00:17:55.440 Avoid spectacularly complex or untrusted software; adopt systems recognized across the industry, like GitHub.
00:18:02.520 Each issue we solve should be met with the idea of not reinventing the wheel whenever possible.
00:18:08.640 Sometimes this means bundling repetitive tasks into a standardized workflow, while most of the time we should simply not touch what already works.
00:18:15.960 As a collaborative team, we must seek to define ownership clearly—everyone must have defined roles.
00:18:22.920 Cohesion within the team creates accountability and inspires ownership, making contributions more meaningful.
00:18:30.240 Encourage collective decision-making, enabling teams to select the most appropriate tools reflecting their individual preferences.
00:18:37.320 As we engage in our collective work, acknowledge the importance of transparent communication between teams to achieve better cohesion.
00:18:43.680 It’s important to foster a culture of trust and growth; establish specific, engaging rituals within teams to enhance camaraderie and productivity.
00:18:51.240 At our organization, we have instituted 'Excellence Fridays,' where team members are encouraged to dedicate time toward personal development.
00:18:57.480 Consider how these principles can be applied back in your work environments.
00:19:05.460 If any part of this talk has resonated with you, I urge you to identify areas for improvement in your environment.
00:19:11.520 Whether it’s swapping out jQuery for Stimulus or implementing small upgrades, every action counts.
00:19:18.120 Collaborate with your teammates to create realistic plans and put them into action, whether it’s in the office or at home.
00:19:25.920 The potential for change exists, and we need to seize opportunities when they arise in the fleeting moments of excitement and inspiration.
00:19:32.940 If you face challenges beginning this journey or convincing your teams or company, I am available for hire as a consultant.
00:19:39.840 For a limited time, I can support you remotely or in person to facilitate these ideas within your organization.
00:19:46.180 As I conclude, I want to acknowledge everyone who has influenced me along this journey as inspiration doesn’t exist in isolation.
00:19:53.020 I want to recognize and thank my best teammate Matt and all those who have shaped my understanding of what a world-class engineering organization can be.
00:20:00.500 And if you're intrigued by the cave painting references, I highly recommend John Green’s podcast, which tells the captivating story of a cave in France.
00:20:07.560 Finally, always remember if you seek to change anything, start somewhere, because the key to progress is to begin.
Explore all talks recorded at RailsConf 2023
+85