Another Change To My Writing Workflow

Till not long ago kept all my drafts in one big posts’ drafts. It was a good way to log things I’ve learned, while preparing to share those learnings in this blog. Keep this huge file public, meant to encourage me to iterate on drafts and eventually turn them into posts.

In an earlier post I mentioned that this strategy didn’t work very well, as this draft file turned into a draft cemetery – whatever got into it, didn’t come out. I, therefore, changed my workflow, and implemented the WordPress scheduling feature. I found that writing a first draft, and setting a publish date 2 days or so into the future, is much more effective in keeping me focused finishing up posts, and eventually help me write more.

The only thing is that I need to write those drafts somewhere, and I still want those drafts to be online. Instead of going back to my old single draft file, I figured I can start drafts in separate files, categorize them as drafts and publish them into the future. But I don’t want those drafts to show on the main page, so I installed the “Ultimate Category Excluder“, which let me exclude posts from certain categories to show up in the homepage.

Update: This “hiding category” solution won’t work… to begin with, even if I hide a category, when publishing a draft post, subscribers get a notification that there’s a new post on my blog. I don’t want that to happen. Second, the whole scheduling thing doesn’t work anymore, because the post is already live when I post it as draft… so no motivation to go back to it, more than do it when it’s part of a larger file…


Your App Is Burried In A Folder – Make Its Icon Stand Out

Meetup has finally updated its mobile app. More than that, it went through a complete re-branding, and as part of it also redesigned the icon of its mobile app.

From the look of the new icon, it seems that Meetup’s designers assumed their app sits front and center in their users’ devices. I hesitate that’s the case.

 It’s increasingly difficult for smaller publishers/brands to break through — even with downloaded apps — because of folders (being buried) .. —

I’m one of those users… while I use the Meetup app quite often, to stay in touch and communicate with members of the groups I lead, it’s not one of the few apps I spend most of my time on. Therefore Meetup, like 98% of my apps, lives in a folder.

As a foldered app, it should have an icon that’s visually distinguishable, and that stands out with every pixel, otherwise users will ignore the app and won’t use it. Meetup’s new icon is anything but standing out. On the contrary – it blends with the rest of the icons and lacks identity.

Take a look at Meetup’s icon before and after:


Figure 1: Left – before, Right – after. In both images, it’s in the top-right folder, the bottom-right icon

The previous icon, while not optimized for mobile – having to squeeze the name in the small icon – had some color contrast to it, which made it recognizable.

Your App Is Not Special

Don’t assume users care about your app; they don’t. After downloading it, they are likely to either delete it, or throw it into a folder. The least you can do is plan for the latter, and design an icon that’s unique, and can be recognized in any size.

Take a look again at the screenshots above – which icons do better job at grabbing your attention, even when placed within a folder1?



My pick would be the Workflow’s icon (same folder as Meetup, bottom-left corner), as well as Spotify (right image, top-left folder, top-left icon) and Overcast (right image, top-left folder, mid-left icon).

Magit – My Simple Workflow

I still not fluent with Magit’s terminology and workflow. Probably because I’m not using git, in general, too often. When I do, and when I try to use Magit as the interface, I usually get confused by the wealth of options and switches, and resort to git in the terminal.

Today I decided to give Magit yet another try. I read the Getting Started guide, and now things makes much more sense. However, I can see how I forget what I’ve just read a week from now, so here’s the gist of that, my simplest cheat-sheet:

(Ma)git status:

C-x g

(Ma)git add

For each unstage file: s

(Ma)git commit

c c

Type the commit note and then C-c C-c to create the commit.

(Ma)git push

p u

Done. Now I can type q to close the Magit pop-up buffer, and be back on the file I was working on.

Electric Pair Mode In Emacs

So far I’ve used TextExpander for text snippets and, well, text expansion. One of my main uses-cases is character pairings. For example, when I type " I almost always enclose it with another ".

But TextExpander is lacking in several ways:

  1. Performance – it takes a friction of a second for the expansion to happen, but it’s notable, and feels like a little hang.
  2. If I delete one part of the pair, it won’t remove the other.
  3. It won’t work to wrap text. If I typed something, and then want to wrap it with brackets, for example, I can’t select the text and type the bracket character.

In addition to the above technical shortcomings, I don’t plan to keep using TextExpander in the long run. The recent move into subscription based pricing, isn’t something I’m interested in. I mean, paying subscription to text snippets…?

Anyway, Emacs comes with an electric-pair-mode, which enables smart pairing. I turned it on, but out of the box it’s configured to work mainly with programming major modes. I need it also in other text based modes, such as org, markdown and simple text. For example, in org I use ~ for inline code snippets, and ~ isn’t paired by default. Same goes with ".

Luckily, defining more pairs is easy, through modifying the electric-pair-pairs variable.

Here’s my configuration for this mode:

(electric-pair-mode 1)
(setq electric-pair-pairs '(
                            (?\" . ?\")
                            (?\` . ?\`)
                            (?\( . ?\))
                            (?\{ . ?\})
                            ) )

I’ll add more pairs as I encounter them. Also, I’ll need to learn how to add pairs for specific major modes.

An Inconsistent User Experience in iOS

When it comes to user experience, I’m a big fan of consistent design, which gives users confidence that their actions will lead to an expected outcome. When users know what to expect, they are open to experimentations; thay are not afraid to explore wider set of features, and try out new capabilities.

When there’s no consistency, when the same function gets different names or labels, or when it shows in different places, then users get confused. And when users get confused, they’re reluctant to try anything that’s not within their immediate need. Here’s an example for such confusion, which I’ve just experienced on my iPhone, when trying to share an image with a friend.

That’s the flow I went through:

  • Took a screenshot on my iPhone 
  • Went to the iOS photos app
  • Selected the screenshot I’ve just taken
  • Clicked the share icon
  • Selected to share via Messages
  • Selected the friend I wanted to share the screenshot with
  • Clicked send

Or have I…? when I clicked what I thought was send, the Messages’ screen closed, leaving me wondering if the image was actually sent. I repeated the flow, and just before clicking the “send” button1 paused to read its label. Hmm… it says “cancel”. That’s weird. I’m pretty sure it should say “send”. But what made me think that that’s where the “send” button is? was there another app that primed me with this expectation?

There is, off course. It’s called Mail.

In Mail, the send button dominates the top-right corner of the screen. Now, since I send too many emails every day, way more than I share photos, my brain expect the “send” button, in whatever app I’m in, to show at the top-right.


Figure 1: To the left is the Messages. On the right – the Mail app. Note the different buttons on the top-right corner of each of those apps.

I love those moment of self awareness, which allow me to test some of my own assumptions…



It’s a little hard for me to call it button, because nothing make it stand out from its background, like you would have expect a button. Is it possible that my brains is still wired in the pseudo physical, skeuomorphism, design…?

Self User Testing

OK, so I’m retracting from agreeing that descriptions are useless. I just had an experience that proved that wrong.

Well, some context will be helpful… let me step back and explain. Yesterday we had a heated discussion in the team about the usefulness of showing a description of a post inside a recommendation tile in our chatbot. Take a look at the screenshot bellow. This is how we currently display recommendations in our Facebook Messenger bot:


Each recommendation comes with a set of metadata: thumbnail, title, source, and description. The is an ugly appendage forced by Facebook. Then there are the actions you can take on a recommendation. Clicking on the thumbnail will open the article in a webview. Summary will return an auto generated summary1, stash will save it for later, and #{topic} will return more recommendations from the same topic.

You’ll notice that the description in this example (taken from the article page) isn’t great. It’s trimmed, and do little to explain what this story is about. Essentially, it doesn’t help me taking a decision to read or pass on this recommendation.

One of the ideas we came up with is replacing the description with the reason the user see a specific recommendation. We call this feature “Amplify the WHY”. So in the example the image above,  I’m probably seeing this story because I read a lot about science and astronomy. So the “WHY” in this case might read something like “because you’re interested in astronomy”.

It would have been nice to show both description and the “WHY”, but we have limited real-estate to work in, and need to choose one of them.

My team was adamant that we should drop the description and go with the “WHY”. At first, I was reluctant to agree. “I want to see data first”, I said. “Let’s run AB testing”. “Well, we don’t have users yet, so AB testing isn’t relevant at that point. Also, it is clear that ‘amplifying the WHY’ is so much better than showing a crappy description that we should take this as the baseline” was the reply I got. How can you argue with such compelling reasoning…

Now, circling back to my opening, I’m taking my agreement back.

I woke up at 7am today and wanted to read about the results of the debate yesterday night. I didn’t know where I can find this information, quickly and succinctly2. I thought about the CNN chatbot, but CNN’s top stories are posted only at about 9am. Then I figure, let’s try to see if I can find something relevant in our bot.

I typed “hi”, and (to my surprise) the first story I got was right on point –


Then I browsed a little more, and suddenly took notice that in any recommendation, which has a relevant title, I skim the description for more context. I also realized that I don’t look for completeness or quality; just few more words that will give better idea what the article is about.

“WHY” I get a recommendation, and why it’s important to me wasn’t relevant in the context I were in – checking the news, the objective news, not that that that’s in my “bubble”.

Summary wasn’t relevant in that usecases either, because much like clicking to read the story, it means “choosing” and focusing on one article, whereas I was still at the decision making stage.

So, what I’ve learned from observing myself (and in that rare instance, I acted as a user, rather than a stakeholder) is that description does have value, and in certain usecased, such as browsing the news, I need objective hooks. Description, in that case, and not personalized reason, were more relevant.

Definitely not representative experience, but one that makes me rethink what should be the baseline. And whatever the baseline is, we should put it to test.



Works pretty neatly. Here’s the summary for this article in the picture: “On Tuesday, thousands of people stampeded into a lecture hall in Guadalajara, Mexico, to hear SpaceX CEO Elon Musk talk about how he wants to colonize Mars. Another question is how — and if — Musk plans to prevent Earth microbes from contaminating Mars, and Mars microbes (if there are any) from contaminating Earth.”


I don’t go to sites to look for news anymore, and rarly google for news. And since the extinction of Zite, I now realize, I have no idea where I get my news from…

Google Allo – First Impression

Yesterday I installed the new Google Allo and gave it a first try. My team at Outbrain is responsible building chatbot CMS for publishers. So I was interested to learn about some of the decision made in Allo, and compare them with what we’ve learned over the last 6 month powering the CNN bots on Facebook Messenger and Kik.

User on-boarding

I downloaded the app, installed it, but then deleted it in the middle of the on-boarding. Why? because Google are being overly transparent. Why do they make such a point that they are going to send my contact list to their cloud now and then? there must be some evil reason for that…


So, I deleted the app. But then I thought to myself, “wait, you’re using Google Contacts, and your contacts are already syncing with google. Not periodically, but all the time, in real-time…” I felt stupid, downloaded the app again and completed the on-boarding. And I won’t say I felt better when the first few prompts from Allo kept pushing on that sharing thing, as if trying to tell me that I’ll be better not use it, if I want keeping private anything


To sum things up, the on-boarding experience could have done more to instill trust and make me more comfortable. Right now I’m not, and although he is a bit more of a privacy snob than I am, Snowden already made a point about the lack of privacy in Allo.

Content experience

  • Typed “top stories” – I got relatively fresh stories, but definitely not important ones.
  • They put the publish time. Seeing that a story published 37 minutes ago give confidence that they deliver news as they happen.
  • The stories carousel is clean and simple, but I would have liked to be able to take action on a specific story. This is possible in Facebook Messenger using the ‘Structured Message’ template. Articles’ recommendations in Allo feel temporary, since you can’t do much to engage with them other than read when you see them. Adding an option to see a summary of an article, save it for later or get more similar stories might give users a better sense of control over the experience and the stories they are seeing.
  • Google seems to think of Allo as a new interface for search, which makes sense for Google, but make Allo feels like a browser. When searching for something, the first quick reply is “Google results”, which once tapped opens the browser and search for your input. I didn’t like that it takes me out of the app.
  • The content in Allo doesn’t feel native. Rather, it feels like a patch, a cut and paste from the browser. Again, makes me feel that Allo is just another browser.

Chat-flow and experience

  • There are no dead ends. Even when chatting with friends, you always have quick replies available. That’s great.
  • There are ‘like’ and ‘dislike’ emoji’s at the last two positions of every set of quick replies. It didn’t make sense to me. As a user, I don’t know what they mean, hence probably won’t use them.


  • That’s the part that surprised me the most. Allo tries to be smart. It tries as much as it can to be non scriptive. Say “hi” and every time it will answer with something different. The first time I typed “hi”, I got the entry point experience, namely the option that I have to interact with the bot. Later, when I wanted to get to the same entry point, I typed “hi” again. This time, though, Allo tried to get into conversation with me. After few more greeting inputs that got me no where, I gave up and typed what I was looking for.
  • At that early stage, when users aren’t educated enough on the conversational design, and are accustomed to more deterministic experiences, trying to be smart is wrong. It’s like the early days of the iPhone – the skeuomorphism design helped users get accustomed to use it, through the icons that imitated physical objects. Once they got educated, more than 8 years latter, the flat design was introduced.

To sum things up, my overall impression is ahh. Yeah, it’s cool to play with Allo and see how well it handles natural language, but it’s no different than google search. In fact, it feels too much like google search, which is bit outdated. But than again, I’m writing this post with Emacs…

Hostile Lead Generation

In the last few days I’ve been getting daily emails from TWC, promoting their “Time Warner Cable Business Class” service. I don’t know anything about this service, and since I don’t run a business, its irrelevant to me. 

Until today I simply deleted those emails, but today I got annoyed, and made an effort to indicate it by unsubscribing from thier mailing list. However, the unsubscribe flow made me think that TWC isn’t really deterred by requests to unsubscribe. In fact, it seems it’s using it as another user acquisition channel.
And I think I cracked the protocol of this funnel:

Marketing emails

Send daily emails to users whose emails we get buy.

Keep sending those emails until the user respond, by clicking on the unsubscribe link, or selecting the gmail “report spam & unsubscribe” button.

Clean user information through an unsubscribe form

When a user clicks the unsubscribe link in the email, we have a precious opportunity to make sure the information we have about this user is correct.


When a user submit the unsubscribe form, we should update our database with the new information.

User is redirected to unsubscribe form

After we get a successful respond from our servers, redirect the user to the TWC homepage.


We assume (or hope) that when the user submit the form, she moves focus to another tab, rather than closing the one she’ve submitted the form in. If this assumption holds, then the user will have the TWC homepage waiting for her, and she’ll get to it in the near future.

User visit the TWC homepage

At some point, as we assumed, the user zap through open tabs and open the one that displays the TWC homepage. Great, we have a new lead! The user is visiting our site, meaning she’s interested in our service.


Hurry up to drop a cookie on her, and look for whatever information we can get on that cookie. Wait, we have her full name and email address!

Retarget potential leads

Let’s make sure we slice the bread while it’s still fresh, and find that user wherever she browse. This way we can nudge her just a little more, and try to get her to come back to our site and take another step toward conversion.


And wait, we have her email! that’s gold…

Well, no bad feelings for TWC. It’s just an amusing example of the absurdity of how user acquisition works.

Revising My Approach To Drafts

a blog post is like a news story about yourself

This was an insightful commnet made by Nathan, a member of my Blog Writing  Meetup. He made this remark in the context of writing style and voice – he would like to reflect his personality in his posts, rather than simply report on facts. But thinking about this insight from another angle might help me understand why I accumulate so many unfinished drafts, and why I rarely go back to them.

News vs. Blog post

News (n): newly received or noteworthy information, especially about recent or important events

I won’t go into explaining news nor will I try to redifine it. I’ll simply assume that if you’re reading this post, you can tell a news article when you see one1.

The thing about news is that it’s ephermal. No one will care about this Apple iPhone 7 release date a year from now; or as we joke in my team – chatbots are so April 2016….

Going back to Nathan’s comment, I think of a blog post as coverage of one’s thoughts and ideas, a translation of what goes in one’s mind. And so, writing a blog post is really like writing a news story, covering what’s going on in the writer’s head2. And since thoughts and ideas come and go, not reporting on them in time (obviously, reporting on those worth noting), makes them stale, irrelevant and less interesting. Mind you, though, that they become so in the writer’s mind, and not necesserily in the readers’3.

My Drafts Graveyard

It now makes sense why I accumulate tons of drafts, but don’t go back to edit and publish any of them. It’s not that they’re not good, or not interesting, but that they’re not relevant to me anymore. I lost interest, as new thoughts are gushing through my head.

When I started this blog, I implemented a writing hack I thought was useful (I still do) – keeping a draft section in my blog. Every post I start goes into this section, which suppose to help me capture ideas and serve as a springboard for future posts. In reality, though, it’s less a springboard and more graveyard of half backed posts.

Fight Back

The formulation of the problem is often more essential than its solution

― Albert Einstein

So now that I understand why I never go back to rework on my drafts, it might be easier to find ways around it. My current approach is to use the “burn the bridges” strategy 4, inspired by Sacha Chua’s “Clear out your drafts by scheduling Minimum Viable Posts” post.

The idea is to write a first draft that captures just enough of a thought to make it understandable. Then, instead of putting it aside and plan to get back to work on it (which rarely happens), I would schedule this post to be published in a day or two. Now, I know it’s going to go public and I have no way around it5; I can either iterate on the draft or let it be. But draft it won’t be forever.

I use this new strategy with this post, with that very paragraph, which I’m writing during the grace period before the post published. Next thing I’m thinking to go through my drafts, and start scheduling few of them, reminiscence of past time thoughts’ news…



  1. To further your understanding of news, I recommend The News: A User’s Manual, by Alain De Botton 
  2. I’m not going into the differences of writing styles between news articles and blog posts. 
  3. The user will not know, of course about worthy thoughts that have been discarded or laying as uncompleted drafts, craving to be published some day… 
  4.  “When your army has crossed the border, you should burn your boats and bridges, in order to make it clear to everybody that you have no hankering after home.” -Sun Tzu, The Art of War 
  5. Of course, I can cancel the scheduling, but the idea is to let go of that option…