Chapter 3. How we, developers, can influence a company's success?

To achieve and maintain success, a company has to overcome numerous challenges: gain a competitive advantage (through product, technology, processes, or operations), endure the rapid growth that success inevitably brings, sustain competitive advantage over the long term, and continuously evolve and adapt to do so.

They may seem like problems for the company's management, not for an individual developer. Yet, even as a developer, you can have far more influence over these concerns than you think.

And it's not only that you can. You have to. Given the size and complexity of modern software-based products, even "regular" developers must proactively contribute to solving these challenges. It's just impossible for a small group of managers, architects, and tech leads to micromanage it all.

So, how can you, as a developer, influence different facets of a company's success?

Competitive advantage: Product

  • Improve your communication skills. Be able to collaborate effectively across functions, with designers, product managers, business stakeholders, and users. Especially, learn how to talk to non-programmers (explain technical concepts simply, abstain from jargon, be patient with less tech-savvy people, etc.).

  • Learn the principles of experimentally discovering user needs. Familiarize yourself with Agile methodologies, empiricism, iterative development, Lean Startup concepts, and product discovery.

  • Aid product managers in validating ideas faster. Master working in short iterations, building small MVPs (Minimal Viable Products), and rapid prototyping.

  • Resist the urge to solve every problem with new code. Get comfortable utilizing third-party integrations and no-code solutions, and rapid idea validation techniques such as the "fake door", "Wizard of Oz", or "concierge".

  • Learn the fundamentals of user behavior tracking. Familiarize yourself with key product metrics, analytics approaches (page views tracking, event tracking, backend API requests tracking, heatmaps, etc.), and the analytics tooling ecosystem (Google Analytics, Pendo, Segment, HotJar, and so on).

  • Understand the basics of usability and user experience (UX). Gain enough UX fluency to collaborate effectively with designers and product managers, and to accommodate their needs.

Competitive advantage: Technology

  • Stay up to date with the newest trends and technological advancements. Especially with the emerging, not yet widely adopted ones. Cultivate your ability to identify and leverage opportunities to gain a technical advantage, and to distinguish promising solutions from fads.

  • Maintain a good overview of the existing ecosystem. Stay informed about both open-source and commercial solutions: languages, frameworks, libraries, cloud and SaaS platforms, APIs, tooling, and so on. Often, the advanced capability you need is already available as a third-party library or service - you just need to know it exists and understand how it can be used.

  • Learn about your company's business domain, its product, and its competition. Build enough context to be able to suggest innovative technical solutions that effectively address the business problem at hand.

  • Stay up-to-date with what's happening beyond your company's domain. Track what other popular apps are doing - what's the current state of the art in the broader industry - so you can "steal" and adapt the best ideas to your company's needs.

  • Experiment with new stuff regularly. Get a good enough grasp of what it is about to be able to quickly learn more about it when needed.

  • Become proficient at integrating new technologies into the existing architecture. Hone your skills in researching, rapidly learning new tech when needed, and creating quick proofs-of-concept and prototypes.

Competitive advantage: Process

  • Become a fast, efficient coder. Learn your IDE in-depth. Get good at debugging. Use tools that speed you up: auto-formatters, code generators, code intelligence, hot reloading, AI assistants, etc. Understand how to organize the codebase to navigate around faster.

  • Understand how application architecture impacts developer productivity. Learn how it affects not only scalability and performance but also efficient teamwork, code navigation, and debugging.

  • Develop a robust toolbox of techniques to minimize and efficiently fix bugs. Deepen your knowledge of unit testing, error handling, application monitoring, and logging.

  • Understand technical debt. Know how to strike the right balance between speed and maintainability. Become good at making the right compromises between delivering business value and maintaining necessary non-functional features (reliability, performance, security, scalability, maintainability, quality).

  • Familiarize yourself with modern software development and delivery processes. Gain a comprehensive understanding of continuous integration/continuous deployment, Git branching strategies, and feature-flag-based development. At a minimum, acquaint yourself with the basics of Scrum, Kanban, and Lean methodologies.

  • Acquaint yourself with process improvement techniques. Understand the practices of retrospectives, project post-mortems, root-cause analysis, and similar methods.

  • Be open to experimenting, to trying new processes and techniques. Be proactive in proposing and championing improvement ideas. But also know how to balance implementing improvements with generating business value.

Competitive advantage: Operations

  • Learn how your various "operations" teams work. Understand what they do day-to-day, what metrics they use to measure their success, what makes them efficient and what slows them down, and how they interact with customers.

  • Maintain a good overview of resources to accelerate the creation of internal tools. For example, automatic admin panel generators, CMS frameworks, UI component libraries, and so forth.

  • Understand the trade-offs between buying, building, and integrating. Be equipped to assist your company in deciding the best approach for internal tools such as admin panels, invoicing systems, CRM platforms, inventory management, order tracking systems, etc.

  • Know how to communicate effectively with customer-facing teams. Learn how to most efficiently keep these teams updated about the status and expected completion time of your work, such as bug fixes, so they can easily obtain and relay this information to customers.

  • Understand personal data privacy and security considerations. Learn how to enhance the efficiency of your "operations" teams by providing them with tools such as user-impersonation or granting them access to user data for tech support purposes, without compromising user privacy.

Growth

  • Learn how to modularize the codebase and architecture. Understand what allows multiple teams to collaborate without collisions. Familiarize yourself with Domain Driven Design, micro-services, micro-frontends, API design principles, git repository topologies, and similar. Understand how to evolve the architecture over time, to accommodate the growing size of the platform and the growing number of teams, without over-engineering it early on.

  • Learn how to make code easy to read, understand, debug, navigate, and modify for other people. Understand the concept of cognitive load. Get a good grasp of clean code principles.

  • Understand what makes the whole engineering organization go faster. Learn how design systems, component libraries, coding conventions, and UI guidelines can facilitate this. Understand compromises between what to standardize and what can be different per team.

  • Master effective communication and collaboration. Ensure your verbal and written communication is clear, understandable, concise, and on-point. Learn how to effectively brainstorm, make decisions together, and navigate disagreement or conflict. Understand how to effectively sync and cooperate with the other teams.

  • Find opportunities to help with recruitment. If not by directly participating in the interviews, then by reviewing CVs, preparing and evaluating coding and system design challenges, and promoting your company (through blogging, social media, conferences, or by directly recommending your colleagues).

  • Make onboarding easier. Understand and use industry-wide standards to lower the entry point for new hires. Know how to document and explain architecture and logic. Be responsive, non-condescending, and open to answering all questions.

  • Help with mentoring. Understand what tasks to assign to someone new or more junior and how frequently to sync with them to not overwhelm them but also not leave them hanging. Be supportive and patient.

  • Take ownership of projects, initiatives, and modules. This will reduce the burden on management, eliminating the need for micro-managing everything.

Sustainability

  • Get a good understanding of the concept of technical debt and the ways of managing it. Develop a keen eye for both under and over-engineering. Learn the patterns and principles of code maintainability and evolving complex legacy codebases over time.

  • Understand the balance between robustness and speed. Be aware of the short- and long-term trade-offs between the development speed and the concerns like reliability, performance, scalability, security, privacy, usability, or maintainability.

  • Understand short- and long-term implications of various architectural decisions. For example, monolith vs microservices, native vs hybrid mobile, REST vs GraphQL, single-page app vs server-side rendering, or monorepo vs multiple repos.

  • Know how to evaluate new technologies not only by their "cool" factor. Be conscious also of the aspects like the learning curve, maintenance cost, ease of recruitment, vendor lock-in, or long-term support. Understand the trade-offs between building, buying, and using open source.

  • Understand how technology choices impact business and UX capabilities. Recognize how they can expand or limit what the company will be able to solve for its users.

  • Participate in setting technical vision and direction. Don't just passively follow business requests. Provide guidance and counsel to the rest of the organization.

Adaptability

  • Familiarize yourself with the principles of adaptation. Learn about the empirical, experimental, and Agile approaches.

  • Be able to quickly pivot and adapt to new trends, tech, and methodologies. Become an eager learner. Know how to learn fast, how to research, and how to efficiently find information.

  • Learn how to build adaptable systems. Understand how to architect systems to make it easy to gradually migrate parts of them to new tech in the future and how to effectively carry out such migrations.

  • Make yourself open to change. Most people dislike and avoid it. Train yourself to become comfortable with it - to thrive in a high-change environment. Get good at adapting to new tech, processes, projects, teams, and roles.

  • Learn how to quickly build rapport with new people. Make it smooth and frictionless to join a new team, project, or initiative.

  • Be open to new points of view. Don't hesitate to revise yours when confronted with compelling evidence.

Isn't this list too ambitious?

The above list of skills - many of them soft or process-oriented rather than code-related - may feel overwhelming, if not intimidating. It's a massive paradigm shift and a huge amount of knowledge, much of it outside of a typical developer's comfort zone.

Do you have to master it all? No. But it's also not completely impossible. And if you want to be a true professional, you must at least understand the big picture and be open to developing skills beyond coding. Plus, be willing to step out of your comfort zone to proactively use those new skills when the opportunity arises.

This will set your career on a rapid-growth trajectory, to senior and beyond - even principal or senior management roles.

However, skills alone won't automatically land you a promotion. You also need to understand how to utilize them for maximum impact and how to ensure your contributions are noticed.