Yes, this isn't an iPad on the post preview. Just keep reading.
Hi all! Nikita's here. I was out in a park with the stroller meditating on a bench while my infant was sleeping. Then a brilliant thought struck me about how I could solve one of the outstanding bugs in one of my products. First, I couldn't wake my child — this would mess up his sleeping routine. Second, I couldn't build this fix quickly — I didn't have my MacBook on me. In the end, I could only dwell on the solution until I safely got home and in front of my working machine.
But why? The Internet is all over us, with 5G steadily becoming the standard, 4G having good enough speed for almost anything, and free WiFi covering most of the city. I should be able to bring a low-weight device with me at all times to quickly iterate on an idea if it comes in an unconventional working space.
I started to research my options. I develop a whole range of different stuff: from websites to servers to telegram bots to blockchain solutions to npm packages, etc. I do most of my development on Unix platforms (Linux and macOS) in the VSCode, especially with the GitHub Copilot, which saves me tons of time.
I also wanted to limit my options to less than a thousand dollars. Maybe a bit more, but ideally within this range. I have a mighty machine at home but bringing it with me everywhere is reckless. I needed something cheap, lightweight and allowing me to develop anything.
There are a lot of excellent windows laptops, but most of them are too bulky, heavy or expensive for me. I wanted a solution that would be smaller and lighter than my good old MacBook Pro from 2017. In addition, I needed something that I wouldn't worry about getting into sand, dirt — or simply forgetting in a coffee shop.
I've heard that some people (not developers) have moved to work only on iPads, which got me thinking. You can get the most basic iPad for ~$450 + ~150 for a decent keyboard. Already a good deal. But can you develop actual products on it?
Well, I figured everything out, and I'm going to share my experience as an ultra-stack developer (like a full-stack developer but not limiting myself to any developer category at all).
Unfortunately, the cheap versions of iPads were out of stock at all the Apple stores around me, and I had to settle for buying a bit more expensive version — the iPad Air 4th generation. I also bought a few different keyboards for it, which I'm going to discuss below.
And, not like it's worth mentioning, I'm writing this blog post on the iPad as well.
You're all interested in how I made this happen. Well, I use:
- code-server to run a cloud instance of VSCode on Digital Ocean (here're $100 for free if you use my referral link to register)
- Termius to access my servers over ssh
- Discord and Telegram to talk to my development teams
- Trello to keep track of team tasks
- Todorant to keep track of my daily tasks
Having this setup allows me to develop anything I want (except a few things I'll touch on below) as I'm running an entire Unix machine in the cloud and connecting to it in... well... Safari. Yes, it sounds insane, but having set everything up, I can now develop from any potato with access to the Internet in a comfortable environment. Yes, even on my Pixel 3 (see the preview pic), that is set to slowly become obsolete without any more updates (thank you, Google).
One of the most important things for me was what keyboard to choose. It seems like there are so many of them yet so few good contestants. The keyboard had to be easy to type on, lightweight, not too flimsy, cover back and front (I don't want to waste the iPad prematurely), be easy to use without a surface (e.g. on laps).
The onscreen keyboard didn't work well in my case. It shrank all the vital content and made VSC look worse than on my Pixel 3. So I bought a few keyboards, and here are my notes on them:
- Apple Magic Keyboard for iPad costs like an iPad, extremely heavy, has only two positions, none of them comfortable; screen "floats" on top of the keyboard, which makes it highly uncomfortable; this is the worst keyboard I tested.
- Folio Keyboard is another keyboard from an Apple Store. I'm genuinuly disappointed in wasting my time to pick this (and the Apple Magic Keyboard) up and to return it. It is still costly, however, on the lighter side in terms of weight. It feels like they made typing on it highly uncomfortable to make the Apple Magic Keyboard feel like a better option. This keyboard is impossible to work on due to how difficult it is to type on, period.
- Fintie keyboard off Amazon is an excellent contender. Only $50, and if not for its weight, could be a great choice. The keyboard is detachable, which is fantastic, but it doesn't sit right on laps. Also it's not easy to close it. You have to wobble the keyboard up to make it fully close. It has a slot for an Apple Pencil that I won't ever use. There is no touchpad.
- Logitech Combo Touch is the winner, which I used most of my week. It is backlit, lightweight (at least for some reason, it feels lightweight), has a normal-sized touchpad (not that gimmick on the Apple Magic Keyboard), clicky enough, just overall sound. The surface-like back support is fantastic, and it even sits on the laps ok. The keyboard is detachable, but you can't use it in a detached position. If you want to use an iPad with a keyboard, pick this option
Pros and cons
Below are the notes I took while using the iPad as my main machine for development for a week. Of course, some of these points are subjective, but this whole experiment and this article are. I hope you find my notes helpful.
- This setup is lightweight with the right keyboard
- Apple has finally added a way to remove the emoji keyboard. I don't have to switch through the emoji keyboard two times before switching to the correct language on the iPad OS
- It’s pretty much macOS with all the existing shortcuts like cmd+tab and others, so if you don’t want to use fingers to switch between apps, you don’t have to
- Full keyboard access can be helpful if you want to use just the keyboard to control the iPad. However, you have to learn the gestures, and why bother with a touchable iPad then anyway, if you're not going to touch it?
- The screen is pretty good, but I can't notice the difference from a usual retina, especially in the night shift mode
- Detachable keyboard option can be more comfortable than simply holding everything on the laps
- The battery holds amazingly well, as VSCode and the load is in the cloud
- I had to pay for Colemak onscreen keyboard (and it is so bad that I removed it). However, Colemak is available on hardware keyboards for free
- After I removed all built-in apps I could, there is still no way to hide the rest like on iOS, so they keep swamping the home screen (the hack with putting them into folders would bother me just as much)
- A minor inconvenience: newly installed apps, for some reason, get to the new screen, not to the main home screen, so I have to drag them to the home screen every time manually
- There is no way to quickly enter backtick on the screen keyboard (you can quickly type it on an external hardware keyboard, though)
- The onscreen keyboard is almost impossible to use in any pro setup. It covers too much space
- If the keyboard doesn't connect to the iPad's battery, you have to charge both devices and keep an eye on their charge levels
- Night shift on iPad is pure garbage. Even on the warmest setting, the flux app on macOS is so much better at making the screen warm
- Multitasking is pretty much broken. You can use only two apps at a time with no real way to keep, for instance, terminal running in the background (Terminus keeps disconnecting in the background)
- Most non-apple keyboards don’t put the screen to sleep. You have to manually turn it off or have to wait until it automatically goes to sleep
- iPad becomes really fingerprinty after a while. You have to clean it if you touch it all the time
- iPad screen in almost any setup is the heaviest part of the bundle. Having a high center of mass makes it shake too much
- Sometimes I don’t need to capitalize the first letter, but the iPad makes me. I have to open the onscreen keyboard, which makes it a real hassle (you can't just press shift+letter to decapitalize the first letter on the external keyboard)
- I couldn’t find a way to turn off all sounds on the iPad. It seems like I always have a keyboard sound or a Telegram notification sound or something else getting through
- It is close to impossible to copy from VSCode integrated terminal due to how Safari works. Pasting is also a joke
- For some reason switching between windows with four fingers is indeterministic. The order is always mixed. I expect to be able to swipe back and forth between apps, but sometimes when I want to swipe back, I have to swipe the other way
- GitHub app does not have enough control and settings beyond reviewing pull requests, and when used in Safari, there is no way to get rid of the annoying banner on top asking to install the GitHub app (or the popup asking to open the GitHub app, which is even more annoying)
- The Git sync button doesn’t work in VSCode for some reason when trying to touch it. It works with the touchpad, though
- VSCode becomes unresponsive when brought back from the background sometimes, making me spend time relaunching it
- VSCode errors and warnings are impossible to hover over with fingers, doable with the touchpad, though
- VSCode is impossible to use with colemak. cmd+s doesn’t work. Instead, it reloads the page as there is the R on qwerty there. It feels like Safari still uses qwerty shortcuts even if you go deep into keyboard configuration in VSCode and fix everything
- Backspace in VSCode sometimes stops working
- If you don't have internet, you're out of luck — no work can be done as the VSCode instance is in the cloud
- Sometimes code-server take ages to initialize or makes me reload the server over ssh
- Magic Trackpad does not select text the way it’s supposed to. It's always easier (even though still challenging) to select text with fingers
- No way to play rich media files (e.g. audio) that got downloaded by a script — there is no access to the iPad's file system at all
- Animations, animations, animations, I hate how much time is spoiled on showing me animations of various screens opening and closing
- Here's a dealbreaker: there is no GitHub Copilot support in code-server yet
- There is no good mongo client and no usable mongo client cheaper than $16
- Sometimes touchpad scroll stops working in Telegram
- Content blockers don’t work well with ads on Safari. I don't know why — the same content blockers block everything on Firefox on my macOS
- You can't quickly add an extra screen to develop on
- There is no other browser than Safari on iPadOS; all other browsers are just reskins of Safari
- A dealbreaker for the frontend developers: no frontend dev tools, nothing at all
As you can see, there are way more cons than pros in using an iPad as a daily driver for an ultra-stack developer. I'm just happy that this experiment is over, and I don't have to suffer another day building stuff on the iPad. This is surely not a "pro' device for developers at all. You can't do much with it because of how closed the OS is.
There is a nice upside to this experiment: I now have a fully working cloud instance of VSCode with all the extensions installed (except for the GitHub Copilot extension) and a complete Linux machine running. I can use this instance virtually anywhere.
When spending almost a thousand dollars, I don't expect to suffer. I want adequate performance. The iPad does not provide what it should at this price range.
However, doing all this also made me remember that I have an old 2015 MacBook 12" just laying around. Unfortunately, I can't install the latest macOS there (my model is an early 2015 one), but it is still a full macOS. So it is an unlocked Unix machine! And for what it's worth, it is like $300 on Craigslist nowadays, even the newer models of the MacBook 12" lineup that support the latest macOS.
Do I have to mention the obvious? I'm now using this MacBook 12" from early 2015 with VSCode installed onboard.
I wanted to thank the iPad for this experiment as it made me set up the code-server cloud machine and pointed me at the eventual solution. But no. No good things can compensate for this week in hell trying to develop stuff on iPad.