By Larry McKenzie

This article was written by Larry Mckenzie and Corey Sprague, technical leaders at eBay. You can listen to their discussion on the Google Apps, Games & Insights podcast to learn more about how to build applications using Flutter.

Building native apps isn’t easy, and it’s even more difficult when you have to build an app in less than a year while still meeting the exacting demands of your target audience. We faced this challenge when building the eBay Motors app. But with the help of Google’s interface toolkit, Flutter, we were able to quickly deliver a great and consistent experience for both Android and iOS.

eBay Motors

EBay has been active in the auto market for more than a decade. But a few years ago, our leadership saw an opportunity: we could offer a customized vehicle buying and selling service on eBay. Buying a car is different from most online shopping: buying a car is a significant purchase, and there are special issues to consider during the sale process. EBay tends to list classic cars, rare cars, modified cars and other unique categories of vehicles. EBay sellers often want to find buyers who really appreciate and value their cars. A lot of eBay buyers and sellers were looking for a more personalized and unique service, so we wanted to build a special app for them — the eBay Motors app.

The target audience

EBay Motors is aimed at car enthusiasts. Although enthusiasts pay attention to cars every day, they may only buy them once every few years. So it’s not easy to build an app that they want to use on a regular basis. The team focused on what motivates these people and how they want to interact with other car enthusiasts.

Buyers may be looking for their next car, or just looking around or looking for inspiration. When considering buying a vehicle, buyers want to be fully informed before making a purchase decision. They want to be able to see the vehicle from every Angle – interior, exterior, engine, drivetrain. They want to know about the car, and they want to know about the seller. How does the current owner use the car? Do they drive every day? Has the vehicle been serviced and polished at the garage? Is the vehicle driven once a year and only displayed at auto shows? We wanted to build an experience that satisfied those needs.

When the development team talked to the seller about selling the vehicle, it became clear that the seller cared more about who the buyer was and not always about the price. Some sellers say it’s not unacceptable to cut prices if they feel buyers will really take care of their cars. This attitude is a far cry from the traditional car market, where sellers always want to be able to sell vehicles at the highest price.

In the survey, it was believed that the relationship between buyer and seller did not end when the deal was made. Sellers want to be able to track their cars and continue to communicate with their buyers. Buyers also want to stay in touch and ask, “Hey, I want to remodel this place, but I see you’ve redone other parts before. Can you tell me more about it?” Therefore, we want to build features that allow buyers and sellers to form a community that does more than just discuss transactions.

Choose the Flutter

In developing the app, eBay Motors’ leadership gave the development team a lot of autonomy. The only requirement: the app must be developed within a year. Based on our research, it was clear that the app had to include all the features that eBay users had come to expect: a detailed product page, auctions, messaging, search, etc. The development team also actively added features that helped foster an active community. This meant that we had a huge amount of work to do, and we felt that we wouldn’t be able to meet our deadlines if we were still two separate platform development teams.

Clearly, we need a new approach to application development. The development team did some previous evaluations of cross-platform development tools and didn’t find a solution that we were happy with.

But at the beginning of this project, Flutter 1.0 was released. Flutter is Google’s interface toolkit for building attractive native compiled applications for mobile, web, and desktop based on a single code base. This looked promising, so our development team began a more detailed investigation.

After a thorough evaluation of Flutter, the development team was pretty happy with it. Within a few weeks, the team became convinced that Flutter was the perfect choice for the app.

EBay Motors had two development teams with different working styles, schedules, and programming styles. When deciding to use Flutter, you must figure out how to coordinate the two development teams. Because time is tight, the development team must agree on how to build the application. Everyone has the same goal — to build a high quality product, deliver quickly, and exceed expectations.

The two teams met to discuss all of their differences, and while there were compromises on both sides, the final result was well coordinated, setting the stage for a smooth launch.

Neither team had much experience with the Flutter or Dart, but the guidance provided was detailed and easy to learn.

The first version

We received our first product request in March 2019 — we needed to deliver a Beta app with a working trading experience to our CEO within three months.

The first release requirements forced the team to drastically reduce the application’s functionality due to time constraints. We know that even with Flutter, we can’t solve all of our problems at once — we can’t build a whole community with all the buying and selling features and perfect messaging features. We must develop a strategy that prioritizes key features rather than all at once. The team discussed which features to cut and came up with a number of priorities. So we have identified research priorities, and with them development priorities. Each small change unlocks the next one, taking us one step closer to the milestone together. We actively focus on problems and focus on the details our users want us to address. This process is difficult and often messy, but with the force of Flutter, we can speed up the task nodes in unexpected ways. At each point, the team is excited.

After achieving the first milestone, there are many milestones to overcome, and Flutter allows us to solve the problem once and move forward. Our product went from a Beta delivered to the CEO to an internal Beta on eBay for thousands of eBay users. A month later, we went into public Beta testing. Finally, we launched the app for iOS and Android at the end of December 2019.

For eBay Motors, every moment counts. The development team builds confidence step by step through these moments. Delivering products to new users, getting feedback, and making corrections and tweaks is “learning by doing.” Delivering small iterations quickly toward goals also helped our product teams succeed. Flutter allows us to continue delivering products quickly, even as the functionality and complexity of our applications continues to increase.

We had no chat and community features at this point due to a significant reduction in app functionality at launch. So in January 2020, the development team set out to build our community from scratch and increased the functionality of the app by 50% within a few months of launch.

The influence of Flutter

When WE first adopted Flutter, we saw it as an engineering tool to share code and save time. But Flutter has helped the team solve many problems we didn’t expect it to solve. In some cases, it even solves problems we didn’t know existed.

We wanted to ensure that the user interface was consistent across platforms: to focus the user experience on the eBay Motors brand rather than on a platform-specific design language. However, the product must preserve the specific behavior of the platform on which it is based, such as the physics of scrolling and navigation mechanisms. Fortunately, Flutter solves these problems right out of the box. This means that designers can save a lot of work because they only need to make a platform-independent design.

In terms of product requirements, we want no differences between platforms. Since each requirement only needs to be implemented once, it takes a lot of the burden off of us. We have fewer meetings and get more done with less.

As the development team learned more about Flutter, we realized that code sharing made a lot of sense. In our code base, we share 98.6% of our code between Android and iOS. Only about 0.5% of the code is platform-specific native code. The rest includes our continuous integration pipeline, automation tools, and developer support.

While you can save a lot of money by sharing code during development, the same can be said for testing. Of all the platforms the development team has used, Flutter is one of the best in testing. Its testing capabilities helped us speed things up and gave us confidence when we launched. We adopted a policy of enforcing 100% code coverage from the beginning, and Flutter made it easy for us to achieve this goal.

As applications move into production, the savings continue. Because we don’t have to deal with iOS or Android errors individually, the supported content is much more predictable. The team can release the new version to the more inclusive Android beta channel and then release the iOS version with confidence. We were able to save a lot of money by building and supporting only one application.

Tips for starting Flutter

If you are new to Flutter, you must get rid of your preconceived notions when solving some of the problems in mobile apps, because the paradigm used by Flutter is very different from that used by traditional iOS and Android. Once you understand how Flutter is built, everything will fall into place. The best way to learn is to spend some time studying the Flutter code library.

One of Flutter’s strengths is that it is open source. You can glean valuable information from looking at how the Flutter team builds each component.

The Flutter community is also very active. If you need a solution that the Flutter framework does not yet provide, then it is likely that someone has already built a package to solve this problem. Your team is encouraged to explore and find the information they need, and you are welcome to contribute your expertise and embrace the open source culture.

The prospect of Flutter

When eBay Motors first started using Flutter, few large companies were publicly using the framework: It was a niche toolkit that seemed to lack real-world testing. Today, the framework has gained momentum and many companies have embraced it. What is exciting about Flutter is that it offers the most modern and outstanding application development experience. And best of all, it’s still evolving and improving.

Dart received a significant investment of resources as Flutter developed. Some essential features such as space security were actively introduced in Swift and Kotlin. We are delighted to see the continued development of Flutter and the improvements that this development has brought to the construction of Flutter applications. As companies of all sizes realize that Flutter can help them develop desktop, Web, and mobile applications based on a single code base, more teams will adopt Flutter.

conclusion

Although all members of the eBay Motors development team had a native iOS or Android development background, after using Flutter, everyone liked it. The developer experience of Flutter is significantly better than in the past: it allows developers to get quick feedback as they code using thermal overloading, and problems can be quickly resolved due to the smooth development process. These are valuable advantages. Over the course of two years of use, surprises abound. We can often hear our colleagues Shouting: “I love Flutter! I’ve just found a new trick!”

For a team of our size, we would not have been able to complete the development of the eBay Motors app without Flutter. It allows us to pool resources in a way that the model of building applications for two platforms separately cannot. Flutter is an accelerator that helps us speed up development.

For more podcasts from Google Play developers, check out the Apps, Games & Insights Podcast collection to see developers from different disciplines explore their experiences in developing and publishing overseas from a variety of perspectives and topics.

What do you think about using Flutter to build applications? Feel free to share your comments in the comments section.