How does iOS/macOS development compare to web development? (career advice)

Hi guys,

I'm not sure if this topic landed in a correct category, or even correct forum. I'm going to try.

I'm a web developer with 15+ years of experience, who also engages in Swift programming from time to time, as a hobby. The thing is, I started to hate my web dev work some time ago and I'd like to explain why.

I used to consider myself a decent web developer. But it all changed when all the new concepts and libraries began to arise. I'm a full stack developer and I think frontend is the bigger issue for me. And my issue is not related to using Vue.js, React etc., but about the surrounding tech. Whenever I need to integrate some 3rd party libraries to my project, I fell literally sick. There's so much learning and trust involved in modern web development that I somehow lost it. And on the backend side, it's mostly the dev ops stuff that I don't enjoy. There is something about how my mind works that makes me an unproductive web developer these days. Whenever I feel like I don't understand how something works, I feel stuck and anxious. But also, some of these tools like Webpack I don't really care how they work, because they are complicated, while being completely abstract and each version changes its behavior. There is simply too much uninteresting information for me to swallow. And I believe that makes me a bad fit for my work. I don't understand how most of my dev friends are able to cope with this complexity - I used to think they know exactly what they are doing. But then, when I get my head around someone else's work, it often turns out it was quite poorly done, for example their server configuration ends up being extremely slow. They tend to say it needs to be that way, which I always believe in the beginning, before actually diving into the subject myself and finding out that it could have been done much better. For me, uncertainty creates a barrier, which doesn't seem to be the case for most. And I'm sorry if it sounds arrogant, that's not my point. It's about my attitude towards work - I believe it should be done well, or if not, one should be conscious what to improve. But it's not what I experience from many colleagues.

That being said, I'm really happy when I work on frontend or backend apps, when I'm focused on the app itself. The thing is, now web development means working maybe 20% on the meaningful part of the app and the rest is satisfying the libraries and tools to glue it all together. I find it ugly, this complexity is beyond my head now.

I think I should change my profession and I was thinking about switching to something more focused, without so much anxiety about choosing the tech stack and gluing things together. I really love how beautiful Swift language is, however I'm not sure how much focused the work is in real life. Could you guys share your feeling, how does iOS/macOS development compare to web development in those areas I mentioned? Does anyone feel remotely similar?

I probably haven't expressed my feelings in a very clear way, which I'm sorry for. That's because I'm confused about what I feel. I just know that web dev is not for me anymore and I need to do something more focused and beautiful.

5 Likes

I definitely understand your pain.

I hate when people opt to use dozens of third party frameworks to achieve something that can be done fairly easily with the built in tools. Or when people make needless abstractions around APIs that are already simple enough to use out of the box.

But at the end of the day, unless you are the one in charge of making architecture decisions at your company, or are building a new app, you are going to see this stuff no matter what type of development you are doing.

While web development is certainly much more "Wild West" in this regard, you will still find plenty of strange open source frameworks that people decide to use rather than using the built in tools provided by apple. But its definitely much better in the apple ecosystem in this regard.

1 Like

I agree with you on the state of web frontend development nowadays. I have managed to avoid most of the big frameworks but still, there's always things you don't want to reinvent but when there's a problem you're left looking into code where nothing makes sense.

I enjoyed using Rails for many years but nowadays I enjoy working on macOS/iOS apps more. You can still run into the odd problems that take more time than they should to figure out, but I feel like I spend much more time enjoying my work with Swift and AppKit/UIKit/SwiftUI, vs spending much more time hating everything about the entire javascript ecosystems when I'm doing web front-end work.

1 Like

In my experience, development on Apple platforms (especially with Swift) does not suffer from the same issues you describe from web development. You can build robust apps using only first party tools like SwiftUI, Foundation, Core Data, etc. Most projects will still adopt external dependencies and many have bespoke architectural patterns that will take some learning. But the overall dependency count is much lower, and you’re never fiddling with bundler settings just to get the project to build

There are, of course, separate issues that you will become frustrated by such as Xcode or framework bugs, long compilation times (for clean builds), incompatibility between Swift compiler versions, etc. But you can generally understand and work around these issues unlike grokking some 20 new dependencies that were added from a single npm install.

For context, I’ve been an iOS dev for 10 years and a React dev for 5. I’ve seen (and created) some horrendous iOS codebases but almost every React codebase feels horrendous to me. I recommend you give it a try :)

4 Likes

Well I am certainly not qualified to answer your questions as I am very new to iOS/Swift but I do agree with your feeling about web dev. In fact I only started working as frontend dev about 3 months ago and so far I can't say I like it given I transited from a backend dev.
What you said about frontend dev is exactly how I feel about it; I wonder whether anyone ever fully understands all the parts in a fair large commercial web projects. Besides the high level problem of various gluing together different parts and a huge number of dependencies, even at the microlevel coding, it seems to be very common to use string literals as the "reference" between each component; I mean in frontend a string "foo" could mean something significant. I always hate this when it happens as it just feels very fragile and unintuitive to me! Also it seems like a norm to hard code strings everywhere in a project. Oh man, I need to start thinking about how to escape too!

A slightly better news is we will start migrating web app to mobile next year hence I am learning Swift/iOS; I just got started and so far it's not bad at all. In fact it's quite similar to a few other things I have done. Swift, as a language, has borrowed a lot of features from other languages (both OO and FP); I have done C# and F# before so it doesn't feel very hard to transit to Swift. SwiftUI is also interesting as it's similar to flutter which I have played with before. The overall the apple ecosystem is not that different to Windows in my opinion (well I am still new so I could be wrong). It certainly feels better than frontend dev to me so far.

Hope you can work something out and find a happy path forward. Keep us posted!

1 Like

@stt106 I feel the same way about many things being too global on the frontend. Entire CSS as a concept, for example. There are preprocessors and compilers to help this issue, but again - it's a dependency.

As for the JavaScript, I like to use Symbol() to avoid this implicit string uniqueness you mentioned.