A few years ago, I was helping a large bluechip company deliver a multi-year software project. The goal of the project was to modernize a portfolio of legacy software products that had become difficult to maintain, but were still critical to the revenue of the company. When I arrived, these products had accrued significant technical and process debt. The cost to change was high, and the cost to distribute was even higher.
Hundreds of full-time developers were committing changes to these legacy codebases daily. Most developers belonged to a handful of different IT staffing vendors the company had hired These developers were motivated to compete against one another to grow their employers’ contracts. As a result, the existing software development process was full of waste. Production releases were intense, high-risk, ceremonial events. Production servers didn’t receive consistent security patches. Bug backlogs touched the ceiling. The business had lost all faith. Not surprisingly the product and IT culture was unbearably toxic. The inevitable outcome? Half of the full-time software developers at the time left.
To recover from this mass exodus, IT brought in new leadership with a goal to transform the lingering toxic culture. That goal quickly developed into a foggy, herculean undertaking with no clear solution in sight. Eventually, it took two excruciating years of slog, sweat, and tears to recreate a sustainable software developer culture grounded on autonomy, mastery, and purpose.
Today, nearly every bluechip Global 2000 company is undergoing an identity crisis. The unrelenting pace of technological innovation coupled with emerging values like sustainability, autonomy, and purpose has business and technology leaders all around the world scrambling to redefine their “culture and DNA.” Themes like customer-centric, product-oriented, data-driven, diverse and inclusive teams are proliferating throughout corporations worldwide.
“Culture” has become a buzzword for resumes. Cultural transformation is on every IT leader’s “what keeps me up at night” list. IT executives who once wore suits and ties now walk around in hoodies and jeans, carrying Macbooks loaded with tech event stickers. Silicon Valley is everywhere. Yes, software is eating the world. And yes, by 2022, over 70% of all enterprise software will be custom-developed.
What does this all mean for me?
If you work for a large company in enterprise IT, especially in a leadership role, you are undoubtedly under pressure to build a strong software development culture. But how? The short answer is there isn’t a single template for success. Each company’s cultural transformation is unique. It is defined by distinct opportunities, constraints, and realities.
But the heart of a strong software development culture is the same no matter what industry you are in or how long your company has been around: people. Specifically, a strong software development culture is one in which software developers:
- Feel productive to deliver value quickly.
- Feel autonomous to drive outcomes.
- Feel inspired and motivated to create and thrive.
- Feel psychologically safe to experiment, fail, and be vulnerable.
- Feel they are growing to achieve mastery.
Let’s unpack each of these by exploring the specific challenges that enterprises face in creating strong software development cultures and possible solutions they can employ. As we go, I suggest following the timeless advice of Atticus Finch: “You never really understand a person until you consider things from their point of view … until you climb into their skin and walk around in it.”
1. Software developers must feel productive
A famous developer quote goes, “Why do we never have time to do it right, but always have time to do it over?” Due to age and practices, many large enterprises have accrued significant technical and process debt over the years. Think inflexible COTS products, legacy software with suboptimal code quality, bad architecture, tightly coupled integrations, multiple SDLC processes, lack of scalable test infrastructure, and snowflake environments, all enveloped in a deadline-driven project management structure. Get the picture?
Surprisingly, this is a common condition in IT across many industries. The result? Software development processes that are slow and waste-ridden, bloated IT organizations to sustain the chaos, and environments where software developers spend at best 30% of their week writing code. Yes, just 30%! Inevitably, operating in such an environment becomes a game of psychological endurance for any software developer. The eventual outcome? The good ones leave.
Developers need to not just feel productive, they actually need to be productive. In my experience, however, the solution to this problem is rarely straightforward. Still, there are a handful of steps that can help.
Companies must invest significantly in redefining their physical, virtual, process, and team architecture. The end state is one where multiple cross-functional, agile product teams share well-defined contracts and can build and release software independently. Big rock items such as an end-to-end agile SDLC process, scalable code branching and merging strategies, automated CI/CD pipelines, and microservices-based architectures, among other practices, can collectively help solve this problem.
2. Software developers must feel autonomous
Autonomy means freedom from external control or influence. In the typical large enterprise, software developers are asked to write code based on pre-defined architectures, designs and requirements that are handed down from on high. Handing down specifications makes software developers feel isolated from product and technical decisions. It is a total anti-pattern to cultivating a culture of autonomy and empowerment. Hard walls between business and IT, monolithic IT planning and budgeting processes, and the ivory tower nature of architecture functions further exacerbate the situation. In other cases, software developers are asked to build products on proprietary low-to-no code platforms. This strategy quickly thwarts developer creativity, and binds them to a technology they may not believe in.
To build a culture of autonomy, leaders must reduce organizational boundaries, reorganize IT delivery teams into small cross-functional agile product units, and pursue open-source software development as much as possible. Balanced teams that are mission-driven, allocated full-time to a product, and composed of business and IT are a great start even at a micro-scale. Open-source software development gives developers the freedom to practice combinatorial architecture, implement their own patterns, and advocate for reusability. Architects and developers become one and the same. Technical decisions are made by the team writing code. And developers practice incremental design by avoiding big architecture up-front. This also weeds out the odd “boxes & lines diagram drawing” architects who’ve somehow dominated software design for decades without writing a single line of code.
3. Software developers must feel inspired and motivated
I wrote a blogpost a while ago on mission-led companies in which I highlighted the importance of a shared vision, and mission command, a management theory based on centralized intent with decentralized execution. The question I get often from IT leaders is, “How do I create an inspiring culture for software developers?” Sure, productivity and autonomy are prerequisites to a healthy software development culture. But, inspiration is different territory altogether.
Inspiration enables human beings to achieve incredible feats across all endeavors. To inspire is to connect and mobilize someone at the deepest of levels. Yes, it is personal. For software developers, inspiration doesn’t solely originate from their companies’ purpose and value statements. Neither does it come from working on sexy projects and technologies. Inspiration is rooted deep within the subtleties of a software developer’s everyday experience. This includes the manner in which their leaders spread engagement, encouragement and empowerment. Inspiration lives inside an empathic and inclusive space. It is an infectious energy that circulates through a collective system and is transmitted from individual to individual.
4. Software developers must feel psychologically safe
Many companies promote a “hero culture.” Developers and other IT practitioners with maximum tribal knowledge who save the day are rewarded and singled out for praise. For sure, retaining a vast reservoir of legacy IT knowledge is impressive. But a hero culture often results in “average” software developers feeling they must achieve the same understanding in order to be perceived as strong performers. This prevents the formation of a safe space in which developers can be open, ask questions, and express concerns regarding a user story, the product, an architectural detail, or the program vision itself. Deep listening and empathy are lost in such environments. This ultimately leads to cognitive and emotional exhaustion, and eventually attrition. Creating a safe and inclusive environment is the joint responsibility of everyone, especially IT leadership. Topics such as unconscious bias, micro-aggressions, blind spots, equitable opportunity and pay, and other prevalent biases should be discussed in small intimate groups to bring everyone closer.
Another factor that contributes towards an unsafe environment is the legacy financial structure of IT, which makes it nearly impossible to foster a culture of experimentation. Pre-existing bridge-building software approaches thwart all hopes for incremental learning. Instead, massive financial investments are poured into IT projects where value is not realized until the end.
Eric Ries in his latest book The Startup Way proposes an organizational structure built on the principles of lean, agile, and entrepreneurial management. His alternative to the pre-existing financial structure of IT is to establish growth boards, employ metered funding, and advocate for lean accounting. An environment, whether by design or intention, that does not encourage vulnerability and learning through failure repels passionate software developers.
5. Software developers must feel they are growing
Benjamin Franklin said, “Without continual growth and progress, such words as improvement, achievement, and success have no meaning.” IT in large enterprises is usually organized by horizontal technologies with centralized architecture, PMO, and IT operations functions. This leads to the creation of specialized roles, which necessarily isn’t a bad thing. For some companies, specialists make more sense than generalists.
With this approach, developers become very good at specific skills and functions, but don’t ever step out of their comfort zones or develop new skills. For example, a software developer is hired into a group, works within that group on a few software applications over the course of many IT projects. Over-time, this individual gains deep knowledge and skills in that particular area, which makes him or her an irreplaceable part of the team. And, this also inevitably leads to one-dimensional growth.
Modern software companies allow software developers to decide which products they’d like to work on and rotate easily. This model is obviously not feasible for every company. But, through effort and creativity, ensuring that software developers have a range of options to pick from can be accomplished in any company.
A second way to promote growth is by allocating a period of “working time” for software developers to contribute towards personal projects. Most software developers would love to partake in open source software projects, provided they have time and mind-space.
Thirdly, encouraging software developers, based on interest or otherwise, to try out other disciplines such as product management or product design for a period of time can also result in personal and career growth.
Building a strong software development culture is no easy task, but it can be done, even at the most traditional of companies. Software developers are no different than artists or chefs. We thrive when we are allowed to innovate and create. Our sense of reward comes when the things we create bring joy and value to others. To us, meaning resides in what we create, and how we create it. The process is as important as the result. And, for us, that ultimately serves our higher purpose.
So, You Want to Build a “Silicon Valley-like” Software Developer Culture? Focus on the People. was originally published in Built to Adapt.