Habrahabr blogging platform application
Habr is Europe's largest resource for IT professionals. People come here to discuss industry news and share their experiences.
A development story:
Tools and Services
We used different tools for information exchange and communication during the project. This is our standard workflow in custom development:
Bitbucket code storage, Dropbox graphics storage, Pivotal Tracker issue and bug tracking, Hipchat in-house chat, Trello design and sketch approval, Crashlytics crash collection, Flurry/Google Analytics analytics, Skype/Telegram external communication
Profile handling

Customizing the design of publications and algorithms of content loading

Karma and rating widget

Safari iCloud Keychain' and Handoff' support on iOS
Search for publications

View a feed of the best articles (daily, weekly, etc.)

View publications by subscription

Adding publications to bookmarks

Working with Hubs

Dark Theme on Android
Functionality
Development
While designers were designing the interface, developers were already writing the components responsible for communicating with the API. Only native development tools without cross-platform frameworks were used for all platforms.
Commentary from an iOS developer
"We wanted to make a cool article storage application right away, connecting Core Data with a normalized database to permanently store posts and other entities. But as it turned out, the application was completely incomprehensible to the user. One of a number of controversial situations for example: a user, being online, added some post to favorites and immediately after that lost connection with the Internet, then went offline to the Favorites section, which of course could not download posts from the server, and saw only one post in it - the one that had been saved locally when loading the feed minutes earlier - this confused the experienced Habr-user: "where did all the other favorites go? I had a bunch of them on Habr! It's all gone!". Showing us that lone favorite post was somehow embarrassing, but hiding it from the user was even more illogical - after all, it exists in the local repository and it is marked as a favorite. We decided to follow the User Experience path: "if you want to see the feed, request it from the server". This does not mean that the posts are not stored locally and the application is not usable offline - I simply augmented the unique key with flags of belonging to a certain screen. So database normalization was sacrificed for UX."
— Andrey Kadochnikov
iOS Developer
Project in the archive
Denis Kryuchkov
Publisher of Habrahabr
"Mobile applications are a completely new area for us. At the same time, we had no desire, energy, or funds to create another development department for this product category from scratch. So we thought about it, talked to each other, and decided to outsource."
Commentary from an Android developer
Evgeny Ratkin
Android Developer
"The first problems concerned the placement of different types of content in posts, and especially in comments. In the case of posts, the solution was found quickly. The html-content is taken from the server, parsed and optimized for small screens, then the css-styles are applied, and the final html is displayed in WebView. As for the comments, everything is much harder. First, they have a tree-like structure, and second, their volume is comparable to the post itself. We had a few ideas for displaying comments of varying degrees of unrealizability. Among them there was even an idea to display all comments in one WebView. But since there were no gurus of desktop publishing or javascript among us, we didn't consider this idea too seriously. We stopped at the native implementation: the comments are parsed the same way as the post, but in the output we get not html, but a Spanned-string which is displayed in TextView. All the media content, spoilers and code open in a new window when you click on the appropriate link. I think that with this implementation we managed to solve the problem of presenting full information and the convenience of getting it on small smartphone screens."
The release and some figures
In our opinion, the release was a success. At the time of the announcement, all applications were already available in the stores, and were easily found by keywords. "Habr" experienced some problems on the server side related to authorization, but they were quickly fixed. The first feedback to the helpdesk inbox and Google Play reviews started coming in.
Distribution of installations among platforms
22-28, April, 2014
48%
41%
11%
Do you have an idea?