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.