Thoughts about design
Dart and TypeScript

Microsoft has TypeScript and Google has Dart. I was using Dart a lot lately and I think it has a bright future:

  1. Many things that are complicated in JavaScript are easy in Dart
  2. Dart has two top-notch frameworks: AngularDart and Polymer, which push the boundaries of what’s possible in web development.
  3. Dart is super-fast on the server. This is the first language that is good enough for developing large full stack web applications. I wish Meteor used Dart instead of JS.

The modern web development is all about frameworks. A good framework makes the development easy by hiding so-called “boilerplate code”, the glue code that doesn’t add much value to the application. With a good framework the most of your code is valuable business logic rather than some kind of duct tape to hide imperfections of the web browser API.

When I switched from jQuery to AngularJS and AngularDart the percentage of the boilerplate code decreased from 70% to 30%. This was a great step forward. The new application became lean and easy to understand. I felt empowered to create more features and the development process felt like pleasure rather that a routine. It felt like switching from Java Servlets to Django, you stop fighting a framework and start creating.

TypeScript is nice, but it needs a serious framework to utilize its strong sides and provide a consistent environment for the development. Before that, I don’t think it will be getting much traction beyond Microsoft.

Should you deploy your product early?

This week I tested online service called HackPad. I think it’s a great idea to have an easy to use wiki engine that is page oriented (not document-oriented, like Word or Google Docs). It’s 2012 and I don’t care about print documents anymore.

I started to use HackPad to collect my project’s software requirements. Usually we use Trello for task management and put all the requirements there as cards. Over time, we created hundreds of cards for each project. Now, to understand what our system is doing somebody have to read through dozens of cards. This is often confusing and takes a lot of time. To fix this problem I planned to use HackPad. I was going to put requirement as wiki pages and reference them from the Trello by unique URLs.

After creating 4 pages I started sharing them with my team. To a huge disappointment the HackPad server went down in the middle of our collective editing session and we lost 10 minutes of our work. The impression of the system was spoiled and we moved to Google Docs. Yes, it’s document-oriented but it get’s work done and doesn’t lose the data.

There’s a famous approach to product management called “Lean Startup”, popularized by Eric Ries and Steve Blank that recommends to ship product early, as soon as possible. I imagine that HackPad followed this philosophy and shipped product early, before detailed QA and without reliability features. As a result I can hardly imagine recommending this product again to my team - I already was embarrassed enough when we lost our work.

This made me think, how early you should launch your product? While I would like to have multiple font formatting options and multiple styles for headings, I could wait month for these features to be implemented. I could survive with simple formatting. However, data safety and security issues could easily turn users off your product and they will share their negative opinion with their peers. Negative reputation often sticks to the product and it’s hard to prove that you won’t leak or loose user data. We need to remember this when we launch the product.

How much do we depend on free online services?

Today YouTube disabled unlisted video sharing, a feature that I use to share instructional videos with my coworkers. This happened because FOX file (in my opinion unfair) copyright infringement case against me. I uploaded a 10 second clip from a TV show that contained a funny advertising in Russian language that I wanted to discuss with my Russian friends. According to Wikipedia,10s is small enough to be considered citation rather than unlawful copying. Nevertheless, FOX and Google didn’t care and downgraded my account, removing unlisted sharing feature. This posed an interesting question: how much do I depend on Google and other free internet services?

While this example is not serious enough to have significant impact on my life and the ways I do things, addictive dependency on some of the Internet services could create problems in the future. This is even more important when online services become tightly integrated with consumer hardware. For example, if I were to buy a Chromebook that completely depends on Google’s online services, what would I do if Google disabled my account? Similarly, what would happen with my Gmail history, if Google decides they don’t want to host my account anymore?

Couple of month ago I tried to switch from iCloud to my own hosted mail sever. This was a pain: installation was complicated, features were limited (no good email search), and the service was unreliable (sometimes my mail client weren’t able to connect to the server). After spending two weeks’ free time on that I switched back to hosted service (Gmail this time). Life became much easier and I finally was able to focus on content of my emails rather than the process of their delivery.

So, I still depend on free online services, like email, online storage and sharing. While I’m free to choose between Apple, Google, Microsoft, or Facebook there’s no easy way to abandon them completely.

Starting with Feathers

I’m starting to evaluate Feathers, a distraction-free writing and (apparently) publishing platform. Recently, I spent several hours trying to make something good out of the Tumblr. It didn’t work for several reasons:

  • Too many themes and no one is REALLY good, on the level of Svbtle
  • There are a lot of unnecessary functions. For example, I could follow other people on Tumblr. However, I don’t need another “following” service, I already have RSS and Twitter.
  • DISQUS is a feature-rich, however it’s not well-integrated with the Tumblr. I guess I could make it work but it would take a lot of HTML/CSS coding. I’m not sure that this is what I’m going to do.

I’m optimistic about Feathers, let’s see how it goes.

P.S. However, I found that Feathers doesn’t allow you to use Russian letters: the font is changing from “Elena Web” to some default san-serif font, which doesn’t look very nice.

P.P.S. Also, I would like to see the commenting feature and the index page with my posts. has a very nice sign up form. Here’s why I like it:

Big fields are easy to see and point with a mouse
The fields don’t have labels and use placeholder text instead. This save space to make the fields bigger. You don’t really need a label after you filled the form. The only problem is to check the form once you filled it. However for a small form with 5 fields it’s not really necessary. has a very nice sign up form. Here’s why I like it:

  • Big fields are easy to see and point with a mouse
  • The fields don’t have labels and use placeholder text instead. This save space to make the fields bigger. You don’t really need a label after you filled the form. The only problem is to check the form once you filled it. However for a small form with 5 fields it’s not really necessary.
The best checkout form ever:

The best checkout form ever:

How many Scrums?

I have two software developers each of them is working on his own project. They both are using the same programming language and the same framework. These two projects are related to each other and students exchange the code.

We use Scrum process for development. Each week with each programmer we decide what should and can do this week. We use to manage the scum boards and developed a custom extension that allows the developers to track time and create bills based on the number of hours they spent.

Today both developers work in the same Trello board. While it provides good visibility for me, I’m not sure it’s really relevant for them to see each other tasks.

What is a good approach for scenarios like this one? Should I use a single boards for all developers or create a separate for each one?

In the startup community it’s a common knowledge that ideas are abundant but execution is difficult. I don’t see that. I have a experience of launching a successful startup and have all  basic ingredients of launching a new one: software development experience, business experience, money, and a team. What I need is an idea. Where could I find it?

Steve Jobs and iDVD UI

On the appointed day, Evangelist and the rest of the team gathered in the boardroom. They’d brought page after page of prototype screen shots showing the new program’s various windows and menu options, along with paragraphs of documentation describing how the app would work.

“Then Steve comes in,” Evangelist recalls. “He doesn’t look at any of our work. He picks up a marker and goes over to the whiteboard. He draws a rectangle. ‘Here’s the new application,’ he says. ‘It’s got one window. You drag your video into the window. Then you click the button that says BURN. That’s it. That’s what we’re going to make.’”

Why most email clients copy email addressed as “John Smith”? When I copy and paste this address I always have to trim it to the actual email.

I have started “Programming a robotic car” course

So far the course is pretty awesome: Sebastian Thrun explains his experience in building robotic cars and making a first robotic car that finished Paris-Dakar race. Also, the programming part of the course is done in Python, which I adore. I’m very happy.

Make internet promotions social

In internet marketing, don’t give just give user a discount. Ask him to earn it.

For example asking user to find 10 friends who “Like” your page on the Facebook would introduce your product to 10 time more people than just a regular discount.


How to capture your emails in “The Hit List” GTD inbox

I use The Hit List as my GTD application. The main drawback I found so far is that it can’t import messages from Apple Mail. Today I found a script that fixes this problem.

For many people (including me) the mail application is the main source of the incoming tasks. However, it’s challenging to build a complicated task workflow in your email inbox:

  • There are no due dates
  • There are no projects (you can use folders but in this case it’s hard to get an overview of all you tasks on one screen)
  • There are subtasks
  • There are no notes, tags, assignees

The Hit List is a great application for managing tasks. In addition to the mentioned features and can track your time, synchronize between computers and iOS devices, and put you due date to the iCal.

So the perfect solution would be to use The Hit List for tasks and Mail for communication. How to do it?

I propose the following process. You process all emails in your inbox with three steps:

  1. If the message has important information - save it
  2. If message is actionable - import it to The Hit List
  3. Archive the message

Using this process you can keep your inbox clean and capture all incoming tasks that you can follow up later. A nice feature would be to be able to use a link to the original message to be able to reply to the sender that the task is complete.

Accidentally couple of days ago I found a link explaining how to import a message from Apple Mail to The Hit List. This script is good, however there are two things I needed to improve:

  1. How to assign a keyboard shortcut
  2. When the message is imported nothing tells you if it’s done or not. What if something went wrong and your message wasn’t imported? I would prefer to have a Growl notification displaying the result of the import.

To do so, I went the Growl AppleScript examples site and integrated Growl support into the script. The new script consists of two parts:

  1. Import To Hit List - the import script itself
  2. Init Hit List Growl - you need to run it one time to register Growl application

You can click the links to get the script text.

To install the script you should consult the web page

To assign a keyboard shortcut to the scrip I used the feature of Alfred, my favorite application launcher:

As a result you can follow the 3 step message import process:

  • Select a message in Apple Mail application
  • Press the shortcut and the mail magically appears in the The Hit List inbox
  • You see a nice Growl notification
What I don’t like about Python
  1. Inability to develop real multi-threaded applications. I can do it in Java. Scala, C and other languages. I understand that for most of application programming threads are not necessary. However, what would I do if I need them?
  2. Sinatra, the great web framework that I like is written in Ruby, not in Python.
  3. It’s slower than Java, Clojure and Scala

Mark Zuckerberg: “[In 5 years] Every app is going to be social. If we build the best service, there’s massive value there. If we don’t, somebody else will.” - I can’t agree more.