
Ask HN: Is it worth switching from web development to native iOS dev? - supernov_a
hello everyone, hope you are having a good day, my background is CS in university after that worked on some agencies did many things, from back end JAVA EE to android apps, and recently (3 years ago) moved to do React and frontend mainly, I live in Copenhagen and have a decent job and a good pay
my question: is it worth it switching to IOS development and do that mainly for the next few years, my motivation is mainly investing more in the exclusive apple ecosystem, looking to expand my area and work in completely different constraints and runtimes<p>Also if you have a better career idea please suggest it<p>thank you
======
schlu
In my opinion here are the pros:

\- iOS will be around a long time.

\- Big brands and startups are basically required to have an app in the App
Store if they want to succeed.

\- Every year a new version comes out that requires developers to fix bugs and
sometimes adopt new technology.

Here are the cons:

\- Extremely difficult to build an indie business on iOS given that there is a
single distribution channel that you don't control.

\- The learning curve is pretty steep.

Here are some other points:

\- Good iOS developers are harder to find than good web developers (feels true
to me, it might not be).

\- You probably won't be on call as an iOS developer (this is important to me,
it might not to you).

Developers are paid well across the board. I would pick a technology you enjoy
working in and isn't in decline. I believe developers are more likely to
succeed if they chase their interest over their salary.

~~~
onion2k
_Big brands and startups are basically required to have an app in the App
Store if they want to succeed._

I don't think that will continue to be the case for much longer. It's
mirroring the web to an extent - for a long time every business needed to have
a website, and now more and more don't bother with anything more than a
holding page that directs users to a few social media accounts. Brand apps are
likely to go the same way, especially as Apple are doubling down on rejecting
apps that don't provide useful functionality now.

Having an app for your brand is worthwhile if you have something to say and
something for users to do. If you don't it's _painfully_ obvious that the
whole effort was a waste of time.

~~~
zepto
What brand can you name that wouldn’t have something useful you could do with
an app?

~~~
kick
The Hershey Company.

~~~
zepto
[https://www.hersheys.com/en_us/products/hersheys-milk-
chocol...](https://www.hersheys.com/en_us/products/hersheys-milk-chocolate-
emoji-bar.html)

~~~
kick
What's the purpose of linking this? It's chocolate...with an emoji stamped on
it. There's no app.

~~~
zepto
No but it’s obvious there could be.

~~~
kick
Nothing valuable, and especially nothing that _shouldn 't_ be done with a
website.

~~~
zepto
Just because you don’t personally value something doesn’t mean it isn’t
valuable. Anyway, it’s clear that the issue here is that you simply _want_
apps to go away. Not that they are.

------
itake
I'd focus on what platform you like working in.

As a backend dev that has built a few mobile apps in Android and iOS, I hated
wait for code to build and deploy to mobile phones. I hated trying to track
down errors that only happen on certain devices or tweaking the UI for each
phone screen. I hated the annual upgrade monkey dance to support the new
version of iOS or Android.

If you switch languages or platforms, you may take a pay hit while you ramp up
or you might can get lucky and find a company that will pay full price you to
learn the tooling.

Typically, there will be an opportunity cost of learning swift instead of
getting paid to do what you know. If it takes 200 hours of learning and you
earn $50/hr, that will set you back $10k in lost time.

Don't change because of money. Change because you're bored of react.

~~~
avgDev
I developed Android/iOS apps also, and now I'm full stack .Net/C# dev. The
amount of jobs out there is insane, many enterprise jobs, where you build apps
to support the business. Super laid back, good work/life balance and decent
pay. I can't imagine myself going back to mobile dev.

------
dfansteel
I've been an iOS dev for... 12 years now. And I love it. I'm in a position now
where I'm learning Android for the first time. It's Kotlin and I don't hate
it. And I'm still trying to learn back end. I can't code my way out of a box
using HTML. I guess you'd say I can't code my way out of a <div>

The ecosystem is amazing. I love the tools. Xcode is a joy of an IDE to work
with. There's some room to improve, but compared to everything else... it's
not even a question. The community is full of people who are full of wonder
and excitement.

As a web dev, you probably already know some Ruby and have some familiarity
with some build tools that I didn't when I came to iOS dev. That'll help. You
won't be exclusive to Apple. You'll be using CocoaPods and Gradle and Bazel
and Jenkins and Travis and god only knows what else. On any given day I code
in Swift, Objective-C, Ruby, Kotlin, and Groovy.

At the end of the day, remember you'll be doing this 40 to 80 hours a week.
Make sure you enjoy it.

~~~
gregkerzhner
Curious how you have handled some of these challenges:

1\. What do you do to avoid massive view controllers? I have found that a lot
of iOS apps I have worked on end up having the view controller be responsible
for doing everything from fetching data from an API to setting the corner
radius on some component. This leads to view controllers being really big and
not unit tested.

2\. Do you do anything to explicitly keep your application state in one place?
I find that state in iOS apps ends up being scattered between a data store,
singletons and view controllers. This is a lot more cumberesome than something
like Redux where state is just in a single store.

3\. I am pretty excited about SwiftUI as it addresses a lot of these pain
points and brings iOS development into a more modern era similar to React.
What is your opinion of SwiftUI? Are you using it on your apps? If so, what
have been the challenges of introducing it into existing apps? If not, why
not?

~~~
dfansteel
1\. Don't have massive VCs by not having massive VCs. That sounds unhelpful,
but hear me out... You're asking the VC to do too much. Break that sucker
down. Have many, many small classes that do small things. Use libraries for
stuff. A VC should be a hub to transit data from the user to a model us MVVC,
MVP, MVC... I don't care, every architecture has their acolyte.

2\. No. Again not helpful. This is a domain specific problem. I will say I'm
waging a now multi-decade war against singletons. Dependency injection is the
way to go. For Swift checkout Swinject, it really superpowers your testing.

3\. Haven't touched it... yet. My primary projects need to ship and my
secondary projects haven't hit the point of UI. Won't until later this year.
Then I'll deal with SwiftUI. Combine, however, is my new _hawtness_ and I
recommend diving into.

------
z0mbie42
The only things I would consider: what do you love to build?

After a lot of web and APIs dev (NodeJS, Go, Rust, VueJS) I'm now building the
native apps of my project ([https://bloom.sh](https://bloom.sh)).

I find mobile development (especially iOS) very frustrating, the ecosystems
are really closed and platforms are not focused on empowering developers but
growing their profits and closing more and more their walled garden.

The only 2 reasons I've not abandoned mobile development are:

1) Flutter, a fresh air in UI development, whether it be the simplicity, the
tools or the ecosystem.

2) the possibility to build offline first apps.

~~~
collyw
Build?

Most jobs out there are fixing other people shitty code. If the company is
mature enough to be making a lot of money, the chances are the code has lots
of crap in it.

------
mamcx
"switching" give the impression of let go the web. I say "adding".

I work freelance for more than 20+years and have done almost all: Windows
Apps, Web Apps, Mobile (iOS, Android), Cloud, nosql, sql, utilities, etc.

Adding an extra to what you have make you stronger. Is a big plus for me to
say "I know this and that and that...".

Of course, I have my preferences and strengths, but I can fit in almost any
project.

~~~
noodle
Agreed. It's good to have the skillset required to develop a mobile app in its
entirety, including the API layer if one is necessary.

------
deminature
I made exactly this transition and don't regret it. Having a native debugger
is hugely luxurious, and the Apple developer ecosystem is for the most part,
an extremely nice walled garden. The platform is progressive and quick to
deprecate legacy features, which keeps things interesting.

In my anecdotal experience however, frontend (React) and backend (Go, Java)
devs are in much greater demand broadly across the market, rather than mobile
devs.

------
richardthered
In general, I think that having knowledge of multiple different tech stacks is
good. The IT industry is constantly changing and evolving, and learning to
evolve and change is good.

Also, you might want to take a look at Flutter. It's a new(ish) cross-platform
mobile development framework from Google. It seems to be getting some
traction, and allows you to write truly cross-platform mobile apps. There are
other cross-platform mobile frameworks (React Native, ...), but Flutter seems
to be gaining momentum.

Anyhow, if you are interested in mobile development, give it a try! It's not
you are locked into your choice for life...

------
gargs
My advice would be to focus on iOS as a platform, and not as a matter of React
vs native vs Swift vs Java. In the end, you could write an equally amazing (or
distasteful) app using React as you could using Swift. Where most developers
fall short is understanding the capabilities and constraints of iOS; they aim
for the greatest common divisor when it comes to functionality.

While a more senior developer could mentor you, once you understand the
platform inside-out, you become more of an authority, and that opens you up to
amazing possibilities irrespective of what language or framework you're using.

------
ryanwaggoner
Yes. I switched in 2010 and haven’t regretted it once. More fun, much less
framework churn than frontend, and better pay. And if it crashes for some
reason, you can switch to something else.

And learn native Swift, not React Native or Flutter or some other fad hybrid
approach. It’ll be worth it in the long run.

~~~
Hamuko
> _And learn native Swift, not React Native or Flutter or some other fad
> hybrid approach. It’ll be worth it in the long run._

How? Feels to me like I keep seeing recruitment for cross-platform devs more
than native devs. And a lot of companies seem interested in pumping out cross-
platform apps from a single codebase than developing separate native apps.

~~~
aphextron
>And a lot of companies seem interested in pumping out cross-platform apps
from a single codebase than developing separate native apps.

There will always be a need for expert native devs who can build high
performance apps. There are things you simply cannot do with crossplatform
apps, specifically things like low level OpenGL code and edge ML. Yes there
are less of these jobs, but they tend to pay much better and are in heavy
demand.

~~~
andrewrothman
Both OpenGL shader code and on-device ML can be done in React Native. However,
you likely won't reach full native performance today.

[https://www.youtube.com/watch?v=1HYnrdKEVMU](https://www.youtube.com/watch?v=1HYnrdKEVMU)
[https://www.youtube.com/watch?v=LbcuLfrt8XA](https://www.youtube.com/watch?v=LbcuLfrt8XA)
[https://heartbeat.fritz.ai/image-classification-on-react-
nat...](https://heartbeat.fritz.ai/image-classification-on-react-native-with-
tensorflow-js-and-mobilenet-48a39185717c)

You're right there will always be a very high demand for native engineers to
build the underlying bridge code to back these capabilities. As cross-platform
tools gain new bridged capabilities and become faster
([https://engineering.fb.com/android/hermes/](https://engineering.fb.com/android/hermes/)),
as they have been slowly, I think the use-cases where using something like
React Native or Flutter is possible and makes sense will grow.

------
ratsimihah
I did the opposite. Started as native iOS dev for 3 years, then picked up
React as a hobby, then started a new job with React-Native, and now I do full-
stack. I've also done a lot of back-end both as a hobby and at work.

As others said, play with different tools and do what you enjoy!

------
brudgers
This question echos fifteen years ago. Swap "iOS" for "Flash." People might
have said, "Adobe isn't going out of business any time soon." And those people
would have been right. Web development on the other hand is as much "a thing"
today as it was back then.

Can you make money as an iOS developer? Sure. But the unit economics are not
great. iOS apps are usually free. Paid apps usually $0.99. $1.99 is an
expensive app. That's retail before Apple takes its cut. On the
consulting/contractor/freelancer side, it's probably harder to find iOS
clients than web clients. iOS is after the gold rush. Any stable company with
deep pockets that wants an iOS app probably already has one.

~~~
askafriend
You can't swap iOS for Flash.

iOS/Android is more similar to the introduction of the Web Browser. It's an
entire platform shift that fundamentally changes how people interact with
computing, period.

------
pvinis
If you only care about the iOS ecosystem, then sure. Swift is great, a lot of
great support from Xcode and a bunch of tools around it.

I did the opposite. I moved from native iOS to React Native for iOS only to
React Native for iOS and Android.

It is definitely more complicated to do React Native for now, if you need to
do anything that touched the native frameworks/hardware, so it definitely
helps to have the native experience.

Finally, I would say that if you are into learning more iOS and getting the
native feel, go for it, it will be a fun trip. And after a year or two, you
can decide if you want to keep going with it, switch back to something else,
or go with React Native (or anything else, I just have more experience with it
to talk about it).

~~~
rhodysurf
I have done the same switch recently and I react native has been a lot of fun
to learn. Especially knowing native iOS and android it makes rn sooo powerful
cuz you can expose whatever you want.

------
tjpnz
The mobile "web" is embracing native apps in a big way. It's difficult to go
anywhere now without being pestered into installing an app - even if the site
already has a perfectly usable mobile version. Worse still, some sites refuse
to work at all or are severely limited. I don't particularly like the
direction things are going in (despite having very few nice things to say
about "modern" web frontend) but if I was in your situation I could certainly
see myself going with iOS (or Android) from a salary perspective. Not sure how
things are in Europe but I've noticed a lot of tech startups where I am in
Tokyo skipping the web entirely in favour of apps.

------
vlozko
Some people are generally good at doing software development and they choose
the platform based on how well it pays. iOS is certainly way up there both in
terms of demand and pay. If that's what matters to you, switching should give
you a bump in pay.

------
Eric_WVGG
My perspective on this has evolved quite recently.

I’ve been doing Angular and React apps on the web professionally for six or
seven years now, and a few native iOS apps on the side for fun.

Last summer I got a gig doing a React Native app. “No problem; I know React, I
know native. Let’s go.”

I kind of hated it. Everything I was doing in React, though familiar and
second nature, seemed so DUMB because I knew that Cocoa Touch had better,
faster, simpler solutions.

I came out of the experience with the feeling that web apps are profoundly
misguided; that we ought to be going back to static sites for the web, and
_real_ native for functionality.

I guess my answer is “yes, absolutely, and maybe you should consider ditching
web apps altogether.”

------
francislata
My situation is a bit different: switching from iOS to ML. One thing I could
say is that iOS development is a fun experience. I did it for the past 5-6
years of my career and was self-taught. I learned both Objective-C and Swift
during my time in that world. Doing iOS development has taught me a lot UI/UX,
amongst other things.

Recently, I switch to a role in ML and its been a change in my workflow so far
- which is something I expected, but fun nonetheless. I don't get to do UI/UX
in the visual sense but now I have to care about design of ML models and
deployment so that other front-end clients can use them.

I would say give iOS development a go ahead because you want to!

~~~
jon889
How did you find changing from one field to another. I've been doing iOS for
about 3 years and I'm started to feel like I might be trapped doing iOS
forever. I mean I can't imagine a company wanting to hire me in something else
given all my workplace experience is iOS.

~~~
kyleashipley
Not the parent, but as a hiring manager I would guess that you can implement
UIs, make API calls, manage client-side data, work with a type system, etc.
Those seem like pretty useful skills in modern client-side web development.

If you would want to make a move to backend/full-stack, you might need to pick
up skills like databases, queues, caching, building APIs, and DevOps. But good
companies are willing to bet that you can pick up new skills on the job if you
have some sort of foundation.

------
rickspencer3
In my experience, you will excel the most at what you enjoy the most. I would
try iOS and see if it something that would excited to work on most days. I
doubt good web developers or good mobile developers will be going hungry in
the next couple of years.

Have you considered Flutter, at all for native mobile development? Not sure
there is any demand for Flutter developers, per se, but since you are looking
at mobile development anyway, might be worth a look.

------
danpeterjk
For web:

It's easier to test UI You can choose the language of your preference Easier
to be cross-platform For native:

No browser bugs to worry about Easier to just get started (fewer dependencies)
Less worry about supporting outdated OSes I have visited INORU
[https://www.inoru.com/ios-app-development](https://www.inoru.com/ios-app-
development) for better iOS development

------
jamil7
Early last year I made the exact switch you are considering. As another
commenter pointed out, since I work as a freelancer it was more a matter of
"adding" a skill rather than "switching" I was able to gradually transition to
doing native iOS.

Swift itself has made me feel a lot of enjoyment and productivity as a solo
developer, I feel I'm able to produce a higher quality of software faster with
far less npm noise and "busy work". There is a lot more work in React right
now but with that comes a lot more competition and a lot of not very
interesting jobs doing repetitive CRUD work. The community is much smaller but
very friendly and welcoming to newcomers and beginners. With CoreML, ARKit,
SwiftUI and Catalyst it's quite a fun time to be working in Apple's walled
garden.

Keep in mind there is a considerable upfront time investment in doing this,
there is a lot to learn. Swift itself should come fairly naturally as it's
designed in a way that you can get by with a small subset of it and gradually
add more. Learning the platform and it's APIs however takes some time.

------
tracker1
Like most things, it depends... If you don't hate React, you may want to look
into React Native, or Flutter so that you have a decent path to cross platform
support. There's also Cordova/PhoneGap if you wanted to dip your toes more
slowly.

If you're going all in, you'll probably be okay, but I'm nut sure how broad
the audience will be longer term. It feels like the focus is going towards
cross-platform (at least iOS + Android) as much as possible. There will always
be a need for some custom glue to each respective platform even then though.

iOS isn't going anywhere, but Android is also here to stay, and a huge market
share to ignore. Few businesses will fund two separate applications with
distinct code bases if they can target both relatively well with a single code
base. That's just my $.02

------
helsinkiandrew
I'd suggest investing in a few months of iOS dev in your spare time to get a
feel if you like it before making any commitments.

Understanding the tools and basic architectures and APIs will be useful on
your CV.

Doing some React Native might be the way in for you.

------
codingbbq
I too am a web developer and have constantly been fascinated by new
technologies. I had looked at android development but could not get a hang of
Java. Recently flutter has been in the wild and so I choose to get my hands
dirty by doing flutter challenges. I loved the process and the ease of working
with flutter so I ensure that I spend at least 1 hour everyday developing in
flutter. I look forward to getting off from work so I can switch on my home
laptop and do some flutter. P.S : I will continue being a web developer.

------
jitendrac
I suggest to take as a hobby and learn more about how mobile os works, Also
try android dev. All this task will lead you to better understanding of full
stack development. Pick a tech of your choice in Full stack development and
revisit skillset every few years. Pro Tip- If you have decent job, do not ruin
it for small temptation. First jump into it prove yourself and if possible
just find that work in your existing company.

------
RantyDave
Oooh, interesting. So, people who know: I get the impression that we're moving
to a "business that has an app front end" model rather than the app itself
being the business. So isn't it "better" to use a cross platform toolkit?

------
sub7
I would cut off my left nut before building anything that depends primarily on
either iOS or Android. It's lose-lose - if you get successful, they'll copy
you and fuck you over.

Obvious exceptions apply e.g. if you just build a widget as a lifestyle
business.

------
gregkerzhner
If you have front-end development, the much better move in my opinion would be
to master modern back-end development in ruby / elixir / go / etc... and
become a true full stack developer. I made the move to iOS 5 years ago and
regret it for a few reasons.

1\. I became "stuck" doing iOS development. I recently had to switch jobs, and
even though I have some server and web experience, it was more scattered and
dated than my iOS experience. I was looking for senior software engineer
positions and with my track record of iOS development, the only positions that
gave me an interview were the iOS ones of which there were a lot less. If I
had a history of server work, I have a feeling I would have gotten a lot more
interviews even for jobs that didn't use the specific stack my experience was
in. At this point, if I want to get back into full stack dev, I would either
have to convince my current job to switch teams, or take a cut in seniority
and pay.

2\. iOS development is behind on modern UI dev concepts. Developing for iOS
feels like going back to jQuery or Backbone.js from React. Things like a
declarative user interface, automatic DOM re-rendering and UI Bindings are in
their infant state in iOS, while they have been core concepts of web
frameworks for a decade. As a result, a lot of iOS code out there is very
messy. While the web moved towards light user interface components and
centralizing business logic in the Redux state, iOS stayed with the MVC
pattern which in practice often results in giant, untested view controller
files very reminiscent of the big jQuery script files of the early 2000s. You
can try to fight this by adding your own architecture and external libraries,
but such approaches will always be second class citizens, not the default.

(SwiftUI is going to address some of these issues. However, its a newer
technology and most existing iOS apps will be slow to adapt to it)

3\. It will be harder to pass a FAANG interview. One of the crucial interviews
is the "system design" interview which is almost always server related. As
opposed to the algorithm questions which are easy to study for from a book,
the only good way to answer these system design questions well is by having
experience in designing and building such systems. If you stay on the client
side doing iOS or front end, you won't be able to answer such a question
effectively.

The reason I moved to iOS from front end was because I wanted to get outside
of the browser to a more full feature platform. In retrospect though, the
obvious platform to transition to is not iOS or mobile dev, its the server.
The server is a full feature platform which gives you the ultimate freedom to
do whatever you want. And while frameworks like Ruby on Rails or React come
and go, I found that job openings were pretty indifferent between the specific
framework you worked on as long as you have server experience in general.

------
nyxtom
React Native and then you don't have to :D

------
swiley
The only thing native really gives you is notifications and performance (and
better sensor access) at the cost of high coupling and having to use a
specific OS for development.

Church-Turing yadda yadda

------
dzonga
nope. iOS market reach is limited, as you're likely to reach more potential
customers via web. Yeah the mobile ecosystem is trendy, but looking at numbers
the apps that make money are games. which you can make via some platform
agnostic engine such as Unreal | Unity etc.

------
inviromentalist
Very risky to be a developer for a walked garden.

If Apple does Apple things, they might make it harder and more expensive to
develop. You might be a great programmer, but your company may not want to
build native iOS apps.

