Learn insights into software engineering gained from developing large-scale products at companies such as Uber, Airbnb, and Microsoft
This course is no longer available.
Explore other coursesPreviously at
Course overview
In this course, I will share all the (hard-learned) lessons I acquired building and maintaining software used on a daily basis by millions of people.
This course is not theoretical and covers practical topics you go through and can apply in a typical software engineering day to day.
This course is divided into three parts:
1) Building Software: Code Reviews, Unit testing, Engineering Requirements Document
2) Maintaining Software: Observability & Monitoring, Outage Management, Release Management, Migrations, Monolith/Microservices
3) Team & Culture: Project Management, Conducting Technical Interviews, Onboarding Team Members, Software Engineering Career Ladders
01
Software engineers who want to advance their careers, gain experience and enhance their knowledge and skills
02
Software engineers who want to learn best practices and apply them back to their development team
03
Techies who want to understand practical software development processes and methodologies
Apply new skills in your day to day work at your company
You will be able to directly apply lessons related to code reviews, release management, outage management and other course modules back at your company in your day to day work.
Learn software engineering best practices
Advance your career by leveling up your software engineering skills. Gain experience and knowledge that will help you more effectively build and maintain software products.
.jpeg&w=1536&q=75)
Live sessions
Learn directly from Georges El Khoury in a real-time, interactive format.
Lifetime access
Go back to course content and recordings whenever you need to.
Community of peers
Stay accountable and share insights with like-minded professionals.
Certificate of completion
Share your new skills with your employer or on LinkedIn.
Maven Guarantee
This course is backed by the Maven Guarantee. Students are eligible for a full refund up until the halfway point of the course.
3 live sessions • 51 lessons
Jul
16
Jul
17
Jul
18
In this module, we will learn how to approach a code review from the perspective of both an author and a reviewer.
We will cover how to write pull requests that get quickly approved and how to provide quality code reviews. In the end, we will go over tips on how to write/design elegant code.
Benefits of Code Review
Author Perspective of Code Review
Keep the PR Small
How to keep PR small?
PR outline
Help the reviewer help you
Avoid having the PR grow in size
Be open for feedback
Go sync if necessary
Reviewer perspective of code review
Element of elegant code
Element of good design
Coding tips
Fix a bug / write a unit test
Errors should never pass silently
Stacked PR
Avoid feature branches
In this module, we will learn about the attributes of good unit tests that allow you to modify code safely without worrying about breaking existing functionalities.
Unit testing principles and best practices
In this module, we will learn why and when we need an engineering requirements document and what to include in it.
We will cover how to align different engineers or engineering organizations through an engineering requirements document.
Engineering requirements documents and information sharing
ERD template
Maintaining software without good visibility over what is happening in production is impossible to do.
In this module, we will learn what needs to be in place to be able to monitor and debug released software. We will also cover alerting and on-call rotations.
Dashboards
Logging, tracing, and user journey analysis
Exception tracking and monitoring systems
Alerts and on-call rotation
In this module, we will learn what to do during an outage and how to return a service status back to green. We will also cover how to write a good post mortem document.
Outage management and postmortems
Great software is deployed software.
In this module, we will learn how to safely release software to production and have the right tradeoffs between continuous development/integration and service uptime.
Great software is shipped software
Steps before landing a PR on main
Release steps
Mobile releases
Who and cadence?
Environments
Work enough as a software engineer and you are guaranteed to do a migration.
In this module, we will learn how to safely transition from one system to another while balancing this process with the need to fix bugs and release new features to production.
Migrations and system evolution
Shadowing, reverse shadowing and system deprecation
In this module, we will learn the pros and cons of a monolith/microservices architecture. We will also cover the good attributes of a microservices architecture and repository.
Microservices/Monolith architecture considerations
In this module, we will learn about top to bottom requirements and vice versa and how to find a middle ground between them. We will cover a good way to do project management at a software company. In addition, I will share an Asana template you can use within your team.
Project management methodologies
Daily standup
Status update
The quality of your team members will ultimately determine how successful your company is.
In this module, we will learn how to conduct interviews to gather the signals needed to decide whether to extend an offer to a candidate or not.
Maximize signals in technical interviews
Coding interview segment
Design/architecture interview segment
Debrief technical interviews
In this module, we will learn how to onboard new team members and get them successfully ramped up and productive within their team.
How to onboard team members and set them for success
In this module, we will discuss tips on how you can support and unblock your team while still being able to complete your deliverables.
Maker's schedule, manager's schedule
Office hours
Q&A wiki
Delegate
In this module, we will go over the different responsibilities at each level of a software engineering career ladders.
Software engineer I
Software engineer II
Senior engineer
Staff engineer
Principle engineer
Software Engineer - ex: Uber, Airbnb and Microsoft
I have built, maintained and supported software in production for big companies and early stage startups.
I designed and implemented software that is used on a daily basis by millions of people.
I was the lead engineer on the Uber offer (dispatch) flow - a critical part of an Uber trip - and Uber for Business.
I conducted thousands of code and design reviews, was part of teams that multiplied in size and was the engineer in charge during global outages.
I enjoy writing elegant code and turning ideas into working software.
I write software engineering articles on my newsletter: Software Engineering Tidbits.
I am passionate about teaching and mentoring. It is one of the main reason I am teaching this course. One of the best feedback I get out of this course is I am applying a lot of what I learned in my day to day.
3 days - 2 hours per day
Wednesday
9:00 am - 11:00 am PT
Building Software: Code Reviews, Unit testing, Engineering Requirements Document.
Thursday
9:00 am - 11:00 am PT
Live Session + Q&A
Maintaining Software: Observability & Monitoring, Outage Management, Release Management, Migrations, Monolith/Microservices.
Friday
9:00 am - 11:00 am PT
Live Session + Q&A
Team & Culture: Project Management, Conducting Technical Interviews, Onboarding Team Members, Software Engineering Career Ladders.
Active hands-on learning
This course builds on live workshops and Q&A
Interactive and project-based
You’ll be interacting with me and other learners through the course
Learn with a cohort of peers
Join a community of like-minded people who want to learn and grow alongside you