Hacker News new | ask | show | jobs
by fleshweasel 3400 days ago
It's absurd to have to beg the wealthiest software company in the world for what should be considered really basic stuff. Xcode is consistently unstable, slow, missing simple essential functionality (like refactoring), and Apple's interface builder is something that most experienced Apple devs know to run for the hills from.
9 comments

I remember a few years ago, at a WWDC session on Xcode, the presenter was talking about version control improvements.

He said something to the extent of "Xcode has a robust version control system" and the crowd laughed. And the presenter got offended, said it "wasn't nice" of the audience to laugh considering how hard-working the Xcode team was.

My recollection is blurry so it would be nice if someone else remembers this too.

But if that's really the attitude within Apple or the Xcode team, don't hold your breath for improvements.

Edit: changed my paraphrase of the presenter. since I remember it a little better now.

Well gee they are working so hard so we shouldn't criticize obviously. Golly all that hard work, so nice that it exempts them from derision for their substandard product.
Can someone link to a video of this session, or the title and the year WWDC was held?
I would guess "Source Control Management in Xcode", 411 from 2012: http://asciiwwdc.com/2012/sessions/411
The videos from many WWDC sessions are altered. So even if you got the right session it may not have this. I've been in sessions where much less interesting this have happened that haven't made it in to the video. Also last WWDC they started pre-recording sessions so they could be up on the web sooner. Many of the video sessions from last year don't have any audience noise and differ significantly from the live session.
So... they just don't know it's bad?
I'd guess it's more like they choose to ignore it.
Apple is not a big company. Out of the 116k employees they have 60k are in retail [1]. Another 6k are in AppleCare call centers [2]. So about 50k of them are at corporate. Contrast that with Google which has 72k employees [3] and Microsoft which has 120k employees [4].

Apple's organizational culture is meant to be about small teams. Steve Jobs once said "we're the biggest startup on the planet" [5]. This leads to complaints about various neglected features or products and calls for Apple to hire more employees or spin off divisions so it can have dedicated resources. Just like people will always complain about the quality of service at airlines, Apple watchers will always complain about whatever pet issue they feel isn't getting enough attention. That there are complaints doesn't in and of itself mean that Apple needs to change their organizational culture. These complaints always miss the opportunity cost of the changes they suggest: that Apple is Apple because they are resource constrained.

[1] http://fortune.com/2016/01/28/apple-retail-ahrendts-employee...

[2] https://www.nytimes.com/2016/11/21/technology/how-apple-empo...

[3] https://abc.xyz/investor/pdf/20161231_alphabet_10K.pdf

[4] https://news.microsoft.com/facts-about-microsoft/

[5] https://www.youtube.com/watch?v=f60dheI4ARg

Did you seriously just try to convince me that a 50k employee (by your logic) company is not a big company?
This (https://www.quora.com/How-many-software-engineers-does-Apple...) says that Apple employs ~16k software engineers.

Let's break that down across everything those 16k software engineers are responsible for:

• The OS kernels, drivers, and frameworks of macOS, iOS, watchOS, and tvOS

• The base-system software on all of those OSes, including rather involved apps like: iBooks, Safari, Mail.app, iTunes, Photos.app

• "Apps by Apple" like iWork, GarageBand, Pages/Keynote/Numbers, Final Cut Pro, Logic Pro X, iBooks Author, and, yes, Xcode

• Server.app (which adds to macOS the kind of enterprise domain-management + provisioning + MDM tooling that Windows gets in its Server releases, but also includes extra stuff like Wiki software, Xcode build-bots, and VPN management)

• Firmware + macOS drivers + Windows drivers(!) for Apple hardware (keyboards, mice, touchpads, headphones; I bought one of those MacBook USB-C multiport dongles recently and it did a firmware update, so apparently it has firmware too)

• Firmware and operating systems (usually NetBSD-derived) for "appliances" like the Airport/Time Capsule [though at least this has been dropped]

• Sponsored work on open-source projects (Webkit and LLVM being the two big ones) and standards (the Swift language; the Bonjour protocol)

• iCloud backend services: this includes the "obvious" things like the object store behind iCloud Drive and the per-app iCloud CoreData syncing servers; but also includes:

• • Apple's own maps service to back Maps.app

• • the iTunes store and App store (both in web and app form)

• • the Apple Music / "iTunes in the Cloud" sync servers

• • iCloud PIM support (mail, notes, calendars, reminders)

• • the FaceTime and Messages.app servers

• • Siri and Dictation (and you likely won't believe just how many languages Apple has built well-trained speech models for)

• • the Apple website / Apple Store + Apple Support apps

• • Xcode "development team provisioning" servers

• • webapp versions of iWork and the PIM apps (go look at icloud.com)

• • the Game Center servers

• • the iAd servers

This looks like a reasonable list, however I think the overarching view is that with all of Apple resources (money, etc.) they should be able to point some of them at XCode. This may involve hiring developers or shifting priorities from other projects. Either way, it's something that most developers feel is necessary and good.

Then again, maybe this is another way of saying that Apple really doesn't care about professional programmers and their needs. Similar to the feedback around the latest MacBook Pro specifications and the lack of movement in the Mac Pro and Mac Mini machines.

I'm not sure what flaw you found in what he wrote, or why even ask.

Obviously it's not the absolute number (50k) that counts, but how it's distributed. (And those 50k are not even all programmers).

If you do an OS, a mobile version of it, an embedded version of it, your own language, several huge SDKs, your own mail app, your own calendar app, you own spreadsheet, your own word processor, a TV appliance, the biggest mobile app store on the planet, your own logic board and CPU designs, the biggest music store on the planet, another large desktop app store, your own DAW, your own NLE, your own compositor, your own broswer, your own javascript engine, your own AI, your own Maps, and several other things besides, then no, "50k" might not be enough.

Microsoft has 5000 programmers just for Office.

The flaw is that when you have 50k employees, you have much greater flexibility and resources with regard to human resources (and likely almost every other resource) to move around than a company with 200 employees.

Additionally, we are invited to "Contrast that with Google which has 72k employees". So, Google, which has almost exactly 20% more employees (after removing all retail and help center Apple employees), is supposed to be so much different, and an example of a large company? At least the comparison to Microsoft has more than a doubling of employees.

The argument that Apple works the way they do because they run their teams lean is fine, but let's not start acting like they're not a large company just because their culture is intentionally different in some aspects.

Edit: To be clear, by objection is to the premise "Apple is not a big company." which was the leading statement of the comment I replied to.

A company with 50,000 employees in its corporate office(s) is huge. Saying another huge company is a bit larger and therefore this company is no longer huge is nonsense. Also, that a common range for defining "mid-sized" companies is under 1,000 employees should hint that Apple is beyond large. Here's a nice summary on how SBA and some companies classify other organizations:

http://smbresearch.net/sizing-up-smb/

Businesses with thousand or more employees are so rare as percent of the whole that they deserve their own category anyway. As in, what you say about them wouldn't apply to businesses in general and vice versa.

SpaceX has 5000 employees and they design, build, launch, and LAND rockets.
A much easier feat than having to deal with retail customers in shopping malls. Physics is much more rational.
Also, the company with the most cash reserves.
Perhaps because they don't have huge uncofuced teams?

It's not like having fewer people per project hasn't worked out for them in the one way that really matters for a company -- profit.

They have the most cash reserves because they're (a) incredibly profitable due to product demand and monopolistic practices (i.e. patent suits); (b) stockpiling cash. It's that simple. There's plenty of things they could be improving at Apple or just investing in. They're hoarding instead. They're not alone: many of the greediest, richest, and shareholder-oriented companies are doing the same thing while stagnating.
I'm not sure the best way to measure and compare, but it sure seems like Apple focuses a lot more on a narrow set of products than either Microsoft or Google.

Apple might be vertically integrated to a higher degree than Microsoft and Google, but Apple doesn't have as big of product diversity.

You don't need many people to improve xcode. I bet 50 people could do miracles if anybody cares.
50 people would just have a lot of meetings. I bet 6 people could make a real difference though.
I actually picked a small number. With documentation, testing and everything you get pretty quickly to large teams. I bet less than 10 would be devs.
I was all-in with six. Three people to write the code. Two people to write the documentation and otherwise interface with the public. One person to answer all of the emails and attend all of the meetings and make sure nobody interrupts the other five people.

If you have headcount for "testing" then I don't want to use your software. Tests are integral to coding and should be written first.

Grandparent's not talking about unit tests. A good human tester can be very useful in finding the mysterious edge cases where the bugs roam, without wasting your developer's time doing the same.
If you have headcount for "testing" then I don't want to use your software. Tests are integral to coding and should be written first.

Yeah, if everything were synchronous, deterministic, linear, and non-interactive, life would be so much easier, and test-driven development might actually work.

Do you use Apple software? I understand they are pretty big on manual testing.

Your process description doesn't sound anything like how I understand products are developed at Apple. Where's the headcount for the designers / UI specialists? Are you counting them as engineers?

Do you have a publicly accessible project I could inspect how this all worked out for you?
That would be a dream but I have never seen that I a large company. Every little thing gets huge overhead.
Mythical man month.
It seems like what was once their strength is now becoming a liability. They seem to be spreading themselves too thin and more and more people are complaining about more and more things. Since more customers are unhappy it seems like they either need to hire more people or cut products.
I thought they were already cutting products. Apple displays: gone. Airport: gone. Mac Mini and Mac Pro haven't had updates in so long they should be gone.
I've noticed this effect recently - I call it "too big to try."

Once a given institution reaches a certain scale, the apparent limitations on human attention at the top of the hierarchy make it impossible for the organization to contemplate small ventures. Like the parable of Bill Gates finding a hundred-dollar bill on the sidewalk, it's no longer worth the time to stoop to pick up the small stuff.

(Intuitively, this seems related to the absurd inflation in the cost of public works in the US over the last century.)

Definitely. To me, it's a symptom of control-oriented organizations, where too much information processing has to take place at the top. As a contrast, support-oriented organizations work to keep most decisions happening lower down.

It's especially frustrating here because the business case here seems pretty simple: go make these developers happy and effective. It's a known audience, they're easy to reach, they're not shy about telling you what they want. I don't think a lot of information needs to get to the top of the hierarchy.

Ironically, Bill Gates is probably not the best billionaire for this parable: http://community.seattletimes.nwsource.com/archive/?date=199...
That very wealth is what's insulating them from the long-term reality of the choices they're making. It's a trap!
Indeed, Apple has the high-tech equivalent of "dragon sickness", in a nod to Tolkien.

Google has a long road ahead of it, but it looks like they have the right pieces in place where I see small, incremental improvements each year, so maybe they're the tortoise. Milestones on that long road are like migrate away from Dalvik, fix business model / monetization issues with the Android marketplace, switch to vector-based canvas blitting, rationalize API support for different manufacturer-added features, and so on. What would be interesting is if they steal Apple's developer thunder by capitalizing upon open source and their in-house build system, and out-flank Apple's developer mindshare, by creating a developer-oriented ecosystem.

Imagine if you could hook up your own Docker container that Google's build infrastructure then taps to build your Android app...but all the open source your app depends upon are in their build infrastructure, with near-instant feedback on build and CI problems of the open source bits operating at a massive scale. App development shifts to a posture where open source frameworks/modules/libraries that already power a lot of software are orders of magnitude more convenient to develop under this ecosystem, and the agility/efficiency of all those Android developers coalescing around common open source components online in a single build and CI ecosystem far outstrips Apple-based developers stuck with XCode and their own person-oriented toolchains. Apple has nothing in the pipeline remotely like that kind of ecosystem. Google would also get big data-based insight into phone app development trends in real-time that Apple could only dream about. Google's phone app development OODA loop would tighten considerably smaller than Apple's.

I also wonder if Google and Microsoft could find benefits to team up to replace Dalvik with CLR, and then Microsoft Visual Studio becomes a first-class citizen on Linux for building CLR-based apps on Android.

All of that has zero meaning given Google's reluctance to fix Android updates.

The majority of the Android users is yet to experience any of those improvements.

Um, Google has actually worked very hard to de-couple parts of Android into separate apps, so that those apps can update without a carrier-managed total OS upgrade.

This has arguably negative impacts on Android's utility as a non-Google OS, but there's no question that this strategy was to help push updates to users faster.

Making it a legal requirement, as they already do with so many others for OEMs to access Google services and the Play Store, would be the solution.

No need for smoke and mirrors games regarding decoupling Android.

I imagine it's not that easy to add something like this now, without huge OEM backslash. If it was there from the start, maybe it would work.
> Imagine if you could hook up your own Docker container that Google's build infrastructure then taps to build your Android app...but all the open source your app depends upon are in their build infrastructure, with near-instant feedback on build and CI problems of the open source bits operating at a massive scale.

But... why? Gradle already does a good job eliminating works-on-my-machine-isms, that sounds like cloud-for-the-sake-of-cloud.

> I also wonder if Google and Microsoft could find benefits to team up to replace Dalvik with CLR, and then Microsoft Visual Studio becomes a first-class citizen on Linux for building CLR-based apps on Android.

But... why?

> Gradle already does a good job eliminating works-on-my-machine-isms, that sounds like cloud-for-the-sake-of-cloud.

Github for build and continuous delivery/deployment/integration; extremely distributed build. Today an app developer pulls down the latest version of an open source library and building against it, then files any integration issues against the library's ticketing system. Google's system allows the library developer to build a version, then find everyone whose apps that use their library break because of the new proposed version. It vastly speeds up the delivery cycle and increases robustness between builds of all your dependencies and your app.

A lot of people really like the re-factoring and IntelliSense features in Visual Studio, but hate working under Windows. The new Linux compatibility push under Windows when it matures may accomplish the same as making Linux a first-class citizen in Visual Studio.

Google trying to further develop Dalvik/Android Runtime for Android seems to me eerily like Sun developing further generations of SPARC. Google would have to put up a really big war chest to continually find and address all the edge cases to sustain a process virtual machine going forward into the future, and I'm not clear where the value proposition lies in doing so, rather than settling upon an existing process virtual machine with more developers working upon it. I suspect Google does this because adopting someone else's process virtual machine, even an open sourced one, risks that someone else somehow strategically chokepointing Android development in the future with incompatible changes.

> Google's system allows the library developer to build a version, then find everyone whose apps that use their library break because of the new proposed version.

That assumes that library authors can see the code of dependent applications. Ehhh...

> It vastly speeds up the delivery cycle and increases robustness between builds of all your dependencies and your app.

Presumably by breaking repeatable builds? I certainly don't want it to replace libraries without my knowledge, and that's the only part where I can see it possible "speeding up the delivery cycle".

Oh, yeah, Gradle can do that anyway with -SNAPSHOT dependencies.

> A lot of people really like the re-factoring and IntelliSense features in Visual Studio, but hate working under Windows. The new Linux compatibility push under Windows when it matures may accomplish the same as making Linux a first-class citizen in Visual Studio.

Tried IntelliJ/Android Studio? Especially considering that ReSharper, which is more or less a port of IJ's refactoring, is usually considered a must-have add-on for VS.

> Google trying to further develop Dalvik/Android Runtime for Android seems to me eerily like Sun developing further generations of SPARC. Google would have to put up a really big war chest to continually find and address all the edge cases to sustain a process virtual machine going forward into the future, and I'm not clear where the value proposition lies in doing so, rather than settling upon an existing process virtual machine with more developers working upon it.

Sounds like migrating to OpenJDK would be a much more reasonable path in that case, since it wouldn't mean starting over in third-party application support.

>That very wealth is what's insulating them from the long-term reality of the choices they're making. It's a trap!

What "long term reality"? They have been doing this when they were near bankrupt and continue to this day, 20 years later, and they are now the richest company on the planet.

Maybe the long term reality is actually success?

The one that's been getting me lately is the split between Xcode 7/Swift 2.2 and 8/3. We have an older project in Swift 2 (yes, it's slated to get changed over, just not yet), and new work on a project in 3. If I try to open one while the other is already open, one of the Xcodes invariably freezes or crashes.

I will say, though, that I've always liked IB (though not storyboards). But then there's the wonderful "Oh, you opened a nib, I should move something around in the XML." -> SCM status changes even though I didn't modify the file.

Can you still submit apps with Xcode 7?

In response to your problem, having done the Xcode Old/Xcode New dance every year since 2012, I got into the habit of making sure they are never running concurrently. Things get even worse if you run xcodebuild on the command line while a different UI version is running.

You can't run multiple versions of Xcode concurrently due to CoreSimulator fighting over which version gets to run. This is a limitation we are aware of. We are also very aware of the problems it causes.

As for other problems, please file radars and respond to requests for additional information. I have been on the external side of radar, I know it can be frustrating, but we do read them and we do take direct action based on them. Even duplicates are very useful.

What? I have very little problem running Xcode 7 and Xcode 8 along side each other. As long as you close the simulator before running from the other version.
Only one CoreSimulator service can be running at a time because only one can be in control of the devices and the database. If you try to keep two versions of the tools open they'll keep killing each other's CoreSimulator or one will get stuck with the wrong incompatible version.

CoreSimulator is used during builds and for IB's accurate rendering feature. Instruments and Console open connections to CoreSimulator for various purposes. A lot of things can break.

I've found having IB open in both versions will eventually lead to errors in IB, if not outright crashes.
> Can you still submit apps with Xcode 7?

...yes. You can. 6 is the minimum.

> having done the Xcode Old/Xcode New dance every year

There didn't used to be this hard division between Xcode versions because of the compiler. If you were willing to do some reconfiguring, you could use newer GCC or "Apple LLVM" with the older Xcode.

Why are you not using the Swift 2.3 option in Xcode 8? It is going away in Xcode 8.3, but still, you can use more modern and stable dev tools.
I'm not sure why it hasn't been done yet; I've only been on the team for two months now. That would indeed be lovely. But the plan is to have one of our contractors move the entire project up to Swift 3. I don't know exactly when, though...
The OP mentioned Swift 2, not Swift 2.2 - even that upgrade can be non-trivial (2->2.2).
Eh, it is indeed 2.2, sorry for the imprecision. But yes, the concern is the time for the transition. Planned. We just have to fit it in.
The file changing just from being looked at is one of the basic reasons that IB is bad. Apple made a grievous mistake in designing UI markup that is intended to be hidden from developers. Un-organizable, un-diffable toxic sludge.
It boils down to budget. The app ecosystem simply isn't a high priority because it makes little to no money relative to Apple's core business. Matter of fact the best thing they did was introduce ads to app search, at least now they're probably making a few more bucks.

They invest most of their resources into hardware and critical software. Everything else clearly is secondary.

It doesnt take much to form this opinion either, just look at the quality of their software overall. Very inconsistent, trending towards mostly stable. Design improves which is good I guess but not what developers need.

They don't make a ton of money from independent developers and it doesn't matter anyway because most of the heavily used apps are created by Apple themselves.

I'm only just getting into Apple development, and the course is using XCode and the interface builder. Could you tell my why I should avoid it and what approach to take instead? Or is it fine or even preferable to use it in the 'learning phase'?
Apple should start asking their software engineering candidates to invert red-black trees in interviews. I hear that makes these kinds of issues unlikely.
Sooner or later people will wake up to the fact that this is their own fault for leveraging a proprietary ecosystem.

You want to play in Apple's walled garden, you take the scraps they give you.

They have no financial incentive to make the experience better for you if you're already a captive developer.

Yea, but iOS developers make twice as much as Android developers. Lots of customers love the walled garden and those customers spend a lot more on apps than Android customers do (Android installed base is multiples of iOS, yet revenues are double on iOS).

And one of the reason the bigger spending customers are with Apple is the benefits of the walled garden. It's more secure, and it's updated far faster (or at all). For developers it's a better environment to develop for, consistent screen sizes and hardware features and I know I can write my latest app for the latest iOS and within months of it's release the vast majority of revenue producing customers will be on it. That's a big reason why better apps are written on iOS first, it's easier.

> Yea, but iOS developers make twice as much as Android developers.

1) 2x mouse nuts is still mouse nuts.

2) Do they really make 2x? Especially after you deduct $100 a year?

$100 is peanuts to anyone actually earning money, and it's definitely peanuts compared to developer cost.
Except that I seem to remember a statistic like 95% of the iOS apps don't actually make enough to cover that annual fee.
If they didn't make $100, then it wasn't worth their time developing the app either, even without that fee.