Welcome to our first blog post. My name is Eric Brooke and I have the privilege to be the CTO (Chief Technology Officer) for SpotHero. As an introduction to the SpotHero Engineering Team, I’m excited to share the roles and responsibilities of our different squads, tech stack, and frequently asked questions I hear in the interview process.
What Business Problem are you Solving?
We are a marketplace for parking cars. Our goal is to create space for life for our drivers, meaning we help create a quick and easy parking experience so they can do more of what they love.
Research conducted by INRIX shows that the average urban driver spends on average eight minutes circling and searching for an off-street parking spot, which equates to upwards of 55 hours per year (INRIX, 2019).
If drivers have an easy way to book a parking spot ahead of time, this equals less congestion on our roads, fewer carbon emissions, and a positive impact on our environment.
Why is this interesting, from a problem perspective?
Being a parking marketplace means you have to deliver great products for both drivers and operators (those who own or manage parking facilities). Both have different needs, and speak different languages. We have to ensure we show up where customers are searching for parking, whether that be on web, mobile web, Android App, iOS App or partner websites or partner mobile App.
We strive to be the off-street parking industry leader, which means we’re always looking to integrate with all technology (both old and new). Parking companies utilize a wide range of PARCs hardware equipment (e.g. gates, ticket machines, etc.), meaning that there is no one-size-fits-all when it comes to parking hardware and software. With no set standard in the market, this means over thirty companies use a wide variety of PARCs equipment.
For our operators, we aim to give them control of their parking rates whilst providing them insights to increase operational efficiency. This requires great Data Engineering and dedicated Data Science skills.
What Corporate Values does SpotHero have?
Give Drivers the Right of Way
We take the Hero in our name seriously, and we go the extra mile to make sure our drivers have an experience we’re proud of.
We venture outside our comfort zones to accelerate company and individual growth. With a desire to learn and willingness to teach, reflection on the losses as well as the wins, and sharing and seeking of candid feedback, we drive ourselves and the company forward.
We believe strong relationships are the core of high-functioning teams. We build these relationships by intentionally getting to know one another, taking accountability for our work, showing vulnerability, and remembering that trust is a two-way street.
Don’t Get Stuck in Traffic
We believe in empowering people to use their unique voices to solve problems and find different routes to success. With the humility to ask for help, the flexibility to adapt, and the resilience to chart the uncharted, there are no limits to what can be achieved.
Remember to Signal
We all strive to do our part in communicating openly and honestly with each other in moments big and small. This means sharing ideas, keeping stakeholders informed, explaining the “why” behind decisions, and doing so with care.
Respect Fellow Drivers
We believe in respecting our fellow teammates and creating a safe space for people to get from here to there. This means listening, assuming positive intent, and seeking to understand different perspectives.
Enjoy the Ride
Laugh, feel the wind in your hair, and remember not to take yourself too seriously.
How would you describe your Engineering Culture?
Is the first word I think about when I think about the Engineering team. When we get something wrong we own it and learn from it. Whether it be to take the site down or be given an opportunity to comment on a draft engineering strategy or even a rough conversation or pull release comment. We are much more interested in learning the root cause, and fulfilling our commitments to our fellow humans and our squads. And ultimately to our Customers. As part of this everyone in Engineering is part of an on-call rotation on systems they understand.
We look to hire curious people who ask a lot of questions, but also those who possess the ability to go and figure it out (Don’t Get Stuck in Traffic!). Every bi-weekly sprint, everyone gets a half day to discover something new. But curiosity is not just about technology, it’s also about how you collaborate with others. It’s important to come at those moments with curiosity and not judgment – so rather than just dismissing an idea we look for people who ask questions and build shared understanding before making a decision. We love people who are constantly learning new things and evolving as a person.
We encourage and hire people that can code, write tests, write useful documentation, and essentially build products for our customers. Different perspectives, backgrounds, cultures, and all the things that make us each unique, bring with them a great ability to solve problems in different and unique ways.
We look for people that like working and sharing with others. We value fueling our relationships (We have a SpotHero value -> Fuel Relationships) . We believe that taking time to build relationships, virtually and in person, at happy hour, company wide social events, ERGs, strengthens our ability to innovate, grow, and collaborate. A lot of our work is Logical, and humans are not! So whilst we are all nor perfect at this, we are all willing to grow and learn how to work with our fellow humans. We look for Engineers that are Technical Educators not Technical Dictators – because they love to share what they have learned, whether it be from success or failure – which helps us all become better problem solvers. We use Agile methodology as our approach to building Products.
As a company we share our daily pacing with all staff, the good and the not so good. Within Engineering we share, so people can process, reflect and consider better solutions for our Customers whether they be Drivers or Operators. Our Squads share their Respectives, i.e. their journey to becoming a better team. We love to learn from Incidents, we don’t hide our successes or failures.
We don’t call each other “resources”. We are human, we have lives and relationships both at home and at work. We have flexible PTO (Paid time Off) to give our people the flexibility to do what they need to do to be well and healthy. And we encourage PTO – Both myself and my partner Matt Dibari (Chief Product Officer) – check each month to see if our people are taking enough time off. We prefer well-rested, smart people who make smart decisions.
We care about providing a wide range of employee benefits so when things go wrong you have our support. We have a Flexible Work Model, what that means is that there is not a set amount of days that you have to be in office, this is flexible to what works best for you and your Squad, Engineering and SpotHero. The expectation would be that you go into the office either during a sprint review or during set Squad meetings e.g. Retrospective, so you can get to know your Squad and collaborate face to face – as well as other engineers outside of your Squad. This helps our people invest in their relationships – both at home and at work.
How is your relationship with Product?
Matt DiBari (Chief Product Officer) and I believe that the key to our success as a business is for SpotHero to be Product-led. For us in the Engineering department, that means having a strong relationship between every level of Engineering Management and Product Management. Product leverages Design Thinking principles and when applicable Test and Learn and Lean UX to find the right problems to solve. They bring Engineering into Discovery to build empathy and create the best solutions.
Does this mean we only build feature after feature, with little regard to mounting tech debt? No. Each year we “reserve” time for each Squad to work on Tech Debt and Maintenance (keeping our languages, frameworks and tooling up-to-date). Our Product partners understand that “slowing down” is sometimes the best way to speed up.
How is Engineering structured?
The Engineering Department is broken up into Leagues. Within each league, there are multiple squads with a team of diverse humans and engineers. Each league is led by a Director of Engineering.
- Drivers League serves our Drivers (i.e. Business to Consumer (B2C), via the Web, Android and iOS mobile applications, and our partners. This is led by Alan
- Operator League serves our Operators (those who manage and own parking facilities – i.e. Business to Business (B2B))
- Engineering Enablement League serves our Engineers, both in terms of Cloud Infrastructure and Tooling as well as providing our partners access to our systems e.g. SpotHero API
- Reporting, Insights and Prediction League takes our production data and copies it to our Reporting Infrastructure and helps create insights and predictions from it.
The detailed version:
The Drivers League at SpotHero is responsible for all aspects of the driver’s experience. This league is responsible for building Heroic experiences on both the web (desktop and mobile) and native mobile apps (Android & iOS). We don’t stop there, we also strive to create a painless experience while parking at garages. This League cares about quality and SpotHero’s value of #GiveDriversTheRightOfWay, which means to us that we take the Hero in our name seriously, and we go the extra mile to make sure our drivers have an experience we’re proud of.
Our Front End Stack is: Frontend is a React Single Page App (SPA) that runs on Node.JS and a statically generated Next.JS App. We build in React/Redux, Sass, Jest/React Testing Library/Cypress, and Webpack. We maintain a private npm repository with shareable UI components, utility functions, Babel/ESLint/Prettier configurations, and custom tasks.
Our Android Stack is: Entirely built in Kotlin, using a MVI architecture. We use Retrofit and OkHTTP for network connections to our backend systems, and utilize ObjectBox for data persistence. We currently use Dagger for dependency injection, but actively looking into updating to Hilt or Koin in the near future. We are always looking to adopt and change our codebase to be up-to-date with the latest industry standards, and look to our engineers to lead changes within our tech stack and codebases.
Our iOS Stack is: Swift using MVC architecture and moving to MVVM, CoreData for Local Storage, and XCTest for UI Testing and Unit Testing. We have also started incorporating some, Swift Package Manager, SPM, for dependency management. Fastlane is used for app automation and building scripts, Bitrise for CI/CD, and Sentry for crash reporting. We will also investigate Xcode Cloud for builds in the coming months. For more info, see iOS Overview.
Our Back End Stack is: Monolith using Django/Python/PostgreSQL. We are moving our Monolith to a Modular Monolith, using Domain Driven Design. We also use Docker, and deploy our apps via Kubernetes. We use Kafka for asynchronous-, and gRPC for synchronous service-to-service communication.
The Operator League is the connected backend Kotlin/JVM ecosystem that enables Drivers’ to experience seamless entry into each parking spot! We are the teams that make this two-sided marketplace come to life! The life and blood of SpotHero are our Integrations Squads who ensure data flows between us and our Parking partners. We provide best-in-class reporting, visual analysis, and management tools for owners to make their parking spot available on our platform and services that process secure and seamless payments. We know which bits and bytes to send to garages to make it easy for you to park. This League is adaptive and resourceful and we #DontGetStuckinTraffic, which means we love solving gnarly problems.
Our Back End Stack is: Mostly Kotlin but we also work with Monolith using Django/Python/PostgreSQL. We are supporting the moving of our Monolith to a Modular Monolith, using Domain Driven Design. When relevant we extract specific domains to Services currently using Kotlin. We also use Docker, deploy our apps via Kubernetes. We use Kafka for asynchronous-, and gRPC for synchronous service-to-service communication. Some of our Integrations are on .NET Core, moving to Kotlin.
Engineering Enablement League
The focus of this league is to support and raise the quality of the work of all engineers in our Leagues and Squads and fellow SpotHero employees across all departments. Whether it be scalability, tooling, automation, or security, the Engineering Enablement League (EEL) is focused on making it easier for other engineers to add functionally to their platforms. EEL also owns our Search functionality and provides our SpotHero API to our partners.
Our Back End Stack is: Monolith using Django/Python/PostgreSQL. We are moving our Monolith to a Modular Monolith, using Domain Driven Design. When relevant, we extract specific domains (e.g. Search) to Services currently using JVM/Kotlin and Go. Kafka fulfills our asynchronous communication needs, and gRPC for synchronous service-to-service communication. Utilizing ConcourseCI, we deploy our Docker images into our Kubernetes clusters.
Our DevTools Stack is: AWS+Kubernetes for hosting. Terraform + Helm Charts for IaaS/Deployment. ConcourseCI for CI/CD. Prometheus, Alertmanager, VictorOps for team alerting. We’re starting to work on multi-region available services.
Reporting, Insights and Prediction League
This League specializes in operationalizing data (owned by other areas of the business) to assist SpotHero and our Drivers with information to empower them to make decisions. To also support our external partners’ journey from data, to discovering useful insights and eventually prediction. The primary clients – Business Analytics (internal and external), Marketing, Data Science, and SHIQ (SpotHero IQ, our Dynamic Pricing data product squad)
Our Data Stack is: We use Redshift as our Data Warehouse and S3 as our Data Lake with Fivetran, Airflow, Kafka and Kafka Streams, and Spark serving as our primary platforms for both batch and real-time ETL. Trino, sitting on top of our S3 cluster, enables querying our Data Lake. Our Data Science models are primarily developed using Python-related libraries (ie. scikit-learn, pandas). Our analysts transform our data into usable tables and views using python executed SQL select statements and use Looker as our BI Tool to serve both data sets and dashboards to our stakeholders. And we use AWS Quicksight for Dashboard on our external Data Products.
Do people move roles in SpotHero Engineering? Or how do we think about Growth for a person?
Growth is essential for all software engineers, as Technology is sometimes aggressive in its pace of change. We often learn a lot on the job, but that is often insufficient for step change evolutions in our understanding of our technology or our customers.
Every two weeks we give all of Engineering half a day for Discovery. This is to be used to discover or explore something new or old that the person is unfamiliar with – and not sprint work. The only rule is to briefly document what you did. Encouraging and giving space for Discovery and growing our Curiosity, we believe is incredibly important for all our growth as individuals, as a team, and to create the best in class products for our customers. It’s too easy to get stuck on one tech or one approach, when everything is always changing around you with Technology.
For every role within Engineering we have a career track, which has a list of capabilities and competencies for each level. Whilst the list is extensive, especially at more senior levels, we don’t expect everything.
Promotions we do every quarter and when you are ready for that level you get promoted, we don’t artificially limit Staff or Principal engineers. If you are at that level, you get promoted to that level. Whilst progress in the early career stages may take a year, the later stages take more work and can take several years.
About 25% of SpotHero employees have been promoted by April 2022. We are also very open to people moving roles, examples include:
- Many of our engineers have moved both Leagues and Squads as they wish to work on different problems
- Our CTO/Founder became Chief Architect and they spend a lot of time coding
- We have had a QA become an Associate Product Manager
- An Engineering Manager becoming an Engineer
How do you think about Management in Engineering?
Each Manager is responsible for the Squad Health (e.g. both the individuals and the Squad itself), Squad Delivery (e.g. do they do what they say they are going to do?) and Squad Quality (e.g. is the product good quality, easy to understand) and each has the following capabilities:
They have to understand software engineering. All of our management for engineers (whether CTO, Engineering Director or Engineering Manager) have come from a software engineering background, either as a software engineer, architect or quality/testing, most used to code for a good number of years and some still do. Many have technical education, but not all, some came from other branches of science or music. We expect all managers to have a good understanding of their systems. How healthy is the code? How good is the testing pyramid? Is the observation good enough to spot problems before our customers see it?
A Student of the Software Development Lifecycle
Is there the appropriate level of documentation for the squad for Onboarding, Incidents (i.e. Runbooks) and shared understanding with other Squads? Is the SDLC working at its optimum? What are the blockers and hinderances? How much Maintenance work and Tech Debt is the Squad completing versus New Features? What are the DORA metrics for their areas of responsibility? How good is the Squad at delivering, what it predicted it was going to do? How is easy is this squad and the systems it owns to work with? How good are the Retrospectives – are people candid about what is going wrong and appreciative of what is going right? How good is refinement? Is there true shared understanding between stakeholder, Product, Design, Engineering and QA?
Curious about People and their Growth
That they have to want to grow others. Being just a people manager or someone that can build great relationships is not enough. You have to want to mentor or coach. You have to be able to give good specific feedback to help the growth. You have to have a career plan for the person, not just words. You have to celebrate and show appreciation in the way that feels good to that person and you have to be able to have the hard conversations when necessary to help that person grow. Management of people is not easy and we expect our Managers to stay curious and keep constantly learn from their people, books, videos, so that they can stay “up-to-date” with our understanding of humans and their needs.
A great partner to Product
Our goal is to build great products for customers, whether they be Drivers, Operators, Partners or other Engineers. Working with Product is a balance of needs and we have to, be able to have candid conversations with each other and be able to collaborate successfully with each other. We both need to be great educators and create as much shared understanding as possible between each other. Our goal is never to create just code, but help build great products for our customers. Using Agile philosophy, we start with MVP and iterate.
Tech Leadership: is it a role or a responsibility?
At SpotHero a Technical Lead is a responsibility, not a role or position – you will not find this role on the career packages. It is limited in time and scope.
A Tech Lead scope can range from a single story to an entire Epic (i.e. a collection of stories that are highly related) or a project of work. The Engineering Manager of a squad will allocate this responsibility as needed (if it is across League, then the Director will allocate and if across Engineering, then the VP of Engineering will allocate).
Why is it limited?
Because we want all of our Engineers to have the opportunity for growth and do not want an entire squad limited by one human being a permanent Tech Lead.
What does a Tech Lead do?
The human in this role is responsible for creating a technical vision/solution, a plan, breaking milestones into technical tasks or stories, if relevant. They will often be the go-to for Product to understand the technical aspects of this work.
They often will collaborate with a Product Manager(s), Product Designer, and Engineering Manager(s) and should be ready to step into the role of breaking large user stories into smaller ones.