Показаны сообщения с ярлыком product. Показать все сообщения
Показаны сообщения с ярлыком product. Показать все сообщения

четверг, 22 мая 2014 г.

You Can Learn While You Are Programming

When entering my sixth year at the university a couple years ago I faced a very severe problem. That was the time when new MOOCs started appearing at the speed of light: Udacity was dense with Sebastian Thrun, Peter Norvig and other awesome folks, while Coursera simply shipped dozens of new courses from major universities each month. The abundance of high quality learning materials as well as the freshness of the idea that you can freely learn whatever you want from the world’s best tutors caught me unarmed and I spent a lot of time just watching what I could learn in addition to actually putting effort into some of the courses. However, gradually a concern started building up in me: I felt like I put all my energy into learning instead of creating something new (this is obviously a fallacy, because I just wasted a great deal of my time on other useless stuff.) At that time I had a part-time job, which made me do stuff, but somehow I still thought that my time, which I could devote to producing new things, is wasted on merely listening to lecturers and doing quizzes and homeworks. Quite quickly, this idea led me to giving up all the MOOCs that I had engaged into and switching my efforts to the attempts to create something worthy for the awesome Windows 8 platform. I ended up hacking a brand new task manager app, which would have definitely become cool, should it ever enter the Windows Store. I really put a lot of time into this thing and pushed it quite far – at least that's what it looked like for me – but all that was not enough to make an actual product of it. Somehow, my attempts to become a producer instead of a student only taught me a great deal of things, but did not end with delivering goods.

These days things look quite different. First of all, I have a full-time job which eats a solid share of my time and energy, but also gives the feeling of involvement into creation of something large and cool in exchange. Besides, over the last months I have built a couple Windows Phone apps to fulfill my old desire to be a creator and deliver content to the public. I also engaged into other activities, which feed on my free time, so little of it is left to learning. However, as one might guess from my long post about MOOCs, this all led me to worrying about the fact that I don’t allocate enough resources to expanding my education, firming its basement and exploring new grounds. From time to time I literally feel the lack of inflow of fundamental knowledge to solidify my education. Not that it prevents me from working or makes my life unbearable, but once or twice a week I do stumble upon the thought that I should spend some time doing online courses, which could fill the gaps in my education and make me think on the problems different from those bothering me in my developer’s life. Looks familiar, huh?

This way I keep oscillating between the two goals – learning more and producing more – and constantly thinking that I don’t work hard enough towards one of them. Honestly speaking, even though this sometimes makes me nervous and angry with myself I am grateful to my subconscious for bothering me. When I lean too much on the learning side, my mind kindly reminds me that there is a lot that a programmer aged 24 can produce to his or her and others benefit in the world, where software brings new opportunities and solves real problems every day. On the other side, once I engage too eagerly into creating (mostly useless) stuff, I soon get reminded that to stay afloat in our rapidly changing industry one has to keep learning constantly and do this not only to be on the front edge of technologies and Javascript frameworks, but also to learn and remember how to learn. For me this latter activity involves exposing myself to some fundamental science and ideas, which can serve as a good basement for applied programming stuff that I need to deliver great software. The problem here is that our time and energy are limited even when we are still young and thus it may seem difficult to do well in both areas. Seriously, if you are a lucky prisoner of 5x9 job and try to, for example, create some lovely mobile apps during your free time, it is hard to stick something like a dense Quantum Physics course into the schedule even if you can attend it in your bathroom or elsewhere. I didn’t manage to do this with Quantum Physics, but I have positive experience with a couple other courses as well as a few tutorials and must admit that it is much easier to combine studying and producing than it might seem at the first glance.

First of all, to be able to both learn and create I absolutely had to set proper goals for a long period of time – at least for the year 2014. In terms of MOOCs I have quite a modest target of passing 5 courses by the end of December. I am not sure if that’s enough to satisfy my appetite for new knowledge, but at the same time I am confident that trying to do more won’t work out well in combination with other challenges that I have chosen to face. For now I have done a course and about a half of another one, which is a bit less than what a uniform schedule would require. Still, I believe I will be able to deliver on my goal, should I increase the pace just a little bit. On the other side, my targets for learning applied stuff like languages, libraries and frameworks are not that measurable and clear, but this is compensated by the way I approach them.

The thing that really helped me learn a lot and keep going with my applications at the same time is a routine that I have developed. On a typical workday before showing up in the office I would usually spend about an hour with my laptop in a coffee-shop and that’s the time that I can devote to doing tutorials on AngularJS or playing with Clojure macros. The trick here is that I know that I can spend my morning either learning some stuff this way or working on a future post for my blog. Since I have a pretty defined schedule for the blog, a lot of mornings are left for studying new tools and that’s just cool. This approach helps a lot because I always have some time to put into “applied education” and in addition to this I also make myself finally wake up and get ready for job before actually appearing at the office.

With MOOCs the story is a bit different: I tend to allocate time for watching lectures and doing related exercises on weekends - particularly because they usually require longer and more focused timespans than just doing a tutorial or hacking some code. The fact that weekends come only once a week encourages me to put some time into a course on Sunday, because I know that if I don’t do this, the next chance will be no sooner than in 5 days. On the other side, because with online courses I am not as rigorous as with morning tutorials and have much more options to start my Sunday, I perform a bit worse here.

So, over the last years I have finally learnt that despite having limited time we still can and should put effort into both creating and learning. Fortunately for the educational side of things, we typically have a lot of time during any particular day that we can’t devote to creative activities, and which can be spent exploring new fields. When one has these periods depends on the person and their daily schedule: for me that’s usually mornings when I am not yet ready to think really hard and produce something. For someone else the best time to study may be, for example, in the evening because one is too tired from job and the whole day of debugging SQL scripts. Identifying these ‘non-productive’ intervals in your schedule and making yourself routinely use them for learning can really help expand your education and develop yourself professionally. On the other side, I feel that the contrast between learning and producing that bothers me so much is to some extent made up. In the end, when striving to deliver something new one will inevitably have to study a lot – I definitely did learn much from my Windows Phone affairs.

So, how do you satisfy your natural need for learning new stuff and balance it with delivering awesome products? What are the routines that help you do both these things and leave some time for entertainment and personal life? Please tell me in the comments – knowing how other people organize their time and work towards their goals can really help others a lot!

пятница, 25 апреля 2014 г.

How to Fail Your Brand New Windows Phone Application

As some of you might have noticed, over the recent months I submitted a couple new applications to the Windows Phone Store. Here I want to reflect on my experience with delivering the first one, Appoint, and even more on the results of this delivery.


How was it a Success

Appoint is actually a very simple thing. Its key goal is to provide users with a set of additional entry points to default Windows Phone calendar app, which allow to create appointments (or reminders, as I see them) a bit quicker than through the built-in facilities. This is achieved through giving user several customizable shortcuts to pin to the start screen. For example you might want to be able to quickly create appointments for 11 p.m the next day – for this purpose you will tune the "tomorrow" shortcut setting proper time and duration and pin it to the start screen. Then, whenever you wish to create a reminder for tomorrow you just click this shortcut and it opens calendar’s screen where you need only fill in the appointment title and press ‘ok’. The idea is trivial and when faced with it for the first time I thought that such an app would save me from the need to pick proper date and time again and again when creating simple reminders in the calendar – and it really does save time.

The simplicity of the app was the key reason for me to take it into production. By the time the idea came to me I already gained some experience with the platform through the attempts to create Arithmo – the app that should have been my first one. However, in January I still had a couple things to complete before Arithmo could be shipped: UI and some artwork. Because I suck at both and was really scared of the work needed to make the app nice and easy to play with, I have easily jumped away from it to the new goal. At the same time, I was quite determined to push Arithmo to the market as well and this put me under certain constraints in terms of time. As a result, I decided that it is a good idea to try to deliver an app in one month – the goal looked both quite ambitious and achievable. So, right after checking that all aspects of the Appoint idea are actually implementable, I set up a deadline and promised myself that no later than in a month my calendar application will be submitted to the store.

On January 19th I made my first commit to the app’s repository and at night on February 14th the package was sent to Microsoft for certification. I didn’t earn $100 in 24 hours, neither have I completed something enormous over the month, but this was a success. I have finally jumped out of the pit of hoping to produce something and deliver it to the public on my own and found myself in a world where I can not only set deadlines, but actually stick to them. It felt awesome.


How was it a Failure

The only problem with Appoint was that it became a miserable failure from the market’s point of view. While the app is still downloaded from time to time, the stream is very slow – something about 1 installation over 2-3 days. With the current 50some installs this means that over the next 3 months it won’t even reach 100 total downloads. The word failure in fact does not seem to be descriptive enough for this situation.

Apart from the sad fact that I failed to secure any significant users mass for Appoint, I also didn’t get much feedback. If one checks the app in the marketplace they will see a single 5 star rating on it – the one that I left myself. This means that none of the 50 users who downloaded Appoint chose to rate it or leave some review. In the context of mobile apps this is very bad: an application without ratings won’t see much downloads simply because potential users won’t have a chance to come across it in the store. Here I don’t mean that I didn’t get any 4 or 5 star ratings – I got no single negative one as well. That is, apart from the review posted by Ron Lunsford I haven’t seen any feedback, which could help me locate problems and fix them to make the thing better.

Finally, the review by Ron made me see one thing clear: I completely failed to communicate the idea of my app to potential users. The descriptions in the Store and on the website neither manage to show the benefits, which one might get from Appoint, nor engage Windows Phone users into trying it. Furthermore, the app’s UI itself hardly helps user utilize it in an efficient way or maybe even prevents him or her from understanding what to do with the thing.

Another point that the review revealed to me is even more important. From how Ron described and used the app I can draw one very simple conclusion: the ways people want to use calendar on their phone might be different from how I interact with it and thus offer little room for a utility like Appoint. Moreover, most of the things included into the app didn’t draw the reviewer’s attention – and likely they weren’t found by other users or were not beneficial to them.


Why did it end up this way

Now let’s not burst into tears and analyze the reasons behind Appoint’s poor performance in the market. First and most important, when starting the project I was not sure if anybody shares my views on the phone’s calendar, appointments and reminders and hence can benefit from the app. I simply spotted a thing that I could implement and use myself, but it may be the case that the actual value brought by the application is minimal. To be honest, I myself use it in a very limited way and now I can see that Appoint could hardly become a first-class app for most people, and even for those who will find it helpful most features can’t be relevant like they are not important for me. This all boils down to the fact that any application should provide enough value to users – as long as we want it to be popular. Just taking an appealing and implementable idea won’t bring one far in terms of market success unless the idea is really clear, simple and relevant to a significant number of customers. For a developer this should mean that once one decides to create something they should analyze it deeply, try to get an unbiased view and estimate the target audience. Only if the results of this research are satisfactory it is safe to start development. This of course applies only to the products pursuing success in the form of paycheck or popularity and that’s obviously not the only possible goals for developers. For me success was more of a dream than a goal – main objective was to create the app and push it to the store under certain time constraints. With this mindset I by no means could accurately assess the market potential of my app.

Beside the lack of initial verification of the idea I also made some design mistakes. Particularly, despite the fact that in a recent post I mentioned the risk of losing control over the product’s features set, I have actually committed this crime with Appoint. The main screen of the app hosts quite a lot of tiles whose purpose is not that clear, shortcuts customization is hidden and the value of some of the things built into the app is doubtful. Maybe even dropping two thirds of the shortcuts from the main screen would make the first encounter with the app easier for users. In the end, I use only three or four of them.

The mechanisms that I use to engage users and help them understand the purpose of the app are very old and quite inefficient – lots of text. There is plenty of reasons for my descriptions to be useless – particularly, the quality of language and poor explanations. Although, what is more important, texts are boring and the more of them you throw at your users the more they will think that the app itself is boring. Instead of trying to fit as many explanatory paragraphs as possible into a screen we should look for more appealing and entertaining ways of educating our users, which would make them want to play with the product, not show them how complex it is to handle.

As for the lack of ratings and feedback, the only way in which I tried to get them was including a pretty standard popup, which will jump at users each 10th launch of the app and ask to rate it. One of its drawbacks is that it works only if some users do return to the app and this doesn’t seem to be the case with Appoint. Besides, even if someone sees this dialog they can easily ignore it and there is no reasonable way to change this without annoying users. Thus, the only viable way to get reviews from inside the app is to build a product that will attract users, keep them interested for some time and bring them strong emotions – in this case they might decide to pay developer with their precious time and rate or review the application. On the other side, since ratings come only to those apps, which are downloaded, there is little surprise in the lack of reviews for Appoint.

This brings us to my most serious failure – the lack of marketing. To break the above circle one has to draw some attention to the app from the outside. The only marketing effort that I put into Appoint was setting up a website, posting several tweets and mentioning it on my LinkedIn and Google+ pages. This couldn’t have had any significant effect simply because I don’t have much followers in any of these social networks and most of those who follow me are not really interested in Windows Phone apps. What I should have done instead is aggressively advertising my app in various groups and forums for Windows Phone developers and users, but I was simply scared of appearing somewhere and inviting people to try my product. One source of this fear was my suspicion that the app is not that useful and hardly anybody will admire it. However, more importantly, I was simply afraid of claiming ownership of something in front of many people and looking like a freak who is able to code, but can not bring any real value. That’s what I must fight and the fact that it isn’t easy for me to overcome this fear might be my most important takeaway from this affair. In the end, until I deal with it I won’t be able to win any users for my products.

So, making an application a failure is not that difficult. However, if like for most of us this is not the key goal for you, you should work hard in two areas. First, be sure to explain yourself and your users what are the benefits brought by your product and make sure it is nice, useful and simple to handle. Second, let as much people as possible know about it so that they can admire what you have done and spread word to others. Neither of these tasks is simple, but making life better for scores of users is definitely worth the effort.

Have you ever seen your application in the bottom of a store with zero reviews? Or maybe everything you ship always hits the highest positions in app ratings? Please share your experience and tell what were your mistakes or which routines do you follow to create successful apps!

четверг, 20 марта 2014 г.

Ship It!

In the 4th episode of Code Speak Loop podcast I have tried to express the idea that delivering some finished products is as important for young professional’s growth as a good job with experienced team or learning new technologies and tools are – especially in the field of software development. Since I had certain difficulties explaining what I mean, I decided to write down my thoughts so that they become clearer for both my followers and me.