Ask HN: Making a mobile app as a back-end developer?

124 points by dogukanzengin ↗ HN
My main area of expertise has been backend java development for years. I have a few mobile app ideas I have been designing the backend for a while. But since I have no frontend experience, I don't know how to proceed. Should I start learning, which will take large amount of time since there are plenty of platforms you need to publish, or should I outsource it somehow ? If outsourcing is the right answer, where to find people I can work with ? Please forgive my English.

109 comments

[ 4.4 ms ] story [ 181 ms ] thread
I worked on an app as a backend developer with an intermediate understanding of JavaScript/html. I was able to use Cordova to build out a functional prototype. After that we were able to engage with a contracting firm and point to the prototype as the requirements. This let them quote a firm fixed price, which we of course enjoyed. Sorry, not sure how the contractor was found.

Depending on the functionality needed for your app idea (and your skills), this might be a good path.

This was in the early 2010s.

Thanks for pointing out Cordova. Just took a quick look at it, this can be a very good starting point, appreciate.
There is a competitive framework, named capacitor, which is developed by the ionic team. Together with ionic, capacitor is very easy to get things done fast...
Just start the thing you want to make. Figure things out as you go. You'll make mistakes. So what?
I'm also a backend dev and have made some web frontend let projects. For mobile, I find Flutter/Dart the easiest to work with. Feels somewhere in-between TypeScript/js and Java. What's much more of a challenge is how to make it look great and easy to use.
Check out Flutter/Dart. Lets you target both Android and iOS with one codebase.
Plus one for flutter. There are a couple of ways to make windows/linux/macos apps as well.

The way to design widgets is pretty horrible but you get used to it.

I think it's also easier for any developer who is looking to start front end development.
I work as a back-end developer, I've built several apps using react native & expo and the experience was pretty good, I'm really happy with the results
I was in the same situation, got myself a macbook, learned ios development over a weekend and just learned as i went along with trying to develop the app. I think the important thing is just to get started on something instead of thinking too big.
It depends what you want to make and on what platform. I recently spent a year or so learning Swift and I absolutely love it as a language.

My general advice is to pick a project that seems achievable fairly quickly and do your learning while trying to make that real. It’s much more motivating than learning for learning’s sake and only then actually making something.

You either learn it yourself, or pay someone else. If you have more time than money, then you learn it yourself. And vice versa, of course. It's really quite simple.

If you want to learn and start with iOS, I'd advise doing the 100 Days of SwiftUI: https://www.hackingwithswift.com/100/swiftui

The great thing about this course is that you can do it alongside your work, because it's divided in chunks of 1 hour. My experience is that you can do it in the evening, even after a full day of work.

I've been diving into SwiftUI recently and it's pretty satisfying (although I used to do iOS development full-time back when it was all Objective-C, I've been mostly in C#/.NET/Angular land for the past 6 years).

The framework is well designed and makes setting up the UI for native apps pretty easy with a lot less coding than I'm used to for other frameworks. I'd recommend looking into it if you don't care about cross platform (and I wouldn't personally care about that right away if you're getting your feet wet with mobile).

Swift is also a fun language to program in once you get the hang of it (and yet it's not too different from other languages, so it shouldn't be too hard to pick up coming from Java).

Although with previous Java experience Android might be easier for you to get into.

Anyone knows if there is there something like that for android or for any other cross-platform tools (Xamarin, Flutter, etc)?
Start learning. It has never been this easy to learn and build an App. I would certainly recommend Flutter/Dart rather than any JS framework. Since you mentioned Java, I personally think you will find working with Dart comfortable. Flutter is cross platform and now you can also build Web apps, though it is in beta. Flutter makes it easy for developers to play with the design aspect of application development so it will be a great way to get insight and learn a few things. It will be always challenging to outsource if you are not sure about the capabilities or reliability of developer or team you want to work with.
I agree with starting to learn. But whether or not Flutter is the right choice may depend the app.

Flutter allegedly consumes about twice as much memory as a native app. So I guess it matters who the target audience is and what kind of device specification can be expected.

Disclaimer: I have never written a Flutter app and I'm not sure if the information I have found is still up-to-date.

Can you give any sources for twice as much memory argument of flutter compared to native? What do you mean with memory exactly, is resulting binary twice as big or does the flutter app neads twice as much main memory?
I was looking for some benchmarks two weeks ago because I find Flutter interesting, and I found two benchmarks showing twice as much RAM usage at runtime (not the app binary) for some simple demo app. I no longer have the link, but I can try to find it.

Edit: What I have also found is that there are plans (or ongoing work) to port Flutter to Apple's Metal framework, which should cut memory usage by a lot on iOS.

Edit 2: Here's one of the benchmarks: https://thoughtbot.com/blog/examining-performance-difference...

Hey cool thank you! This is an interessting question how different cross platform approaches compare in terms of performance.
>> Flutter allegedly consumes about twice as much memory as a native app.

Would be interesting to benchmark Flutter's memory use vs. the app that was never built because of the lack of time, steep learning curve, boredom, etc, to deliver both iOS and Android natively.

I have never explored Flutter.

Coming from a web background, React Native made the most sense for me. Since I started using it a year ago, I absolutely love it. Great community with constant updates from Facebook, tons of articles/blogs/courses on how to learn it and there hasn't been a single feature Ive wanted to build but couldn't due to some lib restriction

I'm a backend/web dev and recently built an app with flutter over RN. The reason I picked flutter was more about the component/widgets... flutter has them built in. This allows me to just focus on building features over trying to figure out which things to use with RN.
What kind of components/widgets are you referring to? RN has a lot built in and then there are a good number maintained by the community. As far as custom UI components I know some people use libs like NativeBase but I handroll my own
Dart feels like one of those google things kind of like chromium where the first step in setting up for building it requires (more or less) becoming a google employee.
I personally downvoted you because this comment just is not helpful.

You don't need to ever 'build' Dart unless you're going to be working on the language itself... and if you are, you might as well be a google employee and get paid for it.

Setup for Flutter development is just a few easy steps.

As always: quoting my comment[0] about flutter:

> We really should be trying to use the native GUI toolkit (or cross-platform native UI libraries like libui), not using Flutter-esque libraries that draws everything from scratch. Coherent UI is a very important point to users IMO. Users can assume that some special feature from App X will also work on App Y. For example, in macOS Cocoa, textboxes have universal readline-esque keybindings (and is configurable globally) which, as an Emacs user, very, very useful. Most Mac apps use Cocoa as the GUI toolkit, so basically all kinds of apps can benefit these keybindings. Another example of this directly benefiting users is the addition of tabs in macOS Sierra. macOS Sierra added tabs to Cocoa apps, and applications could get the feature without additional modification. I can use tabs in any application, with the same look-and-feel, in all apps. Stories like these are mostly only macOS; since Windows apps usually just re-invent all kinds of UI elements, while Linux's GUI toolkits are super-fragmented. (GTK vs Qt is one thing, and there are lots of other options!) Adding Flutter or any other UI library that draws everything from scratch is a bad idea.

[0] https://news.ycombinator.com/item?id=20612195

If you want to make a product, use what ever tool is most productive for you.

Unless you're writing an IDE, you're not going to lose users (you care about) over not supporting Emacs bindings.

People will put up with a lot of garbage if your product fills a need. And non-native UI is not even inherently garbage, just sub-optimal (and even that depends on the product)

Well, just Emacs bindings are not the point; it’s that non-native widgets don’t respect the user’s intent of customizing the whole OS. Let’s take another example: macOS supports Dark Mode from Mojave... and Electron apps usually don’t implement them, or if they do: with a separate toggle.

Yeah, these aren’t great deals, but people who care enough try to switch to alternatives. And by using native UIs, you can mitigate your concerns about whether you implemented everything the user expects or not.

A mobile example : I know a company that decided to scrape their crossplatform codebase (I can't remember if it was flutter, RN, or whatever else).

They had the opportunity to be promoted as app of the day by Apple, which would have been awesome for them.

Unfortunately the condition was to ship an apple watch integration. The sdk they were using did not support it.

The most popular apps in the world -- Facebook, Instagram, Twitter, Uber, Line, Airbnb, Snapchat, many many more -- all use completely custom UIs focused on consistentcy across platforms, which they accomplish by purposely not following any individual platform's specs or using platform widgets.
They also have dozens of developers working on their apps.
And the OP doesn't, which is why a cross-platform toolset like flutter is a great option in his case.
Yeah, and they are successful (mostly due to networking effects — all of the apps you’re mentioning have strong network effects) in spite of their app quality.

The Facebook app is criticized everywhere, I can’t think of anyone who likes their app.

AFAIK AirBnB once used RN but moved to native development, and Twitter use native widgets.

Also, don’t forget that they have the resources to develop all of the expected features of native widgets, for example Accessibility. The OP probably doesn’t.

And, this is all talking about RN which is actually half native since they use native widgets; Flutter is much worse than this because they draw their own widgets.

>> don’t forget that they have the resources to develop all of the expected features

You're talking out of both sides. The OP is obviously limited on resources. That's the exact reason flutter is a good option, he gets an app that works on iOS and Android in one codebase using a modern language. Going native requires 2 distinct code bases, which itself requires learning all the specific quirks and features of each platform. Android adapters and fragments, XML layout, distinct libraries for simple Http calls, object serializers, etc, etc. The only downside you can point to is "its not native" and guess what, see above, users don't really care.

> Yeah, and they are successful (mostly due to networking effects — all of the apps you’re mentioning have strong network effects) in spite of their app quality.

That seems to live up with what was said further up the thread:

> People will put up with a lot of garbage if your product fills a need. And non-native UI is not even inherently garbage, just sub-optimal (and even that depends on the product)

> If you want to make a product, use what ever tool is most productive for you.

If you’re making a product that other people use, I would caution you against putting their needs on the back burner. It’s very often the case that what’s easier for the developer ends up making a worse product for the people that have to use it.

> Unless you're writing an IDE, you're not going to lose users (you care about) over not supporting Emacs bindings.

No, the whole point of this feature is that it works outside of an IDE. I don’t even use Emacs and these shortcuts are so ingrained in me that I ended up setting up custom shortcuts to emulate this in the places that wouldn’t support it (where possible, of course…).

I don't see how a comment calling out the fact the most important thing your product should do is "fill a need" is claiming you should put their needs on the back burner.

Unless you mean some of their needs.

In which case yes, that's my point. If you want a successful product, prioritizing features is very important, and in most contexts, filling your "core need" is going to add a lot more value than a native UI does.

>I don’t even use Emacs and these shortcuts are so ingrained in me that I ended up setting up custom shortcuts to emulate this in the places that wouldn’t support it (where possible, of course…).

Unless your tool is for a space where a lot of users are going to say stuff like this is a major detractor for your new product (...like an IDE or other developer tool) you're much better off just making your product and validating it.

-

When you're making a new product, and bootstrapping it like OP describes, your currency is time.

Time isn't just money, it's a changing market, it's your own motivation coming and going, your overall situation can change and make working on it untenable.

The less time you spend fighting a lack of knowledge the better.

A working MVP in Xamarin.Forms in a few weeks > months spent killing the moment for your idea and learning enough iOS and Android to have the base knowledge for a middle of the road native app, is true much more often than people like to admit.

You just have to know that all cross platform toolkits come with lots of drawbacks.

Maybe you can live with them, maybe not, it depends a lot on the usecase.

As someone in a similar position as the OP, I definitely recommend Flutter. I'm working on a new hardware startup, and my team has strong backed and infra experience.

That jives well with our product, but we do also need a mobile app to interface with the product. Flutter has been great in this regard. Dart and the declarative UX framework are very grokkable for backend folks.

The UI/UX is definitely good enough. Our app feels native, is snappy enough to get the job done, and looks way better than the native Android app we were trying to build before. Even if we were to have to go fully native down the road, Flutter is just the right tool for the job of getting us off the ground.

For a small team, there's just no way we could build both an iOS and Android app separately, on top of hardware, firmware, and a backend. It would kill us before we ever even launched.

> The UI/UX is definitely good enough. Our app feels native, is snappy enough to get the job done

n.b. to you.

Sure, but they are correct and you're focused on the premature optimization.

I've also built a small flutter app where everything runs snappy and it more than solved the needs with a minimal development time and number of lines of code.

If you’re happy and your users are happy with Flutter, go right ahead with it. But please don’t be the all-too-common startup that writes blog posts about their “coding velocity” with Flutter (of course, they can’t afford to hire talent for anything else) while they keep their fingers in their ears as users scream about usability or missing platform functionality.
My users have no idea it is flutter, that is the best part.
Then you’re probably fine :) Do make sure to keep your eye on this, though, just like you might be a bit more regular when checking the performance of a Python application.
Flutter is declarative. UI is rendered each time completely. Will it not consume more power? In an increasingly warming world, is it a wise choice to use Flutter?
If you want to test your ideas, better outsource the front end dev (upwork.com would be an easy place to find talent that suits your budget) and have your ideas built asap to see if they get any traction, if not you can kill them quickly and move on to your next set of ideas.

If the goal is to build a project as a hobby and (maybe) make money from it, best to learn any of the cross platform tools for mobile apps, here are some popular ones: https://hackernoon.com/9-popular-cross-platform-tools-for-ap...

Best of luck!

Don't be afraid to target the web for your front-end. Progressive Web Apps can be put on app stores and installed on phones without an app store technically. I too have been mostly a back-end guy, but since I am a younger developer I got pulled into front-end work in the middle of my back-end marathon and have done both since, I don't usually do Full Stack though, I try to focus on one at a time where possible.
If you know Java already, you should feel pretty at home with the basics of Android development. UI is tricky, but you can just smash some stuff together in the UI builder to get started. When you have a bit of experience, you can more easily judge the relevance and accuracy of the massive amount of internet sources and your potential outsourcing partners.
I took the same journey you are undertaking. It's quite doable. You'll need a macbook to make a native iphone app. You'll need to sign up for Apple Developer which costs $100 a year. You could go the web route, but you then you won't really be learning native development for iOS and Android. Java for Android and Swift for iOS are the way to go in my opinion. If you can afford (or already have) a MacBook, like others have said, there is no reason not to dive right in and start working. When I started I licensed AppCode from JetBrains because I was used to IntelliJ. Eventually though I switched to XCode like everyone else. One thing though, make sure your Mac has at least 256GB of RAM not just 128GB because XCode and all the updates will fill that up very quickly.
> One thing though, make sure your Mac has at least 256GB of RAM not just 128GB because XCode and all the updates will fill that up very quickly.

Surely you mean disk space, not RAM?

> One thing though, make sure your Mac has at least 256GB of RAM not just 128GB because XCode and all the updates will fill that up very quickly.

I'm sure you meant disk space instead of RAM perhaps? I think it would be overkill to obtain a Mac with 256 GB or 1 TB of RAM just to create iOS Apps. ;)

> Java for Android

Even though OP said they are a Java developer, I would strongly urge going with Kotlin for Android at this point. Kotlin replaced Java as the default language for native Android development in 2017, and new code samples are being written in Kotlin. At the very least, start with Java, and ease your way into Kotlin, since it's 100% interoperable with Java. Aside from being the default Android langauge, Kotlin has many other benefits.

Also, Kotlin on the server is better than ever and would likely boost OP's productivity as well.
Note that mac minis are viable options if you don't want to shell out the $$$ for a macbook.
I second this, the latest mac minis are little beasts.
And their resale value is truly magnificent.
On the other hand, you (OP) should develop an app that's best for you. So if you're using an Android device, I might recommend skipping iPhone development.

Benefit is that you can develop on Windows, Mac, or Linux, won't have to buy an iDevice or two, or a new machine.

> You'll need to sign up for Apple Developer which costs $100 a year.

Only once you’d like to publish your app on the App Store.

> You'll need a macbook to make a native iphone app

I did not realize this. Sad :(

Just go ahead and start building. You didn't mention a mobile OS, but if you know Java well, it should be straightforward to pick up Android development, which is already in Java. IMO, don't bother with any other languages, unless you really want to build the iOS version first. Just throw something together for the UI to get started and get the core functionality working. Then, if it feels too ugly, try working on that some.

You could maybe hire a contractor or something to help make the UI better if needed. Personally, I wouldn't bother unless your app is published and bringing in money, and you can make a business case that spending $X on making it better will bring $Y more revenue. That would give you an idea of what's a good amount to spend. I wouldn't worry about any of that yet though.

Java to Swift is also very straightforward. Most of the learning is with OS’ API. It’s nothing a competent software person can’t handle.
And also nothing a competent software person should waste their time on.
As a native iOS developer I will gladly help you answer some of these questions if you want to provide more specifics on what you're looking to do. Could you reply with your email, or put it in your HN profile? Or just elaborate here?

On mobile we work with pretty high-level abstractions, so if you did this yourself, most of the new stuff to you would be the frameworks like UIKit or Core Data (at least on iOS).

Edit: Ray Wenderlich and objc.io are my go-to learning resources for iOS stuff

People suggest Ray Wenderlich often, and he seems great, but it's mostly videos which I personally cannot learn from.

He has books, but they cost a fair bit (around $100/book iirc), and they're not included in the subscription I think, unless I'm missing something.

React Native is a good place to start. Not only would you be able to put together mobile apps, but the knowledge would be applicable to building web pages as well.
Xamarin. C# is close enough to Java that you won't need to re-learn anything. Perfect for back-end devs trying to do Mobile and very friendly development environment.
I'd second this suggestion. If you aren't already conversant in the complexities of modern JS, trying to do a web-dev-centric mobile app is going to have you beating your head against the wall and cursing a lot.
I'd actually suggest Flutter for the same reason. As a fresh entrant to mobile dev, I found Xamarin apps to be peculiarly unstable, often crashing for no apparent reason.

On the plus side, though, tooling for Xamarin is a lot nicer. VS is definitely a first-class citizen, and being able to launch on a remote iOS device/simulator from inside VS is a definite advantage.

As an ios developer, i wouldn’t recommend someone to go into swiftUI, but rather directly go straight to cross platform techs. SwiftUI is still a niche, even amongst iOS devs.. the documentation is still lacking and the knowledge won’t be useful to anything else ( not to mention the fact that it’s transforming swift into a frankenstein language)

React native or flutter seems more long term ( although i must say i find them also problematic in some regards ).

Knowing the OP works with java, i would also recommend another option going with kotlin and do android only, as it i by far the largest market, and you will have a far lesser risk to get banned from the store for dubious reasons.

Edit : reading other comments i realize the cordova / ionic option also makes perfect sense on today’s hardware. Just make sure you understand the limitations and try a few apps made with that tech from the store first.

> going with kotlin and do android only, as it i by far the largest market

From what I read here and there, that's a half-baked myth in a number of ways. Android users often lag behind the latest Android version, lacking access to the latest features. In terms of revenue as well, Android apps don't seem to be ahead of their iOS counterparts. Someone with experience in publishing for both ecosystems may be able to correct/corroborate this.

SwiftUI targets iOS, macOS, tvOS and watchOS, all counting for over a billion users combined. That's a substantial market, even when considering that it's limited to the latest version of each OS. And it's obvious that Apple's focus will be on SwiftUI going forward.

you can’t combine ios/watchos/macos sales and reach 1.4b users. That’s probably the same people owning multiple apple devices.

But by that metric android is 2.5 billions.

now depending on your business, you may indeed want to target ios users as well, but gone are the days of « ios first, then maybe android later » (except maybe for tablets, where the ipad reigns alone).

As for swiftui, apple does indeed seems to be pushing forward with the tech, but at this point i don’t think it matters much anymore. Videogames are developped with cross platform tools ( because 3d) , form-based apps are developed with cross platforms tools (because ui performance is now good enough). All we’re left with are non-gaming interactive apps where you still need maximum responsiveness. And even in this case you’re often better just developping only that screen natively and leave the rest cross platform.

I second this. I'm in the final stage of developing an app for a client, and it's using SwiftUI. The speed with which you can develop the interface is astonishing. Within Xcode itself, you can preview how it looks (i.e. compiles automatically and shows the result), and there's even a simulator integrated into the UI. Next to the preview is a play button so you can click a button, see an animation, et cetera.

You'll bump into a couple of things which require workarounds. For instance, you can only stylize the navigationbar if it's in normal mode, not if it's in the nice large title mode, and you'll have to use the UIAppearance API for that.

I'm also seeing lots of people calling things "bugs" but they actually just misunderstood the new layout system. I haven't seen showstopper bugs. Frustration is, however, unavoidable because it's a learning process.

I am an amateur dev, developing for fun and to annoy my family with home automation.

I needed to build front-ends and went the JS way. Vue.js and a framework (bootstrap vue for instance) and you are good to go.

With PWA you can make such an app very similar to a native one.

In terms of effort, for an amateur Python dev like myself, it took maybe a weekend to understand how this works, and then more time to get the details.

I haven’t seen it said here, but Swift and SwiftUI make it very easy to make stuff that looks good without knowing a thing about design.
If you know Java, Android can be programmed in Java or Kotlin (a Java like JVM language).

A lot of Android is not front end. SQLite databases, models, maybe use cases, JUnit unit tests etc. You know how to do a DAO to MySQL, Oracle or Sqlite? You know how to do a JUnit unit test of a data structure? That part will be easier then.

Keep UI simple - one Activity, Navigation and Fragments. Use a ConstraintLayout and simple views like TextViews. Use a popular, simple image library.

Much of Android work is not UI work. Keep the UI simple initially.

Most of the Android-specific stuff is around app lifecycle and yes, UI. And you're right that a lot of this isn't so different from backend Java.

I'd suggest OP download Android Studio. It's based on IltelliJ, so there's a good chance OP will feel right at home.

There's also the option of building a mobile web page if that's easier for you. It's cross platform and no publishing headaches. Of course if you need background execution or platform support it can be easier to just go the app route.
You should download: quasar.dev

or

the ionic.io framework