Quantcast
Channel: Streak Blog
Viewing all 125 articles
Browse latest View live

Moving Boxes between Pipelines

$
0
0
Since first launching Streak we've had tons of requests to be able to move a box from one pipeline to another. We've been testing it for a while and just launched it to all users.

Moving boxes between pipelines is really useful if you have more than one pipeline where you manage the same customer. With the ability to move boxes you can now start a customer of in a sales pipeline and once you close the deal, you can move the customer to a support pipeline.


To move a box or many boxes, simply goto the pipeline where the boxes currently are, select them with the checkboxes and find the "Move to new Pipeline" menu in the "More" drop down.

This will move the box, along with any emails, comments, files, reminders and newsfeed items that are inside the box. One thing to be careful about is that if the new pipeline doesn't have the same custom columns that the old one does, you will lose that data. If a column exists in both old and new then it will get moved over just fine. 

Working With Gmail's New Compose

$
0
0
Today we launched an updated version of Streak that brings us to full compatibility with Gmail's new compose feature that is being rolled out. Gmail's new compose is great and we're really proud of our integration.

Here's Gmail's new compose window without Streak


and here's the compose window with Streak


You'll see that we've added three new buttons at the bottom after the send button. These correspond to Send Later, Boxes and Snippets.

Send Later lets you schedule emails to be sent at a specific time. Outside of changing up the icon to make the button better integrated with the compose window, we've also made some slight tweaks to the feedback you get when you have a Send Later scheduled. Previously, once you scheduled a send later the compose window would disappear and you'd have to head back to your drafts to find it. With the new system we keep the compose window open and let you continue modifying the email as you see fit. Here's what it looks like when you have a send later scheduled.



The Boxes button gives you the ability to file the new email that you're sending out to a new or existing box. This is really convenient so you don't have to go hunting in your sent mail folder and file emails from there. The major change we made here is how we render the box view when a compose window has a box associated with it. We spent a lot of time figuring out the best approach and we think you'll like what we came up with.


You'll see that we embed the box information in the compose window itself so we don't take up extra valuable screen real estate. Now, we recognize that this can make the compose window itself a little cramped, especially if you want to go back and continue writing/editing a long email. That's why we added the ability to show and hide the box information with that arrow icon in the top right.

Snippets is the last feature we have on the compose window and the functionality here is essentially the exact same as before. Clicking on the button lets you choose a snippet to insert, or you can get access to the snippet management window, or create a new snippet.


Keyboard controls

We're big keyboard shortcut users internally at Streak so we made sure that our integration with Gmail's new compose is fully keyboard shortcut enabled. Interacting with the buttons is handled how you'd expect as we insert ourselves into the natural order of tabbing. When a button is selected enter or space will open that button with the menus being fully keyboard enabled.

The one shortcut that would be difficult to discover on your own is getting in and out of the box information panel when a compose is associated with a box. To get into the box panel, first have one of the bottom toolbars (send, send later, boxes or snippets) have focus - but not active. Then press the "b" key. That'll bring you over to the box pane where you can change the box stage, fill out the notes and enter in extra data all with your keyboard. To get out of the box pane back to the editor simply press the escape key.

Last thoughts

As always to get the latest version of Streak simply refresh your Gmail tab.

If you're not in the preview yet, don't worry, all the existing integrations work unchanged. If you're on Gmail's new compose try out the new integrations and let us know what you think!

How to Detect DOM Changes in CSS

$
0
0
This post is for the developers out there and is quite heavy on technical details. While integrating with Gmail's new compose window we ran into the issue of detecting when a compose window was open or closed. If you have Streak installed and are using the new Gmail compose you'll notice that the controls get inserted pretty much instantly - this post is about how we accomplish that.

Traditionally the two classical methods for detecting DOM changes are 1) using a timer, or 2) binding on the DOM mutation events.

Both methods suck.

Using a timer sucks because you have a fundamental tradeoff between performance and responsiveness. Responsiveness is defined as the time it takes for the Streak controls to appear when a new compose window is created. A short timer interval gives high responsiveness but that consumes a non-trivial amount of cycles (of which there are already few) and a large interval isn't responsive.

DOM mutation events suck because there's a huge performance penalty on them and they're being deprecated from browsers in the near future.

Enter CSS.

David Walsh wrote a blog post on detecting DOM node insertions using CSS. The high level overview is that you define an animation (with a very low performance cost) and give it a unique name. You then apply that animation to the DOM node selector you're interested in. Attach a document level binding on animation complete and the event callback not only tells you which animation finished (so you can switch case on the ones you're interested in) but also gives you the node you're looking for!

While the blog post specifies the technique for detecting insertions, we realized that this technique can be generalized to send an event whenever the DOM hits a particular state that you're interested in. By carefully creating your CSS selectors and making judicial use of nth-child and nth-last-child you can know whenever a specific kind of node is inserted or removed. For removal there's an extra bit of javascript that's required to determine which node is removed, but it's not that big of a deal.

What we implemented specifically for the Gmail compose windows were two selectors and two animations which you can see here:


As you can see there are two animations, and two style definitions, one for an odd number of compose windows, and one for an even number of compose windows. Notice how the clip goes from 0->1 for odds and 1->0 for evens. This way every time the number of compose windows changes a new event fires. We can do things this way since in Gmail you create or destroy a compose window one at a time.

If you have other cool and useful techniques then please share!

Or, if you're looking to work and hack on other cool technical challenges like this then check out our jobs page as we're always looking for talented developers.

Introducing Realtime Collaboration in Streak

$
0
0
Today we wanted to share a feature we've been working on for a while that allows teams to collaborate more seamlessly. Just like in Google Docs, when you make changes to Streak data it shows up instantaneously for other users who are looking at the same pipeline.

Up until now, to see changes made to your data by other users or see a new pipeline shared with you, you had to do manual refreshes. To enable this realtime collaboration, you don't need to do anything except refresh Gmail. You can start editing data in Streak and see the updates flow to other users and even any other browser tabs you have open.

We're continually improving this functionality so look for updates that show the presence of other users within your pipeline view.




Implementing Realtime in Streak Using the AppEngine Channel API

$
0
0
This is another post for the developers out there that are curious as to how we implemented realtime collaboration in Streak. Implementing this feature in Streak had some unique challenges since we are an extension running on top of Gmail - a bit different than your usual app.

First thing to do is creating the communication framework itself. You can use sockets, polling, etc. Fortunately we didn't have to worry about any of that as we've had a team of some very smart Google engineers working on this very problem. Enter the Channel API. With the Channel API getting up and running on both the client and the server is pretty straightforward. Usually.

Streak exists as an extension and is inside of Gmail; a very complex environment. The main issue is that you can only have one Channel on a page at one time. The Channel API uses the same infrastructure as Google Chat which means that the one Channel is already being used up. Even if GChat wasn't using the Channel tech, we wouldn't want to embed our channel in the main Gmail context since another extension may want to use Channel tech which would cause collisions.

Question: Where can our Channel connection exist?
Answer: The extension's background page

Every extension has a background page which is a full DOM object that can be manipulated like any other page. We can add the Channel script to the background page, set it up with the proper token and voìla we have realtime. One problem. There's only one background page for the extension and you can have multiple Gmail tabs/windows open at once.

We resolved this by using iframes. Whenever our system initializes and wants to create a new realtime connection with the server, we create a new iframe inside the background page. Since the iframe exists on the same domain as the background page we can manipulate it from the outside, so we then embed the Channel javascript inside the iframe and then get access to the resulting Channel object. It sounds crazy and it is.

Astute readers may notice that since the background page is persistent we have to make sure to clean up the iframes and connections when the corresponding Gmail tab is closed or navigated away from. Rest assured that we do this.

The technique works great in both production and development environments, and it even works well in Safari...

Turning Emails Into Tasks

$
0
0
We recently added a new feature to Streak that lets you mark emails as tasks, and then mark those email tasks as being done.

The way it works is that when an email is filed in a box there's a little "Make Task" link that starts showing up where the email is found.

Here it is in the thread view beside the email subject

and here in the box view


and when you're composing a new email


Not every email in a box should be a task so that's why we designed the feature so that you had to explicitly mark emails as tasks. This is really nice because now you can go to the box view and see which emails are tasks, and out of those tasks which ones still have to be done.

We've been using the tasks here at Streak for the past few days and have found they've made a surprisingly large impact. We think you'll feel the same. Try it out and let us know what you think.

Announcing Safari Support

$
0
0
We're happy to announce that you can now use Streak with Safari.

If you're running Safari, or someone on your team does, tell them to head over to Streak.com and click on the "Install Streak" button. That will download the extension and prompt them to install it.


The extension itself is identical to the Chrome version and if you use both Chrome and Safari then all the data will be properly synched and accessible on both.

Try it out and let us know what you think.

How to build a Safari Extension using the command line

$
0
0
The following post is very technical and intended for developers.

While building the Streak Safari extension, I was finding it difficult to integrate the building of the extension into our build process. Building Streak and its associated extensions is all done using various shell scripts but Apple's instructions for building Safari extensions requires you to startup Safari and build the extension in the GUI.

I was unable to find a complete step-by-step instruction on how to programmatically build Safari extensions, so I'm writing this post so others can see. This guide is for people running OS X.

1. Install latest version of Safari

2. Download a patched version of the eXtensible ARchiver (xar) utility
3. download this shell script and run it in the directory you download the xar archive in. The first argument to the script is the directory you want to install the xar bin to (you'll use this directory later).

Now we need to generate our signing certificates

4. Register with Apple's developer program

5. Create and download your Safari Extension Certificate

6. Create and sign your Safari extension manually with the built-in Safari Extension builder

7. In the command line where you just created the safariextz file type:
mkdir certs
path/to/xar -f filename.safariextz --extract-certs certs
8. Copy [cert01, cert02] files from the certs directory into the location where your build script will be running

9. Go to Keychain Access and right-click on your certificate and choose Export.  

10. Export your certificate in p12 format, just put in blank when it asks for the password

11. In the command line in the directory where the p12 file exists, input these commands:
openssl pkcs12 -in Certificates.p12 -nodes | openssl x509 -outform der -out cert.der
openssl pkcs12 -in Certificates.p12 -nodes | openssl rsa -out key.pem
12. Copy the cert.der and key.pem files into the location where your build script will be running

13. Your directory should now have the following files:
  • cert.der
  • cert01
  • cert02
  • key.pem
14. In that directory type
openssl dgst -sign key.pem -binary < key.pem | wc -c size.txt
15. Now for the build script itself, each project will be different, but the first part of your build script should get all the files necessary for the Safari extension into a folder with a .safariextension. So ours is Streak.safariextension. Don't include your certificate files in the safariextension folder, they should exist outside of the folder.

16. Copy and modify this gist to get the part of the script that will generate and sign the compressed Safari extension file.

17. Profit! You should now be able to build your Safari extension from the command line.

The great thing too is that you can checkin your cert files into your source control and other developers will be able to compile the extension as well - without generating their own certs. Just make sure they have the xar utility installed.

Special thanks goes to mackyle for patching the xar utility to make this all possible!

More data in your pipelines

$
0
0
Have you ever wanted to sort your pipelines based on the last time the boxes were updated? Or filter the boxes in your pipeline to just those that have file attachments?

We've heard many similar use cases from users and we've built "System Columns" to help solve them. System columns are columns that Streak fills in automatically with data about your boxes. Here are some examples:


The data in these columns is automatically updated as the box changes. They behave like any other column in that you can filter, sort, group by, reorder, hide, etc. They're also shared to other users of your pipeline like other columns.

One great use case is to sort your boxes in ascending order based on the date of the last email. That way you can see which boxes have been inactive and need to be followed up on. 

Have other data you'd like displayed as a column? Let us know at support@streak.com or on Twitter @streak

Notifications When a Box is Assigned To You

$
0
0
We've now added the ability to notify a person when a box gets assigned to them. They'll get an email and a chat notification (that's new too!) and be following the box automatically - that means any subsequent changes to the box will send out a notification. This makes it all extremely easy to keep a team organized and coordinated.

Setting it up

When you create new pipelines, they'll have the new Assigned To column available to you automatically, so you should be good to go right away.

For existing pipelines, you'll need to add the new Assigned To column manually (see the screenshot below). If you already have a column you've been using to assign stuff  to people you'll need to copy over the data. Let us know at support@streak.com if you need any help. 



Managing Notifications

This new Assigned To system does produce notifications. We've added the ability to manage which notifications you want to get - simply goto your settings in Gmail and click on the "Streak Settings" tab. From there you'll have total control over what notifications you want and how they'll be delivered. Look for more notification types in the future like mobile push notifications and text messages. 




Get Notified of Everything

For those data junkies out there we've added the ability to get notified of a change to any box that you have access to - not just the ones you're following. By default this is turned off since that will result in A LOT of notifications, but you can change that in the settings menu.

Chat Notifications

We've now enabled Google Chat notifications alongside emails. You may have already noticed a new contact asking for permission, it'll be streak@mailfoogae.appspot.com. If you give permission to that account then you'll start receiving chat notifications.

    Moving Ahead

    Notifications when you get assigned to something, better control over your notifications and what kind you get are all about making using Streak as easy and seamless as possible. Now that we've laid a lot of foundational work for this Assigned To we have some really exciting things planned for the future - including a global view of all boxes assigned to you.

    So check it out and let us know what you think.

    Streak + Zapier = Awesome

    $
    0
    0
    Everyday we get various requests from people asking for various integrations with the different services they use. Whether it's pushing data to Google Spreadsheets, or having information from a web form enter Streak directly. Fortunately, there's an awesome service called Zapier which does a lot of the heavy lifting when trying to connect a bunch of services together.

    With Zapier you can now can get data into and out of Streak from over 150 services.

    Here are some of the things you can now do with Streak + Zapier:

    • Create a Streak box every time someone fills out a Wufoo form
    • Create a Streak box every time a new Gmail message comes in matching a certain criteria (i.e. from a certain person)
    • Send an email or a Google Talk message whenever a new Box has been created
    • Push Streak Box data to Google Spreadsheets

    Give it a try and let us know what your favorite use cases are for Streak + Zapier!!!

    How We Implemented Find-On-Page With Infinite Scroll

    $
    0
    0


    Within Streak (a CRM built into Gmail), our main view is a giant table of all your leads (or boxes as we call them). We never wanted a user to have to page through this, instead we wanted them to be able to just scroll their entire list (they can filter if they want).

    In a previous technical post we demonstrated how we could create a table that was performant even while displaying hundreds of thousands of rows. The main idea was you only render a subset of the table on screen at any given time. Then when the user scrolls we adjust what rows are visible on screen and move them around.

    This brings up another interesting problem - if the entire table isn't actually on the page, how does a user perform a CTRL/CMD+F to bring up a search box and jump between the different results. The built in browser 'Find" function just wouldn't work.

    What follows is a technical discussion on how we made it happen.

    Most webpages don’t need to implement their own form of search in a page as the browser handles that for you. However, the way our table view works we only actually render the rows that you see and simply reuse those rows and change their contents. This means that the browser find-in-page won’t work since the box contents you’re looking for won’t actually be on the page.

    To understand how we implemented our solution you first have to get a broader overview of the way the spreadsheet is implemented.

    From the diagram you can see that we used a Model-View-Controller-ish approach. The actual HTML renderers are the searchBoxView and spreadsheetView javascript files. These have references to the corresponding controllers and models. 

    To understand how the system works I’ll run through a very simple use case: clicking on a cell to make it active.

    1. click event gets handled by the spreadsheetView
    2. spreadsheetView extracts the row and column information encoded in the cell’s HTML attributes
    3. spreadsheetView calls a function into the spreadsheetController saying “activate the cell at this coordinate”
    4. spreadsheetController updates the virtualCursorModel to set the cursor position to the active cell coordinate
    5. virtualCursorModel emits an event that something has changed
    6. spreadsheetView handles the cursor event and updates the cursor position/rendering
    7. spreadsheetController calls activate on the spreadsheetModel
    8. spreadsheetModel does whatever “activate” means for that coordinate position, and when finished emits an event that something has changed
    9. spreadsheetView handles the event from spreadsheetModel and updates the table rendering accordingly 
    10. when spreadsheetView is rendering the visible cells it asks both virtualCursorModel and spreadsheetModel what are the contents and state of this cell

    Previously we didn’t have a fleshed out cursor data structure, so adding the virtualCursorModel class introduced steps 4,5,6 and modifies step 10. While the update and render loop gets a bit more complicated it also makes for a fantastically versatile system that let us implement search in an elegant way, and support other features in the future.

    When you kick off a search, here are the steps:

    1. searchBoxView gets keypress event and gets current input text
    2. calls new search into searchController
    3. searchController iterates through the data of the spreadsheet adding matching coordinates to the result set
    4. searchController updates “highlighted” coordinate set in the virtualCursorModel
    5. virtualCursorModel updates its set of cursor information and emits updated event
    6. spreadsheetView handles cursor updated event and updates the rendered HTML

    This design will allow us to later do things like highlight what other users viewing the pipeline are focusing on at the moment. The idea being that cells and the virtual cursor(s) are mostly dumb elements that get updated by other smarter components.

    Hopefully you will find this feature helpful, let us know how it performs.

    Adding Files to your Boxes using Google Drive

    $
    0
    0


    Putting files in boxes makes it easy to keep everyone involved with a box or pipeline on the same page and able to read (and edit) the same files.  We recently added the ability to add files from Google Docs to your boxes.  We've also made it easy to upload any files you may not already have in Google Docs.  Together with the email attachments Streak already adds in your boxes, that's quite a few ways to get files into boxes!  To use the new features, just open an existing box and click the "Add Drive Files" button.



    Adding Google Docs Files

    You'll have the opportunity to add any of your files from Google Docs or Google Drive directly to the box.





    When adding files to a box, you have the opportunity to share the file with other box users by checking "Share files to all users on pipeline" at the bottom of the file picker shown above. This will share (view and edit) the files you've selected with all the users who have access to that pipeline. Sharing files can be a great way to allow users on your pipeline easy access to Google Docs files.

    Adding Other Files

    If you want to share files on your computer, select the "Upload" option on the left-hand side of the file picker.  This will allow you to add your existing files to Google Drive.  You'll immediately be able to add the uploaded file to your box.



    Want even tighter integrations with Google Drive, like adding a file to a box from Google Drive? Let us know at support@streak.com.

    Get Streak for Your Entire Organization

    $
    0
    0
    Up until now, if you wanted your whole organization to get onboard with Streak, you had to get each user to install our chrome extension by going to streak.com. As of a recent Google launch, its become incredibly easy to deploy Streak to your entire Google Apps domain.

    Here's how you can setup your entire org in 2 minutes:


    1. Log into the admin dashboard at http://google.com/a/yourdomainhere.com
    2. Click on Settings, then Chrome
    3. Then click on Manage Pre-Installed Apps
    4. Then choose the Chrome Web Store and search for Streak and click on Add





    What will this do? It will install the extension to all of your users Chrome browsers. All they have to do is sign into Chrome with their Google Apps account and Streak will be pre-installed for them and ready to go.


    For more detailed instructions see the Google help article: http://support.google.com/chrome/a/bin/answer.py?hl=en&answer=1375694&topic=2935995&ctx=topic

    So if you're an administrator on your domain and like Streak, deploy it to your entire org!

    Tips for Power Users: Pipeline editing

    $
    0
    0
    Are you a power Streak user? Here are a few tips to make editing complex pipelines a little easier.

    Full Screen Mode:

    We've added a feature to let you edit your pipeline in full screen mode. This will make your pipeline take the entire browser window. You can even full screen your browser for even more pipeline real estate.



    Hiding the Newsfeed and Pipeline Colors

    We've also added the ability to hide unwanted sections from your pipeline to give you a little bit more room if you need it. You can show/hide the colored stages of your pipeline as well as the Newsfeed. Both of these buttons are located right next to the full screen button.

    Bonus tip: The dropdown for the Newsfeed button helps you customize whether you want to see only important events or all of them.

    Finding Data in a Pipeline:

    If you have a large pipeline and want to find data quickly, using Ctrl-F (or Cmd-F on a Mac)  will highlight all the matching cells in the pipeline. Really handy for finding obscure boxes in big pipelines.


    Enjoy!

    How We Built an Extensible Tour System for Streak

    $
    0
    0
    Streak is a process management tool that helps you manage a wide variety of processes and workflows such as Sales, Hiring, Bug Fixing, etc. This flexibility is both a blessing and a curse since it can do almost anything, but people aren't sure where to start. To help alleviate this issue and ease people into using Streak we've launched a new in-app tour system.

    When designing our tour it became apparent that getting it "right" would be near impossible without serious trial and error. Traditional approaches for tours involve coding javascript with explicit calls or embedding special tags in your HTML - this makes trying different variations of a tour overly arduous. We needed to come up with something that would let us create different tour variations quickly and easily and even let us do A/B tests with vastly different tours.

    The Tour Book

    The key breakthrough was to move away from designing the tour through HTML tags or straight javascript code and instead encoding the tour in a JSON configuration file. At a high level we like to think of the tour system as an interactive book, users can flip through pages, going through chapters, sometimes going back or even skipping ahead. In this analogy, each page of our tour book refers to a single tip or piece of help that we are pointing out to a user. Here's an example of a page in our tour:



    The above is an example of a page. The chapter in this case would be the set of Pages that explains the various parts of this entire view.

    By writing the tour as a JSON file it makes it trivial to change up not only wording,  but the entire flow of a tour through our app.


    Here's some key terminology:
    • The JSON file is called a Tour Book
    • A Tour Book is composed of Chapters
    • A Chapter is a set of Pages and optional Triggers
    • A Trigger is a boolean expression that determines when a chapter is run
    • A Page is a set of Items
    • An Item is either a Widget or Function


    Widgets: we have a standard set of widgets that are the kind of different visual elements you've seen before. Modals, tooltips, highlight, and overlays. In the Tour Book you can specify the title and contents of the widget alongside what buttons show up and what they do.

    Functions: used to execute custom functionality as required by the tour designer. i.e. when a user first signs up for Streak we present them with a page to select what pipeline template they'd like to start with, this isn't a standard widget but instead a custom function that is called.

    How a Tour Is Run

    We have our Tour Book, and we have our widgets, but how does the tour actually get executed and started?


    Here's what's happening in the diagram:

    • when the user makes their first request to the server we assign a random Tour Book to that user in this case it's MyTourBook.json
    • the Tour Book gets downloaded and passed to the tourRunner class
    • the tourRunner class parses the Tour Book and searches for any chapter triggers and also gets the associated Tour Functions file for this Tour Book which in this case is MyTourFunctions 
    • when a trigger in the Tour Book evaluates to true, the tourRunner instantiates the Tour Functions class passing in the Tour Book to the constructor
    • the Tour Functions starts the respective chapter and displays the first page
    • when the user clicks "next" the Tour Functions class automatically loads up the next page defined in the Tour Book
    • this continues until the tour is complete or the user stops the tour early

        Technical Nitty Gritties

        Outside of the overall architecture there were a few fun technical challenges that we ran into.

        JSON Boolean Logic - we wanted the triggers that start a chapter to be totally flexible meaning they had to support essentially any boolean expression. It was an interesting challenge to figure out a way to express an arbitrary boolean expression in JSON alongside a simple evaluator. We ended up going with a prefix pattern which is essentially a readily-made parse tree.

        Which then gets evaluated by the following recursive algorithm:

        There's definitely more elegant ways to express the boolean parameters in JSON so would be interested to see what people have implemented themselves.

        You may have noticed that there's a couple of raw strings in the boolean expressions in the JSON  above, those are actually function names. This takes us to the next little nitty gritty...

        Function References - as part of the Tour Book definition it specifies a Tour Functions class, this Tour Functions class is the context in which the Tour Book is actually executed - in the above example we defined a class called MyTourFunctions. What this means is that the Tour Book can reference functions by name that are defined in the MyTourFunctions javascript class.

        Function Wrappers - One of the other cool things about the Function References is that all the functions are automatically wrapped with extra event logging code. As a tour designer when you implement a function in your Tour Functions file you don't need to add any basic event tracking.

        Moving Forward

        The tour system has been in development for a little while but we're just getting started. We'll be constantly iterating on our first run experience to make it better for new users and are excited to share the learnings we get with fast experimentation.

        The other great thing is that the infrastructure lets us do a couple of key things moving forward:
        1. Better in-app help - instead of static documentation that gets quickly out of date we can use the in-app tour system to guide you through explicit steps to accomplish certain tasks. We can use the same infrastructure of tours to let users selectively view certain chapters that they need help with.
        2. Deeper/longer term feature tours - in addition to the first-run experience we can trickle out exposure and tours to users as they get more familiar with the system. We can have triggers that show up after days, weeks or months, or after a user has hit certain milestones and think they're ready to start using the advanced features.

        Using Streak to Stay On Top Of Your Important Deals

        $
        0
        0
        Keeping your leads and prospects warm is an essential part of an effective sales process. Last week we released an update to Streak that will make sure you're always reminded of the important leads that you haven't touched in a while so you can make sure they never go cold.

        The great thing about this feature in Streak is that once you set it up once you'll get reminded automatically without having to manually add reminders for each lead.

        This blog post will be a quick guide on how to set this up.

        First I'll start with the normal view of our example Sales Pipeline.
        The first thing that I want to do is see which of these deals I haven't exchanged an email with for a while. To do that I'll create a filter using the new filter interface.

        First, click on the Filters button in the top toolbar, that opens up the Filters interface above the table

        The new Filters interface lets you construct any combination of conditions to achieve essentially any set of boxes that you'd like. As I said above I want to only show boxes where there hasn't been an email exchanged in over 7 days, so first thing is to choose the correct field. I do this by clicking "Choose Column"


        There are many fields I can filter on including the custom columns I've added, or one of the many built-in fields that Streak provides for me. In this case I'm going to filter on "Date of Last Email".

        Next I'll choose the Comparison operation. In this case it's going to be "Before"

        And I want that to limit the filter to boxes where the last time I exchanged an email was more than 7 days ago. So that's what I'm going to choose for the value:
        Now my filter will look like this:

        And just have to click "Apply" to activate the filter. Now I see that there are just a few boxes.
        so I can go in and send an email to those people.

        While I don't have anybody in the Closed-Won and Closed Lost stages right now I might, but I still don't want them to show up for contacting. So what I'll do for them is add some extra conditions to my filter so the boxes in those two stages get filtered out as well.

        I do this by clicking on the Edit Filters link and modifying the filters to look like this:


        The next great that to do is leverage the fact that Streak is in my inbox - I want to see my cooling deals right in my inbox so I can act on them whenever they pop up without having to go to the pipeline first. To do that I'll use the Heads Up feature of Streak. 



        So now, whenever I go to my inbox I'll see the deals that I haven't given attention to, and then take appropriate action.

        As with all things in Streak we've made setting up these filters and Heads Up extremely flexible so you can set things up however you'd like.

        Try it out and let us know what you think, thanks!

        How Streak uses Streak to track bugs!

        $
        0
        0
        As a start-up or established organization, every product development process has bugs which can be 
        detrimental to your business if not tracked and managed. Here at Streak, we track and manage our bugs using Streak itself.

        Let’s talk about current bug tracking solutions. They are really good at storing structured information about bugs (priority, who it’s assigned to, what component, etc.) and letting you query it. But, its usually a pain to discuss the bug with colleagues and customers. So, people revert down to email when triaging, discussing solutions and during the implementation phase. All of a sudden you have a bunch of bugs in your bug tracking system and bunch of emails that discuss them and no central place where all the data lives.

        We track our bugs in Streak because:
        • We only need to use one application- Yes, that’s right. We no longer need to switch between email conversations about bugs, and a different bug tracking system. All the emails relating to the bug and all the structured info about the bugs are both inside Gmail.
        •  We file bugs so easily  - You can file a bug by sending a simple email (don’t believe us? try it!)
        • Our team is always coordinated on the status of each bug - You can share a pipeline of bugs, assign owners, and create customized saved views that indicate which bugs haven't been worked on. Also, you can stop worrying about cc’ing the right folks on emails - everyone has access to email conversations specific to each bug.

        Here’s how we do it: Every time we find a bug, we send an email to our entire team describing the bug. While sending the email, Streak lets us file the email as a bug and put it into the Bug Tracking pipeline (see below). Now, every email conversation about the bug shows the structured metadata about the bug - who it’s assigned to, its stage, and other associated emails! All in one place and without installing a new application.

        Here is how you can get your team tracking bugs effectively in Streak in under 2 minutes! If anything is unclear, just shoot us an email (support@streak.com) or chat with us live - we're always happy to help.

        Step 1: Setting up the pipeline

        To create a bug tracking pipeline, hit "Create New Pipeline"
          
        Hit "Bug Tracking"
        Now, you’ll have a pipeline with some built in columns. You can add more and customize them as you wish based on your company's process.

        Step 2: Share your bug pipeline with all those who you want to view and edit the bugs

        Click on the “Share” button, and enter in email addresses that can have access to your newly created pipeline. You’d typically share your pipeline with the entire dev team so everyone can see it.


        Now, you can add email addresses you’d like to share the pipeline with, or add your entire organization. Then, hit the “Add” button.
         
        Step 3: Create bug boxes to track your bugs

        In streak, everything is a box. In the case where you are using Streak for bug tracking, a box = a bug. This corresponds to a row in the table below.

        There are two ways to do this:
         1. Create boxes when you have a new bugwithin the "Bug tracking"  pipeline
                 From the pipeline view, create a new box
               
        We put notes on the bug, how to reproduce it, and most importantly, we always assign it to an owner! Now it’s a box in your shared Bug tracking pipeline.

        2. Another way to file bugs is to do what our dev team does - send an email to their team identifying the bug and tag it to the "Bug tracking" pipeline

        We create an email and create a new box, giving it a new name or a suggested name  
        We put the new box inside of our "Bugs Tracking" pipeline
         
        We put in notes on the bug and assign it to an owner and hit send!
         

        Power User Tip #1: Easily manage bugs that are assigned to you
        Our dev team always wants to stay on-top of bugs that are assigned to them. To do that, they create saved view filters that show only bugs that they are responsible for.

        To do this, click on the pipeline name from where you want a customized view - in this case, open Bug Tracking    
        Now, let's filter for a view that you want - in our case, we want to filter for all bugs that are assigned to someone on our dev team, Nikola. Click on "Create Saved View".
        Nikola would add a filter for bugs that are assigned to her, and sort them in order of priority.
         
        Hit apply. Now, Nikola will only see bugs that are assigned to to her, in order of priority.  Hit Save as View.


        Set the name of the new view (ie. “My Bugs”) and hit “Done”. Now, this is a constant view, which can be found in the left sidebar under "Bugs Tracking" pipeline. 


        Power User Tip #2: Creating automated saved views pop ups in your inbox
        Our dev team creates saved views (Power User Tip #1 above) right in their inbox.  No need to filter through your pipeline or check another pipeline. Create a saved view, and then tick “Show in Inbox”
        Now, all bugs assigned to Nikola will show in her inbox, so she’s knows exactly what to start working on when she opens her inbox.

        We also have a dedicated post on how to used saved views.

        Power User Tip #3: Follow Boxes and receive notifications
        Often, our dev team works jointly to fix bugs. So, they want to know the status of bugs, and sometimes want to notify others when any changes are made to the bug.

        To do this, open the box view and click “Follow Box”

        That’s it! Now you’ll receive notifications when edits are made to this box.

        To customize the notifications you receive, go to your Gmail settings (can be found in by clicking on the gear button). You’ll see an icon for “Streak Settings”.
        Change the settings around to fit your preferences. This feature allows our dev team to stay up to date on particular bugs and ensures that other’s at Streak can check the status of bugs themselves!

        Step 4: Move bugs across your pipeline, until they are completed
        For our dev team to manage the multiple bugs they are working on, they indicate when they have moved the bug from the “Reported” stage to the “Working” stage.

        Now, those who the pipeline is shared with will see the new status of the bug. If a user is “following” the box, they’ll receive a notification which can be customized through Streak Setting (see Power User Tip #3).

        Give Streak a try to manage your bugs. Remember, you can always shoot us an email (support@streak.com) or chat with us live if you need some help!


        Using Saved Views to Organize Yourself

        $
        0
        0
        Need an easy way to know exactly what needs to be worked on every morning? Want an easy way to know when it is time to follow up with a candidate or a sales customer?


        A saved view will let you filter, sort and group your pipelines. These views are saved and shared amongst your team. For example, you might want to create a view for all stale leads that are still in the prospecting stage grouped by who those leads are assigned to. You can even have the resulting boxes show up at the top of your inbox so you don’t always have to check your pipelines. First, I’ll show you how to create a saved view. Then, we’ll go through scenarios where it may be useful to create saved views.


        To create a saved view, go to your pipeline and click on "Create Saved View”.

        You can now filter your pipeline down to just the boxes you care about. The first drop down dictates which column you should filter on and then next few drop downs determine how the column will be filtered. You can add additional filter criteria if you’d like by clicking the “+” button. Choose whether your results must satisfy both criteria, one of the criteria, or none.
        You can also sort the resulting boxes by any of the columns. To do this, click on “Advanced View Options (Sorting and Grouping)”


        Once you apply the settings, you’ll see the results of your view which you can then save. Anyone else shared on the pipeline will be able to see the views as well. These views can be accessed in the left side bar of gmail underneath each of your pipelines.
         
        You can also have views show up in your inbox. This eliminates a step for pipeline views you’d like to constantly see, by putting it right in your inbox! Once you have saved the view, you’ll see a tick box on the top right to "Show In Inbox". Click on it, and now you’ll see the view in your inbox.


        Using saved views as a reminder - Example on following up on customers
        A typical use of saved views is to remind you to take an action. For example, some users who use the sales/CRM pipeline always want to make sure that customers are moving through the pipeline quickly. Let’s say that you are interested in customers who haven’t moved stages in 30 days and that your sales pipeline has the columns below.
        You can create a view which filters for the date of last stage change to be greater than 30 days ago. You could also sort by this column so that the most stale leads appear first.


        Now, you can save this in your inbox. Anytime a customer hasn’t changed stages in over 30 days, it’ll pop-up in your inbox. Because these views are dynamic, as you change the data in the box all your views get updated automatically - even the ones in your inbox.

        Using saved views for bug tracking - Detailed Example


        If you have any questions, you can always chat with us live or email us at support@streak.com

        Streak Brings Mail Merge to Gmail

        $
        0
        0
        In Sales, Customer Support or any other pipeline you are managing, there are times when you want to send the same email to multiple people at once but have it customized for each person so that it's more personal. Existing solutions are either hard to use or lack the personal touch. Streak's new mail merge feature brings the power to send dozens of personalized emails from right inside of Gmail.

        In order to send out mass customized emails, you'll need a list of email addresses but also the data to customize each email - like the persons name, address or even the most recent product they bought. Thankfully - if you're a current Streak user, you already have this data in your Pipelines (sales or customer support or any other).

        If you're a new Streak user or just want to use the Mail Merge functionality, you can easily create a new pipeline and import the data from a CSV file. Here's some more help for getting started with Streak

        Below is a step by step guide to sending your first Mail Merge:

        Step 1: Getting Started

        Start composing a new email as usual and click on the 'Mail Merge' link.



        Step 2: Selecting a Streak Pipeline 

        Select a pipeline where you want to pull the data which will be used in the Mail Merge. Streak extracts the information from each of the rows you select and use it to customize each of the emails. 





        Step 3: Choosing Boxes and Emails

        Okay, now we are ready to extract useful information from rows inside your Streak Pipeline.

        Here you will use the checkboxes on the left to select which rows you would like to include in this Mail Merge. Any email associated with a Box will be extracted and be included as part of your Mail Merge. 

        In this example we decided to include anyone who has contacted us asking for an iPhone or iPad app. 


        Here you can also customize the type of emails to extract from Streak Boxes



        Step 4: Composing your Email

        On the left you can see all the email addresses we will be sending this email out to. By clicking details you can find out which Box they were extracted from. You can also remove any email addresses you did not wish to include:


        To customize your email you can use the bottom right menu to help guide you. Here you will find "Template Fields".

        For our example we decided on using the Name field of each of our rows and a contact's First Name / Given Name. As you can see on the left, you will be notified of any missing values for a given field. In this case it seems we do not have each contact's first name so we will have to fill those in by hand.


        To fix the above errors, you first click on the left side, for example on benf@gmail.com and you will see errors highlighted in red to your right. Clicking on these red highlights will let you type the value that should be associated with that field:


        Here is what it looks like when you are done:


         While filling in the missing fields, we also decided to customize the email going out to the users who requested an iPad app.


        As you can see if you modify the body of the email and not just the missing fields, that email will diverge and go away from the main template which you can easily "Restore" back:


        Here is an example of an email where everything went smoothly since we had a correct value for every field and we did not need to modify this email in any way:



        Step 5: Sending out the Emails

        Now simply click the Send button like you normally would when sending any email.



        Now the mail merge will start sending out emails. Streak makes use of the Gmail client to send emails which means that while the sending is in progress you can't refresh or close Gmail before the bottom right notice disappears. Other than that you can continue doing almost everything else as normal (for now you can't compose a new email or schedule another mail merge before the first finishes).




        One of the great things about this new Mail Merge feature is that the new emails are all added to their respective rows in your pipeline automatically.

        We've had this feature in limited testing for the past few days and it's already turning into one of the most useful features of Streak. Definitely give it a try and let us know what you think.
        Viewing all 125 articles
        Browse latest View live