Developer Types
Addressing the Elephant in the Room
Posted: 2024-05-15![A creative office scene showing three developers represented as animals, each facing their computer screens.](/images/animal_developers.png)
In a recent blog post I explored team performance in software development. Following this, I received a question on LinkedIn about strategies to enhance team cohesion and motivation. My response highlighted an analogy by Mike Williams, categorizing programmers as Monkeys, Tigers, and Elephants. This analogy, drawn from Mike Williams' presentation, How Not to Run a Software Project, is valuable for understanding software development team dynamics.
In this post, I will expand upon this analogy and explore how recognizing these programmer types can significantly improve team effectiveness and project management. In his talk, Mike Williams emphasizes that developers who specialize in prototyping, making, and maintaining products have distinct skills and mindsets.
In the initial stage, when you start from a blank slate, you require developers adept at navigating uncertainty and swiftly adapting to changing needs. Like 'Monkeys' in Mike's analogy, these developers are innovators at heart. They excel in environments that demand creativity and the ability to change and adapt.
As the project moves from prototype to production, the role shifts to developers who mirror the characteristics of 'Tigers.' This phase needs individuals who can focus intensely and drive the project forward precisely. These developers refine the initial prototypes into fully functional products, ensuring that every aspect is optimized and scalable for market readiness.
Once the product is launched, the focus turns to maintenance, a task suited to consistent and reliable developers, like 'Elephants.' These developers are crucial for a product's long-term success as they manage updates, fix bugs, and make iterative improvements based on user feedback. Their thorough understanding of the product and its underlying architecture enables them to enhance its stability and functionality over time.
Prototyping a Product and the Monkey Developer
Phase Description
Prototyping a product is the early stage of software development, in which the focus is on turning concepts into software. This phase is marked by a high degree of inventiveness and agility. Developers in this stage are expected to embrace uncertainty and experiment with new ideas and approaches. The nature of this work demands frequent iterations and a willingness to discard or reshape ideas as they evolve. This phase often produces incomplete solutions that are not ready for production. Developers here are comfortable working with prototypes that only cover some functionalities and only handle very specific cases. The key is to develop enough to test theories and gain valuable insights without expecting perfection.
Team Composition and Qualities
The team typically comprises a small group (fewer than 8 members) of highly autonomous and egocentric individualists. These members are often good developers with extensive technological knowledge. They are pioneers who thrive on challenges and are continuously pushing the boundaries of what's technologically feasible. Their work is driven by a passion for innovation and a desire to explore new territories without the constraints of fully finalized solutions.
Animal Metaphor - Monkey
The Monkey metaphor encapsulates the spirit of the prototyping phase. Monkeys are playful, agile, and intelligent, characteristics that are crucial for developers during this early and fluid stage of product development. Known for their quick adaptability and innovative problem-solving skills, monkeys aptly represent developers who are adept at navigating the often chaotic and unpredictable challenges of creating new technologies. Their ability to swiftly adapt and pivot as needed aligns well with the demands of prototyping, where flexibility and rapid iteration are more critical than perfection and completeness. They are also a bit careless and don’t worry too much if things work out or not.
A Real-Life Monkey
I am a Monkey developer. I can quickly jump from a crazy idea to code. I usually have a proof of concept working in a few hours or days. Well, when I say working, some code works for the happy path, and if the moon is in the right place, you can demo it to people, and it looks ok. But don't let anyone else use the product because things will fall apart if you do anything outside the demo specification. And don't let anyone look at the code because it has been thrown together as a series of experiments where the concepts have shifted while I have discovered the problem domain. The naming is inconsistent at best, and only the most obvious cases are handled.
![Me as a Happy monkey.](/images/happi_monkey.jpg)
Making a Product and the Tiger Developer
Phase Description
The Making a Product phase shifts from conceptual prototyping to focused development, aiming to transform early prototypes into reliable, scalable, and production-ready software. This stage requires high precision as developers refine and optimize their initial ideas into a cohesive product that meets specific market and functional requirements. It is characterized by structured development, stringent testing, and a systematic approach to ensure that all elements of the software function seamlessly together. The goal is to solidify the architecture, enhance features, and prepare the product for deployment, adhering to industry standards and user expectations.
Team Composition and Qualities:
This phase typically involves larger teams than the prototyping stage but still operates under the guidance of focused, driven individuals who excel in project management and detail-oriented tasks. The team members, often resembling Tigers in their work style, are known for their tenacity and ability to drive projects to completion. They focus on achieving goals and are adept at navigating the complexities of turning a rough concept into a polished product. These developers are critical thinkers who can execute precise adjustments and optimizations to enhance product performance and reliability.
Animal Metaphor - Tiger:
The Tiger metaphor is apt for developers in the Making a Product phase due to the tiger's focus, strength, and determination attributes. Just as a tiger hunts with precision and does not waver from its target, Tiger developers focus on their objectives, tackling each task with intensity and a clear vision of the end goal. Their strategic approach and powerful presence are essential in ensuring the project progresses steadily toward completion, mirroring the tiger's role in maintaining control and leading the pack through the development jungle. This phase demands resilience and a commanding grasp of software development's technical and managerial aspects, qualities that Tiger developers embody perfectly.
A Real-Life Tiger
My good friend and often co-worker Tobias Lindahl is an excellent example of a Tiger programmer. When we work together on a project, he picks up where I left off—grumbling about shoveling through my s**t. He dots the i's and crosses the t's, handling all the errors and non-trivial cases I skipped. Tobias has the patience to think through all possible problems and solutions, and then he transforms my mockup or proof of concept into a genuine product.
He can not stand broken or unfinished things. He likes to fix things at home, in the office, and in code. He wears cargo pants and brings a screwdriver with him everywhere.
Maintaining a Product and the Elephant Developer
Phase Description:
The Maintaining a Product phase focuses on the long-term sustainability and evolution of the software after its launch. This stage involves continuous monitoring, updating, and enhancing the product to ensure it remains relevant, functional, and competitive. Developers in this phase are tasked with addressing bugs, implementing enhancements based on user feedback, and adapting the product to new technologies or market conditions. This phase is crucial for ensuring the software's stability and extending its life cycle through careful, incremental improvements and meticulous attention to detail.
Team Composition and Qualities:
The team in this phase generally consists of dedicated, experienced developers capable of deep focus and a thorough understanding of the product’s history and underlying architecture. Often referred to as Elephant developers, these individuals are known for their reliability, methodical approach, and memory for detail. They are adept at managing complex systems and can navigate large codebases to diagnose and fix issues effectively. Their work ensures the product’s performance is consistently optimized and adapts over time to meet evolving user needs.
Animal Metaphor - Elephant:
The Elephant metaphor captures the essence of developers in the Maintaining a Product phase. Elephants are renowned for their intelligence, memory, and stability—indispensable for maintaining complex software systems. Like elephants, these developers are calm, patient, and capable of handling large-scale tasks that require a long-term commitment and a detailed understanding of past interactions within the system. Their role is less about rapid innovation and more about consistency, reliability, and gradual enhancement. They bring wisdom and foresight to the development team, making strategic decisions that impact the product’s future viability and success.
A Real-Life Elephant
My friend and colleague Richard Carlsson embodies the mindset and abilities of an Elephant developer, excelling in software development's maintenance and enhancement phase. Maintainers like Richard possess meticulous attention to detail and a deep understanding of the systems they work with. He often invest significant time in comprehending a system thoroughly before implementing any changes. Then, when he knows what he is doing, he is known for being willing to modify all files in an entire system to ensure proper naming conventions and improve code clarity.
His ability to delve deeply into a codebase's intricacies allows him to make informed and thoughtful changes, minimizing the risk of introducing new issues while resolving existing ones. Elephant developers like Richard prioritize stability, reliability, and efficiency. They have a keen eye for detail and a strong sense of responsibility towards the systems they manage. They focus on ensuring that software continues to meet user needs and adapts to evolving requirements while maintaining a high standard of code quality. Because of the time invested in understanding a system and domain, replacing a good maintainer is hard and expensive.
![A creative office scene showing three developers represented as animals, with t-shirs and cargo pants.](/images/animal_developers_proper_clothes.png)
Happi Hacking AB
Munkbrogatan 2, 5 tr
111 27 Stockholm