What’s wrong with Twitter 4.x on the Mac?
Twitter released the long-waited update for their OS X client last December. I was very excited about it. The last major update (3.0) was released two years earlier, back in 2013, so it started to age very badly. I was started to think Twitter entirely gave up it’s efforts to bring a decent native client to the platform to favor the twitter.com website. But that was not the case.
The New Version
The promise was simple: the new update will bring the platform’s new features to the native app, among other improvements, like the new dark mode.
The truth was different, on the other hand. Problems started to occur right after the update. Things didn’t work, actions burnt in our our muscular memory didn’t tend to be usable anymore. The app tried to hide that everything was changed in the inside, but failed to do so.
I was desperately started to search for reasons. The app, which was a pioneer once, the true prophet of it’s time started to act like a badly made copycat. There had to be a reason for that. I needed an explanation. And I think I’ve found it: it seems that the development was outsourced to a third-party firm.
And here come my theories. I really want to emphasize that they are only my thoughts and not based on facts. I think the app source code was passed to Black Pixel at some time, and they assigned a very junior team or engineers to the project. Maybe because other bigger projects were running, or they thought it would be fine. I don’t know. These developers were not able to understand or handle the existing code, so they settled up at rewriting the codebase. Maybe other factors were relevant, like too many required changes in data structures for supporting new features. It could be. But the thing I am quite sure is that they ended up writing an entirely new codebase. (If you look inside the .app, you can see the totally different architecture of the 3.x and 4.x apps.) And they were not as talented as the previous guy, so there were a lot of issues.
What I don’t understand, how the heck could this build be released? It was practically unusable. We get to the problems later, I promise I collected a big bunch of them. Maybe Twitter does not give a shit about the OS X app anymore? There were literally no QA teams on the project? Nobody ever tested the app before release? Looks unbelievable, but sadly true.
I am a Twitter user since 2008, tweeted 84.000 times, used it every day of my life since then. I have a lot of friends made on Twitter and a lof of important conversations happened to me in the DMs. So it is an important part of my life.
I have upgraded to 4.0 in the very first minute it was released. I couldn’t wait it to happen. And I deleted the new version and reverted to 3.1.2 a few hours later. Words can’t describe my disappointment. In the upcoming months Twitter rapidly released 7 updates to the client to fix the bugs. I’ve tried every one of them and reverted many times. Things were a little bit better every time, but still far away from the speed and stability of 3.1.2. A few months ago something happened and live stream in the old client stopped. Maybe Twitter shut it down. I was forced to refresh the feed manually every time …or forced to use the new version. I took a big deep breath and pulled the trigger. I was literally scratching the walls for a few days, but then I got used to the bugs and I sticket at the new version since then. I can feel now, that it could be great. Could, if somebody with proper programming skills joined the project.
Ok, so I wrote quite a few times already that the new client has problems. I am a man of words, so let’s see them!
User Interface and User Experience Problems
- Speed. The app downloads tweets slowly, caching does not really work, loads information multiple times, uses main thread to process data (which makes the UI stall for seconds), scrolling is terrible (interestingly it’s much worse with a mouse than with touch pad). Having long DM conversations in the app is practically impossible. The app hangs at opening the conversation for 4–8 seconds every time, and the whole UI is frozen for a few seconds when the other party sends a message. No matter where you are in the app.
- Unread marking. The app got 5 ways of indicating that some new tweets arrived (tweets appearing in timeline above the current scroll position, blue indicators near the tab icons, icon badge, menu bar icon coloring, and system notifications). Almost all of them are broken and highly inconsistent. For example the menu bar icon often displays unread tweets, when the tab bar doesn’t, and vica versa. Reading the tweets does not clear the dots/colors. Events semm to happen out of sync (probably when the network operation finishes). Come on guys, that’s not so hard!
- Oversimplified navigation. The previous client had a very well-designed hierarchical navigation. Animations helped the eye and the top bar reflected where you are in this hierarchy, similarly to the iPhone. The current version ditched all of this for simple fading animations. No more left–right movements involved. The creators probably didn’t even know what features have they dropped: gestures like “three fingers left” do not step back one level anymore, “three fingers up/down” does not change between the tabs. There is no indication anymore that a given action reached the last possible item (previous versions did a nice bouncing animation). The UI just does not respond anymore which causes confusion: did the app get the gesture or is it because it didn’t?
- Virtually no “bad network” handling. If the user’s internet connection is slow, lots of unexpected things happen. Things which seem to happen in the same time with good net connection, tend to lag half up to minutes after eachother. Clearly nobody tested this app without a decent network connection. Another example: sending a new tweet with some image attachment takes forever and absolutely no feedback is given. On the iOS, the app displays a little progress bar in these scenarios.
- The image viewer window has automatically disappearing head and footer bars. This sounds like a good idea, but almost every time I opened the window the have covered something important on the image. Macs have big displays, you don’t have to save screen estate with this type of tricks.
- Buttons have mixed inactive states. On OS X there are two kind of buttons: one kind can be pressed directly when the app’s window is not active and the other kind is faded out indicating that the window should be active in order to use it. Twitter does fade out the tab bar icons in inactive window state, despite they are clickable directly, does not fade out tweet action or New Tweet buttons (they can be clicked too), but going into tweet details (by clicking a tweet) does not work, nor viewing images or videos.
- There are no loading indicators for direct actions. If you press ⌘⇧R to force a content refresh, and your network is slow, the app should display somehow that the network operation is in progress. The same goes for sending new tweets (for example with attachments), which I mentioned earlier.
- Missing guides on failed actions. When a request is timed out or the timeline cannot be downloaded the app displays a simple placeholder label, and offers no option to reload or retry the action, nor any hint for the novice users to find out how to fix the problem.
- If you have video autoplay on, it actually autoplays GIFs only. GIFs are not clearly distinguishable from videos.
- Timeline clicks have no visual feedback. Neither links, hashtags, images or the tweets themselves. Back buttons have the same problem.
- Why does the app have a 44 pt header? Nothing explains it.
- “Tab buttons” are not really tab buttons, like on iOS, because they don’t remember their inner navigation. For example, if you open a tweet’s details on the Home tab, switch to Mentions, then switch back, the Home stream will be displayed instead of the tweet.
- Clicking the Dock icon does not clear the new tweet indicators, but clicking the menu bar icon does. Inconsistent.
- Insane image attachment interface. Seriously, why does the app enlarge the compose window’s height when I drop in an image and then just drop the image cropped in the middle of 2 times more space? Dropping more images is insanely complicated.
- The widget is useless. Trending topics in languages I can’t even read (like arab)? Popular tweets which I have read hours ago? Thank you, I am not interested. (Tip: some statistics would be handsome, like how many likes I got today, listing of unread replies, new tweets with my selected hashtag, etc.)
- Order of the direct messages is often wrong, messages sent later show up earlier in the conversation view. Sometimes it fixes itself, sometimes not.
- Direct messages often show up twice when you send them
- Opening protected users profile shows the unnecessary tabs and hides them immediately. They should be hidden by default.
- Twitter’s window acts weird in Exposé (Mission Control) sometimes. The app has wrong borders.
- Expanded links are creepy. It is true, that links have to crop at some length, and not the full URL shall be visible, but Twitter crops at 24 characters, which most of the time makes no sense, because the important parts are still not visible. Not to say that it looks ugly, because links do not fill the line.
- New tweet indication (on menu bar or on the Dock icon badge) often shows there is something new, but when you open the app’s window, the new thing isn’t visible, it will start downloading only after the window was opened.
- Often some of the tabs fail to open. I mean you click Home or Mentions, it shows the loading indicator or the “No Tweets” label, but nothing will be displayed, no matter how long you wait.
- The app displays my own replies as unread tweets when I mention myself (for example when I write longer thoughts in multiple tweets). Even worse: they tend to activate unread indicators after I closed Twitter’s window, because I finished with my thing. It’s very annoying that you have to reopoen it’s window, open Mentions, wait until it downloads (!), scroll to the top, switch back to Home and close the window just to clear the icon badges for tweets you have obviously seen.
- If you play an attached video in the embedded in-tweet player, you can still click it, which open it in a new window. When you do this, the video starts playing in the new window, but does not stop in the timeline view.
- Draging image into the new tweet window sometimes displays the green plus icon next to the pointer, sometimes not.
- Favorite/retweet counts are not updated when the app receives a push notification of such an action. The counts remain the same until the regular refresh operation is done.
- Tweet age counters are not updated reliably.
- If you have no permission to see the antecedent tweets, the tweet details view will show the loading indicator for ever.
- If you press reply to a tweet, the mention will be drawn twice. I mean the nick in the text area will switch to a more contrasted form after a few seconds, which indicates that it a second antialiesed version was drawn over the first without clearing first.
- Back buttons have no labels, just the arrow itself. If you are deep in the navigation stack, you will be lost. No clue where you can go back or where you are now.
- If you haven’t opened Twitter’s window for a while, and a lot of new tweets arrives, opening it shows the top of the timeline for a few seconds then jumps to the spot where you left.
- Scrolling with mouse is much slower than with the touchpad. Don’t try to understand this one, it is just a fact: scrolling using mouse involves 2–3 times less frames per seconds than with the touchpad.
- It seems Twitter 4.x does not listen to sleep/network notifications. When you sleep your Mac, after waking it up Twitter usually takes a few minutes to recover and keep up with the news, while other apps, like Dropbox can do it immediately.
- Go to User… (⌘U)’s search has serious problems with fast typing. Results are often duplicated, network requests don’t get cancelled upon the next character, users are displayed with wrong images…
- For some mysterious reason clicking @user handles opens the user’s profiles with a significant delay.
- The dark busy indicator graphics is missing, they are using the one for the light backgrounds in dark mode too.
- You can open more windows to have Mentions, etc. simultaneously with the main window. You can’t clear the unread notification badge using one of these secondary windows. For example you open the Mentions tab in a new window, switch back to Home in the main, a new reply arrives, you scroll to the top in the secondary window, and well, the indicator will remain on.
- Sometimes the app sticks to a state where the timeline will automatically scroll to the top when new tweets arrive, even when this option is set to disabled. When this happens, new tweet indication shows that you have unread tweets, so you have to scroll down a little bit then scroll back to the top to clear them.
- When you send an image in DM, the app will download it again when it appears in the conversation, instead of just displaying it using the data you already have.
- Full screen and split screen handling. Twitter is the perfect candidate for sticking it to the side of the screen while we are in a fullscreen app.
- Threads. You know the little blue line in the mobile apps and on the web which forces the tweet to be seend which someone is referring? The OS X client still does not support it.
- Image resizing. This one is ridiculous: If you drop a too large image into a tweet, the client first tries to upload it (takes for ever), then alerts you that it is too big. Why the heck does not resize the image to just fit Twitter’s limits?
- You can drag out tweets but you cannot drag out images. Image viewer windows don’t have document title elements, which are very common on OS X.
- Video uploading. It either does not work or I didn’t found how to do it.
- You cannot share images, links, or anything by dropping it to Twitter’s icon. It would be so cool to drop images on the icon to tweet them!
These are only the most annoying things in the new version. Most of them are simple bugs, which has to be fixed in a .1 release. The more advanced bugs (like the caching and unread state indication) show that the 4.x version was not well-designed, and has some architectural problems. Other things indicate the lack of cutting-edge technologies or proper algorithms (like the sluggishness of scrolling or the speed of the direct messages conversation view). I hope Twitter reads this and tries to fix the issues. I really love their product, but somebody had to write this post.
I try to update this post with new bugs and by striking out bugs Twitter eventually fixes in updates. Let me know if I miss anything important!