Making Your Mark as a Developer in a Large Organization
Over the last two months, I've been tweaking my daily routines, especially getting back into boxing and other workouts. I'm doing this in hopes of becoming more energetic and thinking more clearly, which I believe will help me code and write more effectively. This shift is partly why this newsletter issue is a bit late. I aim to publish at least two issues each month, filled with lessons, ideas, and advice on software development. However, I've realized it's becoming tough to keep up when I'm sitting at my desk for too long every day. In my last issue, I talked about how I managed to find more time in my already packed schedule, and while most of those strategies worked well, they don't seem sustainable if I continue at this pace for much longer. That's why, in late February, I decided to restart my exercise routine and try to stick with it this time.
That said, in this issue, I want to share some thoughts on how to be effective in large organizations as a developer. I've been asked for tips on this topic several times. Although I've written extensively about working in a consultancy/developer role in Thoughtworks Insights (Professionalism, Feedback, and Collaboration in the Tech Industry and Part II: Professionalism, Feedback, and Collaboration in the Tech Industry), this time I'm focusing on working in a product team, like my current role at Atlassian. Even though there's a lot of overlap, you'll likely notice some differences as well.
Before I can start, let me share an example first and see how these traits I’d like to highlight here work in a real-world scenario.
Our team has recently implemented a feature in Jira Service Management on the admin settings page, enabling the admin to select from a list of templates. This simplifies the workflow for Jira agents. While the feature itself was not complex, the journey offered several valuable insights.
In particular, while integrating analytics events for user interactions, I encountered a significant amount of boilerplate code in our repository. This code, for instance, emitOperationalEvent
, triggers on various events such as network requests, errors, and button clicks.
I think it would be great if I could improve the codebase to some extent by reducing the boilerplate code. I took a deep dive into our codebase and its dependencies, including those maintained by other teams. Through detailed illustrations and code snippets, I visualized the entire framework into a long-form article. After days of exploration, I gained a thorough understanding of our analytics structure, bolstering my confidence in navigating and utilizing it effectively.
The article not only helped me to understand how the whole architecture works, some patterns I can reuse in other similar scenarios but also helped others from other product who use the same architecture and would like to learn more. This added great value to the team and the organisation.
That leads to my first point in the article: bring values.
Delivering Value to Others
Cultivating specialized expertise in a specific domain, like testing, shell scripting, DevOps, or on-call support, transforms you into a pivotal figure. This deep knowledge, when combined with fundamental coding abilities and a thorough understanding of the product, markedly boosts your worth. On the flip side, if your strengths lie in orchestrating or managing cross-team initiatives, you might want to think about shifting your career focus toward project or engineering management roles.
"Within every complaint lies an opportunity."
Complaints are commonplace: the protracted and complex performance review cycles, the fragile data fetching strategies in our code, or the eslint rules that seem to complicate rather than simplify our work. Yet, these grievances are veiled opportunities. Identifying a solution, or at the very least bringing these issues to light for a detailed analysis and developing a plan of action, can add immense value. This leads us to a critical aspect: driving outcomes.
Driving Outcomes
It happens quite frequently: you're all set to tackle a task, only to find yourself blocked by external dependencies—be it documentation, communication, the codebase, setups, tools, permissions, hardware, etc. This can be incredibly frustrating in a large organization, turning what should be a straightforward task into a mission impossible (and that’s why a lot of people find it hard to make an impact in a relatively larger org).
Please don't misunderstand; it's not a matter of unhelpful colleagues. On the contrary, most people are eager to assist. However, the sheer scale of the organization can transform what would otherwise be minor hurdles into significant obstacles that mercilessly sap your productivity.
Often, you'll find yourself needing to consult numerous individuals just to piece together the puzzle required to complete your task. Thus, having the drive—or navigational skill—to push through these barriers is essential. You need a plan. To accomplish Task X, you'll require Steps A, B, and C, and even within Step A, you might need to depend on others who could be on an extended break in Europe or situated in a timezone with absolutely no overlap with yours.
The key takeaway is not to passively wait for these issues to resolve themselves. The nature of large organizations inherently includes such barriers; it's inevitable. However, you're fully capable of driving outcomes. When you're blocked, proactively reach out to people in other teams, seek assistance from your colleagues, escalate issues to your managers if necessary, and persist until the task is completed. (Even in the worst case where you didn’t get what you were looking for, your time and effort of chasing down these leads isn’t wasted, at least you have identified some defect of the system - which can be an opportunity in your next round)
Avoid being the person who waits for their manager to check in, only to report, "I've been blocked by XYZ since last week, so there's been no progress." It sends a completely different message when you proactively communicate with your manager, saying, "I'm currently blocked by XYZ. I've attempted solutions 1, 2, and 3, but to no avail. Could you assist me?" This proactive approach not only demonstrates your initiative but also your commitment to overcoming obstacles and driving results.
Emphasising Visibility
Visualizing issues is crucial, especially after conducting an initial investigation. Consider a scenario where a colleague reports a bug related to a recent update from your team. Upon reviewing the problem, you might quickly determine it’s linked to modifications you made last week. While the immediate response could be to address the bug, submit a pull request (PR), conduct tests, and deploy the fix, a critical, albeit less intuitive step, is to communicate this situation to your team and possibly escalate it to your manager for a broader discussion.
The rationale behind this approach extends beyond the immediate issue at hand. In an organization of considerable size, the work done in isolation tends to duplicate or even conflict with others, potentially leading to wasted efforts on similar problems. By bringing these issues to light within your team, you're not only mitigating duplicated efforts but also embedding valuable knowledge within the system that can be referenced in the future. This collective awareness allows for better prioritization of tasks, preventing individual burnout from an overload of responsibilities.
Furthermore, sharing your challenges and findings provides context for your team, facilitating a more informed review process for your PRs. It builds a foundation of shared understanding, which is crucial for effective collaboration and confidence in decision-making. In essence, making the invisible visible through visualization and communication is a cornerstone of navigating and thriving within a large organization’s dynamic environment.
As we conclude this issue, the key takeaways are clear: success in large organizations is about more than just coding—it's about seizing opportunities, driving outcomes, and ensuring visibility for our contributions. These principles, from embracing specialized expertise to tackling challenges with a proactive mindset, are vital for anyone looking to make an impact. Stay tuned for more insights and strategies in our next issue, where we'll continue to explore how we can grow not only as developers but also as invaluable team members in complex professional landscapes.