Surprising Things About Working at Well-Known Tech Unicorns

My past few companies - Skype, Skyscanner, Uber - have been well-known companies that I've joined in their "unicorn" phase. Unicorns are private companies that have reached the $1B valuation - and they usually do this in less than ten years. All of these companies were well-known … | Continue reading


@blog.pragmaticengineer.com | 3 years ago

Tech Debt

Blissful unawareness, denial, then acceptance, then resistance. And finally, a pragmatic middle ground. This is the typical journey engineers go through in their relationship with tech debt. It's tempting to get straight to the point: how to remove tech debt, and how to keep it a … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

The Pyramid of Unit Testing Benefits

I have had several "aha!" moments with unit tests, and have been burned several times by the lack of them. I have experienced how automated testing, especially unit testing, is a key building block for teams to iterate quickly and move fast. It's little wonder that all of the fas … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Leading Projects – As a Software Engineer

On my engineering team, every team member eventually leads a project, no matter how junior (or senior) they are. This is a practice I've built up over years. We've shipped complex projects like rewriting the Uber rider app and the Uber driver app - our team of up to 20 | Continue reading


@blog.pragmaticengineer.com | 4 years ago

I Do (Hopefully) Fair Performance Reviews for Software Developers

I've had about a dozen performance reviews during my decade-long software engineering career. Some of them were unmemorable, some okay, but a good chunk of them were just... plain bad. Often, these bad ones marked my "shields down" moment. The point I lost trust in my manager and … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

The Decade in Review for Software Development

As I am doing a lookback on 2010-2020, here are the major changes I've observed around software engineering. If this decade proves anything, it is that technology keeps changing and evolving. But, there is still some stability: Java and JIRA. Let's see if they will survive the ne … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Distributed Systems Learnings in 2019

With the year closing, I'm looking back at things I've learned while my teams were building and operating distributed systems. Building a new distributed system is easier than migrating the old system over to it. In the past two years, I've been part of a few rewrites of distribu … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Readable Code

Good code needs to meets two key requirements. First, it should be correct: when executing, it should produce the result that is expected. Second, it should be easy to read for other developers. Coding is a social activity. Your code does not exist in a vacuum, just implementing … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

An Engineering Team Where Everyone Is a Leader

Having worked for a decade as an engineer at various companies, I noticed howmost teams in software often have "the" manager and "the" tech lead or "the"senior engineer. These are the decision-makers and ones that lead all projects.Many engineers go to these people asking, "What … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

A Philosophy of Software Design: My Take (and a Book Review)

I was somewhat skeptical when starting to read a Philosophy of Software Design[https://www.amazon.com/gp/product/1732102201/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=gregdoesit-20&creative=9325&linkCode=as2&creativeASIN=1732102201&linkId=c8fac98e2115e5448984a6952ca0f794], despite havin … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Working at Silicon Valley Companies – In Europe

I've recently been talking with several other people working in the Europeanoffices of Silicon Valley tech companies: Databricks in Amsterdam, Facebook inLondon, Google in Zurich and a few of my long-time colleagues at Uber, inAmsterdam. Most of us joined these places after spend … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Talk First, Code Later

It's the second time in a few weeks when I see the same, frustrating situationplay out. An engineer from another office and different timezone raises a pullrequest for a service/library my team owns. The pull request has little to nodescription and makes no sense from our perspec … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Yes, You Should Estimate Software Projects

I hear more voices saying there is little point in doing time-based estimations on how long building software will take, and thus we should just stop doing it. "Let's just use story points and estimate complexity, but not the time" and "Let's just try #noestimates" are suggestion … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Seniority for Software Engineers

Together with agile coach Balint Farkas, we recorded a conversation hosted by Iseeq recruitment in Budapest. We explored what seniority means for software developers. This 30-minute session explored my experience on career paths for software engineers, the difference in impact at … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Stop Calling It Bad Code

“This code is bad. We should refactor it.” is something I still hear frequently. “Bad code” has become the common way to refer to any code that's not up to our quality bar. I'm seeing it become a defacto description across the industry, blog posts and in software engineering lite … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Software Engineering Promotions: Advice I've Been Giving

I've had a pretty good run with promotions lately. When I transitioned from being an engineer to management, I had just under ten people report to me. Two years later, all of them got promoted to the next level, as well as a few other engineers, who joined my team | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Software Architecture Is Overrated, Clear and Simple Design Is Underrated

I had my fair share in designing and building large systems. I've taken part in rewriting Uber's distributed payment systems, designing and shipping Skype on Xbox One and open-sourcing RIBs, Uber's mobile architecture framework. All of these systems had thorough designs, going th … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Hacks for Professional Growth: Coffee with a Software Engineer You Don’t Know

While I do my best to keep doing networking, I have to admit that I don't think I'm that good at it. At least the traditional sense of go-to-a-meetup-and-talk-to-people type of networking. This is despite me being an extrovert and having attended many meet-ups and tech conference … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Product-Minded Software Engineers

Product-minded engineers are developers with lots of interest in the product itself. They want to understand why decisions are made, how people use the product, and love to be involved in making product decisions. They're someone who would likely make a good product manager if th … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

The Product-Minded Software Engineer

Product-minded engineers are developers with lots of interest in the product itself. They want to understand why decisions are made, how people use the product, and love to be involved in making product decisions. They're someone who would likely make a good product manager if th … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Things that helped me move into engineering management

I have moved from being a tech lead to engineering manager close to a year ago. I wanted to share some of the things that over prepared me for a softer landing over the years, when making this leap from individual contributor to management. It is not the easiest change, | Continue reading


@blog.pragmaticengineer.com | 4 years ago

A comment is an invitation for refactoring (2015)

Uncle Bob Martin has a pretty strict view on comments. He goes as far to say: A comment is an apology for not choosing a more clear name, or a more reasonable set of parameters, or for the failure to use explanatory variables and explanatory functions. Apologies for making the | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Developers mentoring other developers: practices I've seen work well

How does mentoring work? I asked this question ten years into my software engineering career when I joined Uber. Until then, I've never received or done mentoring, or at least never put this label on any activity I've done before.Uber, however, had an official mentoring program. … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

An Elegant Puzzle Book Review: An Overdue Read for Software Engineering Leads

I've recently read An Elegant Puzzle: Systems of Engineering Management, written by Will Larson. After working at Yahoo and Digg, Will was an engineering manager for two years at Uber, leaving for Stripe right around when I started and transitioned to engineering management. Thou … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Operating a large, distributed system in a reliable way: practices I learned

For the past few years, I've been building and operating a large distributed system: the payments system at Uber. I've learned a lot about distributed architecture concepts during this time. I've seen first-hand how high-load and high-availability systems are challenging not just … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Good Code Reviews, Better Code Reviews

I have been doing day to day code reviews for over a decade now. The benefits of code reviews are plenty: from someone else reading through the change, through knowledge sharing all the way to tooling and automation improvements. If you are not doing code reviews, take the advice … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Undervalued Engineering Skills: Writing Well

I have been coaching several experienced software engineers to further grow professionally, since transitioning to being an engineering manager. I have noticed a few skills that people often underestimate the importance of developing. Skills that add a significant boost to the im … | Continue reading


@blog.pragmaticengineer.com | 4 years ago

Scaling Engineering Teams via Writing Things Down and Sharing – Aka RFCs

I have recently been talking at small and mid-size companies, sharing engineering best practices I see us use at Uber, which I would recommend any tech company adopt as they are growing. The one topic that gets both the most raised eyebrows, as well the most "aha!" moments is the | Continue reading


@blog.pragmaticengineer.com | 5 years ago

Efficient Software Project Management at Its Roots

After a decade of shipping software projects in various environments, I have started to notice patterns on projects that are more successful than others. The most surprising thing I'm seeing is how actual, day to day project management methodology is not the most important predic … | Continue reading


@blog.pragmaticengineer.com | 5 years ago