I've been at Venmo for two years, and for the first 22 months,
at Venmo, I was on the iOS team and
I built a large part of the Apple that exists currently today.
And now I'm on the strategy team,
we're focused on exploring different monetization strategies at Venmo.
The Venmo iOS team decided to rewrite the Venmo app in Swift.
Around the same time as WWGC 2015, Swift 2 was just announced and we were
watching all these videos about all the cool things you can do with Swift.
At the same time, quintessentially, our product design teams were discussing
new UIs and new UXs and in the Venmo app.
Also, at the same time, our existing Objective-C.code base was becoming very
unmaintainable, building new features was taking a long time.
If we ever wanted to do any design changes to the app or different
flows in the app, it would require massive refactors because of the fact
that our UI layers and our model layers are so deeply coupled together.
So, one day after the one of the WWDC sessions,
all of us came back to the San Francisco office and
just started whiteboarding what of Swift version of the Venmo app looked like.
We made an API layer, we made a UI layer and
we just opened up our computers and started building it.
This wasn't like an official project or anything but
we started we kept doing this for about a week and a half and
came up with a bare bones version of the Venmo app.
kind of just like an experiment to see how a Swift only version of Venmo app
feels, and how much faster we think we can iterate on a version like this as
opposed to the current version of the app.
We got to a very good point in those two weeks, and
finally told what we were working on and
how this code base that's going to maintainable for a very long time.
And it's also going to enable us to write features much faster, and because
of all that, they decided to get on board and we started building this app.
Objective-C will stick around for a very, very, very long time.
All of you like it, the foundation and I think all of
Apple's frameworks are actually written in the 100% Objective-C.
I don't think Objective-C is going anywhere for an extremely long time and
I think that having some knowledge about how it works is extremely important.
I do think that as time goes on, more and
more Objective-C developers will be writing Swift more and more often.
A lot of existing companies that
have 100% Objective-C apps will start catching the Swift train and
start building all their new features in Swift, which I highly recommend.
What I don't recommend is just rewriting an app, a perfectly good app and
in Objective-C and Swift because it's going to be a very,
very, very long project with very little gain.
One of the largest challenge of doing a big rewrite is the fact that during that
time of the rewrite, your team can't really build new product features and
if you are building new product features, you have to build it twice.
Once in the existing app, as well as like in the new app.
The nice thing is that when you build it twice, you can actually see how much
faster you're building it in a new app, which is quite delightful and
kind of proves your point to the rest of the team that this is a good decision.
But that was definitely the most difficult part about doing this rewrite,
but when we were being conservative on new features in the app during this time
and the ones that absolutely had to get in, had to be written full times.
We're still working on it today, it's almost done.
The scope of the app is also changed a lot since we first started.
That said, the entire team is working on it.
And whenever some project does come up, like a product feature that needs
to come out, one of us will move off the core app,
rewrite app and start working on that project and then work on it twice.
Once for the old app and once for the new app.
If we were hiring a new developer at Venmo who
primarily will be writing Swift, I think that them having some Objective-C
knowledge coming in to Venmo would be really valuable to us.
It would also differentiate them from other candidates
that might only also know Swift, which is really important.
Though our entire code base will be 100% Swift,
we do have a lot of dependencies that are Objective-C, and
sometimes you do have to go into them and maintain them.
We would want them to know the syntax of Objective-C primarily,
as well as some of the nuances of Objective-C.
For example, Objective-C variables are by default always optional.
That means that opens you up to a lot of errors and runtime bugs which
you don't have in Swift, and so it's important to be even more careful, and
check for nil before you're adding a variable into a dictionary.
A lot of our third party dependencies are still in Objective-C,
some of which we have open source ourselves.
So going back into those dependencies and updating things is important.
Knowing basic Objective-C syntax is very important.
Knowing how to do anullability on it to make sure that your Swift code
plays nice with Objective-C is also very important.