The Blog

The what's what of the Flowdock atmosphere.

Blog Archives

Features That Give Answers To “Who’s Read My Message?” & “Who Is This Guy?”

May 15th, 2013

Mikael Roos

We have had a few new features come out this May in Flowdock.

These people have seen your message

First, we have a pretty awesome feature which has been requested a few times. If you @mention someone or use @everyone, you’ll be able to tell when those people have seen the specific message. Simply hover over the message to show the list of users who have seen it. In 1-to-1 chats the feature works regardless if you mention the other person or not.

user-cards-flowdock-screenshot

Second, a couple of convenience features to let you figure out who’s who more easily and find the right person from within Flowdock. You can now click on a user’s nick in Flowdock and see exactly who that person is and when they’ve last been active in Flowdock.

Start 1-to-1 chat

1-to-1 chats can be started in two new ways:

  • From the new user card which is opened when you click on a user’s nick in the chat
  • From the flow dropdown at the top of the page

We’ve also changed the way you control flow access. You can now separately control if you want your flow to be open and visible for other members of your company account, and if you want your flow to be accessible via a join link. Change these settings from the people management screen accesible from the user icon in the top right corner of the app.

new access mode config flowdock

Flowdock API Changes

May 7th, 2013

Mikael Roos

At Flowdock, we are changing the way we handle flow IDs in our API. If you are a Flowdock API user, this may affect your integration, and if you are using Hubot with Flowdock, you’ll have to upgrade before the change comes into effect.
The changes will take effect on Monday, May 27th, 2013.

For more information, see our new API Changes page.

Keeping Track Of API Changes

To stay up-to-date with up-and-coming changes and additions to the Flowdock API, frequent the API Changes page or follow the API Changes Atom feed.

Contributing & Discussions

In case you bump into any bugs, problems or inconveniences with the API, feel free to create an issue in our open Flowdock API documentation GitHub repository. If you find anything remiss in the documentation, correcting pull requests will be received with open arms.

Flowdock For iPhone Gets Push Notifications & 1-To-1 Messages

April 23rd, 2013

Mikael Roos

Flowdock iPhone Push Notifications

Lately, we’ve been putting plenty of work into the Flowdock iPhone app. It’s now more streamlined and touts a couple of awesome new features: Push notifications & 1-to-1 conversations.

Push Notifications

Push notifications have been highly requested for the iPhone app, and now they’ve been added. Once enabled, you’ll receive a push notification whenever someone mentions your name in a flow or sends you a 1-to-1 message. You’ll never miss a message you want to see. Simply download or upgrade your iOS app and start it up to enable push notifications.

1-To-1 Messaging

Flowdock 1-to-1 discussions / private messages Another clear omission in the iPhone app has been 1-to-1 conversation. Now, you can send and receive private messages with your iPhone while on the go. The feature is fully packed with photo uploads and all. The UI now gives you two sections, one for your flows and another for your 1-to-1 conversations.

Other platforms

Flowdock’s web app works great with most modern mobile browsers. You can simply point your mobile browser to flowdock.com/app to access on the go.

As always, we love to hear your feedback.

Someone Is Typing, Access Mode For Flows And 10 Other Features We Recently Added

March 20th, 2013

Mikael Roos

There has been a lot of hustle and bustle at our Helsinki office lately. After being acquired by Rally Software a month ago, we’ve been spending some time getting to know the people and ways of Rally. In the meantime, we never stopped shipping new features to Flowdock. Here’s a few of those features.

Someone Is Typing In Here…

We added a feature which can be found in many chat applications. That is the ability to tell when someone has begun typing something into the chat, but has not yet posted it.

Someone is typing screenshot

We simply show a little “Mikael is typing…” text next to the chat input when this happens. And if you prefer not to show when you’re hesitating, you can turn the feature off from Preferences.

Access Mode For Flows

Previously, you always needed to specifically hand-pick the people you wanted to add to a Flowdock flow. Now you can choose from three different access modes:

  1. Invite-only – everything works as it used to, and you still need to invite or add existing people in your organization to your flow.
  2. Anyone with the link – Anyone with a specific join link can join the flow. You can distribute this single link in any way you like.
  3. Anyone in the company – You have the join link as in (2.), but you also allow anyone in the company account to freely join this flow via the flows drop-down.

The people settings can be accessed via each flow’s user avatar bar.

And Some Other Features We Added Lately

  • Added an emoji auto-completer, so you can simply type a colon (:) to start adding an emoji emoticon.
  • Added file uploads to private chat.
  • Worked a lot on the mobile web experience. Now there’s better UI for switching flows. A lot to do there, still. We’re working on it.
  • Improved IE support (IE9 & 10).
  • Added multi-flow support for API & integrations – you can now use a comma separated list of flow tokens in any integration that works using flow tokens (GitHub, JIRA etc).
  • Edit message with up arrow – when you have focus in the chat input and it is empty, pressing the up key will open up your latest chat message for editing.
  • Edit message in private chat – extended the feature to private chats.
  • Made notification volume configurable via Preferences
  • Added actual delete functionality for flows
  • Changed the flow tabs style into a more compact one
  • Added simple keyboard shortcuts to switch flow tab in browser: Press first Esc and then Left, Right, 1, 2, 3 or so on to switch tabs.

Things To Come Are Mobile

We also have a lot of things in the pipeline! Right now we’re cooking up a new version of our iPhone app, which will add some long-awaited features (think push!).

Another thing we’re adding is many users’ pet peeve. We won’t be forcing everyone to use Gravatar anymore but instead you’ll be able to add your avatar directly to Flowdock.

As always, all feedback is extremely welcome!

Syncing Backbone Models in Real Time Over Socket.io

January 25th, 2013

Otto Vehviläinen

The New Flowdock was built from the ground up on top of Backbone.js. Since Flowdock is all about real-time messaging, our web app posts and receives messages via a Socket.io backend. To support saving messages through Socket.io instead of a REST API, we wrote a custom Backbone.sync method.

We also use Bacon.js a lot to manage message streams in the client. If you’re not familiar with Bacon.js, take a look at the primer we posted about Functional Reactive Programming and Bacon.js. The Bacon.js EventStreams are an important part of keeping our data models and collections up to date.

Introduction

About the terminology: Flowdock is a real-time communication tool, which means that the core of our service is delivering different kinds of messages. When I talk about messages in this blog post, you can think of them as chat messages that have a number of properties: content, user who sent it, the flow (chat room) it was posted to and tags, among others. Messages can also be emails, notifications about git commits or anything else we support. The exact format is not important, but rather the idea that messages represent most of the content that is eventually displayed to the user and can be filtered based on a number of factors like the flow it was sent to or the tags it has.

What’s this Backbone.sync method then? Backbone delegates every save or read operation to its own sync method. By default, it maps the different verbs (create, update, etc.) to CRUD REST API operations á la Rails. Backbone.sync takes three arguments:

  • method, which is any of ‘update’, ‘patch’, ‘create’, ‘read’ and ‘delete’
  • model, which is the model or collection to operate on
  • options.

The default implementation serializes the model or collection (if needed) and then makes an AJAX request to the URL specified by the model’s URL property. The model or collection gets updated after the operation completes.

Creating Messages Over Socket.io

So, our custom sync needs to post new messages to the backend through Socket.io and otherwise work normally.

Flowdock.socketIoSync = (method, model, options) ->

  # Create-operations get routed to Socket.io
  if method == 'create'
    Flowdock.connection.messages.push model.toJSON()

  # All other operations use standard Backbone.sync
  else
    Backbone.sync method, model, options

Flowdock.connection.messages is a Bacon.js Bus that forwards messages without an ID through Socket.io to our backend. The relevant parts of the connection class work as follows:

class Flowdock.Connection

  constructor:
    @messages = new Bacon.Bus()
    @socket = @connect() # Returns a Socket.io socket
    @messages.filter((message) -> !message.id).onValue (message) =>
      @socket.emit "message", message
  ...

We’ve intentionally broken Backbone.sync’ default behaviour of returning a promise and executing success and error callbacks since our implementation handles the state as part of the message stream. Basically, we keep track of the UUIDs of sent messages and check if they come back with an ID (aka “success callback”) and if not, we send an error message to the messages bus (aka “error callback”).

One important thing to note is that the message bus is the same one that receives new messages from Socket.io and which all of our collections listen to. When new messages get pushed to the bus all interested collections — and therefore the UI — can react immediately to the changes, even before the messages perform a roundtrip to our backend.

Only our message models require this kind of sync method, and Backbone enables us to choose the sync method to use per model:

class Models.Message extends Backbone.Model

  sync: Flowdock.socketIoSync
 
  ...

This allows us to simply create a new message, save it, and it’ll automatically go through Socket.io.

# Create a new message
message = new Models.Message(content: 'foo', flow: 'example:main', user: 1)
message.save()
# -> ['message', {
#   event: 'message',
#   content: 'foo',
#   user: 1,
#   flow: 'example:main',
#   uuid: 'abbaacdcABBAACDC'
# }] is emitted to socket

Updating Collections and Models

Part two of the whole synchronizing messages over Socket.io problem is receiving messages: new messages should end up in the correct collections and existing messages should get updated. You might already have wondered how the messages posted through the websocket get IDs and other server generated properties. The simple version of our solution is that we generate UUIDs for new messages in the client before saving them, after which the message collection updates the correct model based on the UUID when the updated message arrives back from the server through Socket.io.

Our collections (and some models) consume message streams and filter messages relevant to them. Usually the consumed stream is a filtered version of the global message bus. This way we can push all of the messages (both new and old) to the single message bus. We don’t need to know who’s listening to it and the message collections always stay up to date.

This is how the consuming a message stream works:

class Collections.Messages extends Backbone.Collection

  ...
 
  consume: (@stream) ->
    @stream.filter(@messageFilter).onValue (message) =>
      # Find message by UUID and update it if found
      existingMessage = @findByUuid(message.uuid)
      if message.id && existingMessage? && !existingMessage.id
        existingMessage.set(message)
        existingMessage.trigger("sync")

      # Add the message if it does not already exist
      else if !message.id || !@get(message.id)
        @add(message)

      return Bacon.more

  ...

This logic is used as new messages and updated data comes in, but we still use the collection.fetch method to load the initial data and history to collections from our REST API.

Conclusions

Backbone.js is not specifically built for real-time applications, so using it in one requires some modification. Backbone is, however, a really solid foundation to build on, and since it has strict conventions, it’s really easy to customize the behaviour.

Using Bacon.js as the interface to the websocket library decouples Backbone collections and models from the Socket.io part and gives us the possibility to swap out Socket.io, and replace it with something else (like Faye, sock.js or EventSource) if needed with minimal effort. None of the collections or models actually know anything about Socket.io, so wrapping another library in a similar Bacon.js interface is easy. The consume pattern also makes unit testing really easy, since we don’t need to mock the Socket.io connection.

Say Goodbye to Typos & Poor Judgment: Flowdock Now Has Message Editing

January 23rd, 2013

Mikael Roos

In Flowdock, there are a couple of good use cases for editing your message: the sheer purpose of correcting typos and altering your opinions just after you’ve released them from the confines of the inside of your head. In Flowdock, as of right now, it’s possible to do just that.

Editing my message via the UI in Flowdock

When you hover your mouse over a chat message, you’ll see a new action next to the tag icon. It’s the edit icon. A quick click on it and you’ll be literally changing history in no time. Don’t worry, we show a little disclaimer in the end of edited messages, so you won’t go crazy thinking that it just said something else there a second ago.

Editing my Flowdock chat message with a regular expression

We’ve also added support for the popular Regex format s/teh/the/ for correcting the latest message you sent.

The New Flowdock: a Mac App, New Design, Chat + Threading, Emoji…

December 11th, 2012

Mikael Roos

You can check it out now or sign up first.

For the past few months, our complete focus has been on creating a beautiful group chat tool which embraces all the other apps your team uses and seamlessly moves between threaded conversation and traditional linear chat.

Flowdock, our web app that combines group chat with a shared inbox, has already proven to be incredibly sticky for teams. Flowdock customers on average spend more than 7 hours using the app on a given workday. Now, the New Flowdock is here and the highlights follow!

Mac Desktop App

We are simultaneously releasing a brand new shiny Mac desktop app complete with desktop notifications, keyboard shortcuts and retina-proof graphics. It even supports the full array of OS X Emojis! Check out the Emoji Cheat Sheet for details.
Download the app here.

Chat & Threads Together

We have added something probably never seen before: a unique combination of chat and thread-based communication. You can choose to reply to a specific chat message (or a message from an external source, like an issue from an issue tracker) or continue the discussion in a normal, linear, chat-like fashion. It’s up to you. Discussions in this style tend to be more efficient and natural.

Responsively Designed For Any Device

The New Flowdock works wonderfully on touch-based devices regardless of their screen size. We seamlessly transcend between single and multi-pane designs dependending on the screen size of your device. This way, you have the same, beautiful experience both on handheld devices and on the desktop.

Complete Redesign

The New Flowdock has been completely redesigned and rewritten. It is beautiful, inside and out. The new slender interface emphasizes the content and adapts to its users’ needs without abandoning a sense of familiarity. All essential controls and content are directly available but never in the way.

On the inside is a Backbone app with delicious Bacon.js sprinkled on top, completely written in CoffeeScript.

Private Messages & Tabbing

Finally here. Private messaging has been added to make Flowdock completely cover all your needs as a full-fledged group chat software. We’ve also added built-in tabbing to make it easier to work in multiple teams and switch contexts when needed.

As always, feedback is very welcome!

How MaestroDev Delivers Enterprise-Grade DevOps Orchestration Tools With Flowdock

November 15th, 2012

Mikael Roos

Brett Porter

This is a guest blog post written by Brett Porter, CTO of MaestroDev, who develop DevOps orchestration tools. In this article, Brett lays out how they’ve used Flowdock as a main communication tool with distributed teams and integrated Flowdock directly into their own products.

MaestroDev is a proud Flowdock customer. Since we began using it early in the year, we have greatly improved the internal visibility of development progress, and streamlined our methods of communication – reducing the number of redundant calls and emails.

The MaestroDev product development team is globally distributed, covering 4 different timezones. Our Flowdock flow is active 24 hours a day with development information and tagged updates for each other. Whether they work face to face, or remotely, Flowdock puts all of our team members on an equal footing, catching up on important discussions as they start their day, and leaving notes about progress for team members whom they may not otherwise be able to meet with immediately.

About Maestro

We have developed Maestro, our enterprise-grade DevOps Orchestration engine, to help enable all members of a software delivery team to be more efficient and collaborative. Maestro introduces Compositions, a reusable definition of a sequence of tools, processes and infrastructure that can be automated and interacted with. Compositions encapsulate best practices and encourage consistency across projects, reducing ramp up time and silos of expertise about infrastructure. Maestro is built to take advantage of modern public and private cloud technology to dynamically scale build, test and deployment infrastructure. This reduces friction between development, QA and operations team members and reduces the wait time for necessary infrastructure. Finally, Compositions and their execution output provide a single source of truth and history about a variety of systems, where team members can keep up to date, participate in decision points, and gather feedback from integrated tools to determine future improvements.

Integrating Flowdock and Maestro for Delivery Visibility

As you can see, Flowdock complements Maestro as a dedicated information flow for communication, notifications and actions. For this reason, we have developed Flowdock integration for Maestro and incorporated it into our delivery workflows.

You can read more about the Maestro Flowdock integration in the Maestro Documentation Guides, and at the plugin’s GitHub project page.

Maestro has integration for a number of different tools available, and at MaestroDev some that we use are:

  • JIRA: issue tracking and sprint planning
  • GitHub: source control
  • Jenkins: continuous integration and automated builds
  • Apache Archiva: build artifact management
  • Vagrant and VirtualBox: virtual machine for testing and delivery
  • Puppet: infrastructure configuration management

With these tools orchestrated by Maestro and information streaming to Flowdock, we’re able to track a change from a JIRA ticket and a commit, through its deployment on a preview instance, automated functional tests and a complete candidate virtual machine image for distribution.

Our primary automated workflow looks like this:

  • A commit at GitHub triggers a notification to Flowdock, and triggers a Composition to start the rest of the process
  • Maestro ensures a suitable Jenkins job is executed to build the project and publish to the artifact repository.
  • Flowdock is notified in the event of success (showing the published RPM version and build number) or failure (showing the full output and error that occurred)
  • If it was successful, Maestro concurrently starts Compositions to update the preview instance, and run functional tests
  • For the preview instance, we update the RPM version in the Puppet manifest, and trigger a Puppet agent run on the host. Puppet reports back to Flowdock when it is complete, and we know the preview instance is updated with the change
  • For functional tests, a virtual machine is started with Vagrant, provisioned with Puppet, and then tests are run via Jenkins using Cucumber and Capybara. If any fail, a notification is sent to the main Flow.
  • If the functional tests are successful, then a new virtual machine is produced and a notification sent to the main Flow.

Of course, we have many other such Compositions for sequences including releases, building and deploying Puppet modules, publishing promoted VMs to Amazon S3, and so on – all similarly integrated with Flowdock.

If you’re interested in trying Maestro out for yourself, contact us and we’ll set you up with an evaluation system and several similar pre-configured examples.

Flowdock has become the first thing I check in the morning, and one of the most useful tools I turn to throughout the day to find out what is happening, discuss a solution with a colleague, or just share a link to something fun and interesting. Our thanks go to the Flowdock team for a great product!

Import Your Grove.io Account Into Flowdock

September 27th, 2012

Mikael Roos

Flowdock as an alternative to Grove or IRC

Grove.io, a hosted IRC service, is shutting down on October 13th. As you may know, Flowdock is fully operational via any IRC client and thus works as a fairly direct replacement.

The importer, it’s easy to use. The whole process should take only a few minutes:

  1. Sign Up to Flowdock
  2. Logged in to Flowdock, go to the Grove.io importer
  3. Input your Grove.io credentials and follow the instructions, only the channels you select will be imported as Flowdock flows.
  4. Check out How To Use Flowdock With An IRC Client.

You’ll receive e-mail notifications once the imports have been completed (should be very quick). And that’s it, you’re back in business. You’ll have 30 days to see if Flowdock works for you, before you need to pick up one of our plans.

Flowdock As Onboarding Tool

August 23rd, 2012

Mikael Roos

Krista Kauppinen

This is a guest blog post written by Krista Kauppinen who recently started as Head of Online Marketing at Holvi, a customer of ours. She explains how Flowdock has helped her get started at her new job.

I recently started as the second nontechnical employee at Holvi, an online banking service startup that was founded in 2011. Our company is growing, but we still have everyone on the same Flowdock flow. This has been an unexpected blessing for me.

I have a business degree and I work on marketing and customer acquisition. I don’t always understand the discussions our developers have on the flow, but I’m able to see what they’re talking about and it’s in writing (so I can google unfamiliar terms!). Being able to easily get a technical perspective on customer questions and feedback by forwarding emails to Flowdock means I’ve been able to do customer support from almost day 1.

Flowdock has also been great for better understanding the pace of technical development and the relative difficulty of implementing new features and bug fixes. The team inbox that brings in data from Twitter, Zendesk and reports from our product, gives a good overall view of where we are in terms of progress.

Our team uses tagging actively, so I’ve been able to search tags like #todo, #blog or #marketing to see what’s previously been discussed on different topics. Not having to pop into the other room to ask questions and interrupt people’s workflow or send an email to whoever I suspect might know about issue X has made joining the team a lot smoother.

An added bonus of using Flowdock is seeing when my co-workers are online, as startup founders and developers often work odd hours. This has been useful for understanding their work patterns better. We have our security advisor as part of the flow, giving his point of view on what we discuss. Security is a very important aspect of building a banking product, and without Flowdock, getting information about this would be a lot more time consuming.

We also use Flowdock to share various types of benchmarking data, relevant articles, ideas we have, customer development insights and even jokes. This has helped me get to the know the company and my coworkers faster than at many previous jobs and with less effort from the others to get my caught up.

Thank you Flowdock!