Many enthusiastic programmers have a habit of developing their own personal programming projects. Mostly they do it to learn new things and technologies, try out certain ideas or create something very own to get the feeling of completion and usefulness. As most of the programmers have a daily job it naturally goes to the evenings and the weekend days to return to their pet coding projects. Evenings are late and tiresome and weekends are lazy and relaxed. It takes an extraordinary amount of focus, dedication, discipline and commitment to see the work through. This is sadly where and how most personal projects die never seeing the light of day.

Having worked on private projects on my own personal time for about three years combining it with a fulltime activity I've made a number of observations about how it goes, what works and what doesn't. So I present here a list of my recommendations to those programmers who actively engage in their own programming projects. These tips will help you keep focused, stay organized, they will tell you how to optimize your time and reveal some hidden secrets to keep your motivation alive. You'll need those to see your work through, I know how hard it eventually gets.

1. Have an idea you believe in

This is where it all must begin. One day you suddenly get a great idea and in a short time it fully occupies your mind. Whatever you're doing, wherever you are, again and again in your thoughts do you return to that project of yours you wish to be working on instead of anything else you must be doing at this very moment. You believe in your idea, you know your little application will change things and make life somehow better. These are the signs that you are serious about this project and will likely commit to it. Then go ahead with it. If on the other side you're not sure about your idea, what value it will add, whether anybody would want to use it and that you are qualified to pull off something like this then perhaps it is not the right idea. Yet.

2. Keep a notepad close by at all times

Within the scope of your project you happen to get new and interesting ideas at all times. While you're shopping, commuting to work, in the office, when jogging, having shower, being with friends at a picnic, in short, during any unrelated activity and in every place. The ideas just pop in your head. It's essential that you don't lose them. Don't lie to yourself that you will remember them by the time you return home. You won't and you will be sad about it. The workaround is to have a means of saving your ideas close by everywhere you go. An old classic notepad and a pen, perhaps a notes application in you smartphone which is usually always with you, possibly a text file on your working computer that you will mail to yourself every evening. Important is, you can get to your notepad quickly, write down the idea then put it away and continue on with your other activity, all within under a minute, so that your other occupation does not suffer from your momentary loss of attention.

3. Build a basic version first

With a personal project typically done in secrecy you don't get much feedback on your progress until you launch. To keep yourself motivated try to get something running as soon as possible. Build a basic version of your application first. Design a user interface with placeholders for future modules and functionality areas. That will help you see the final goal. Implement core features in their minimal version, just to bring your application to life and see it in operation even if at a basic level. Avoid trying to figure out the entire final architecture from the start and stop yourself from implementing the full functionality in little details for each module before moving on to the next one. It will bury you under a pile of work you will never manage to carry. Focusing on getting the wireframe model first will also help you assess the viability of the idea quickly and make the necessary adjustments before you've invested too much of effort into coding. Having to discard large portions of work will drop your morale. Having to redo the work you felt was already completed might demoralize you.

When the basic model seems sound go on and implement some advanced features, spread around different modules, so that you see your application getting substance balanced across different functionality areas. That will help you perceive progress happening everywhere not just in one narrow area you're stuck in. Then gradually develop your application to its full potential, extend various modules in succession, integrate them with the rest of the application to see it rising and growing. It will boost your morale as you will keep the sense of momentum through your entire work.

4. Change domains frequently

One other reason why it is important to develop a basic application first and spread your efforts equally over different modules, is that by doing so you continuously jump from one kind of work to another, you change the problem domain and you switch the context. Being stuck in one particular area has a known psychological effect of decreasing your motivation over time and increasing your tiredness of seeing the same thing every day. The trick is to artificially diversify your activities so that you keep the feeling of new and different throughout your work. That will keep your brain curious, ready to solve some new and different problem, and will prevent you from reaching the ultimate point of tiredness where you risk just dropping the entire project, because of the thinking the work is endless and you're never going to complete it. Also remember that the feeling of tiredness is cumulative. When you promptly develop modules one by one to their full extent you fight to overcome the sensation of burden each time. It consumes your energy, motivation and the vital force. With a next module that feeling again will add to the accumulated perception of a heavy burden hanging over you and might take the last bit of energy you have left so you'll drop the work. Instead make a habit of moving from one problem area to another. If you've been working on user management, move to implement something about payment processing. When that gets old try working on the business workflow. Then go to personalization settings. With rapid change cycles your body and mind have the time to replenish the living force and return it to high levels.

5. Rotate the types of work

Just as it is important to change the active problem domain every now and then it is also refreshing and stimulating to rotate the types of work within one problem area you are currently focused on. With many applications a module typically stretches over all of the layers, from the database to the business logic, permissions, validation, finally the user interface. When you're starting on a new problem, you have a choice. You can either completely develop each layer before moving on to the next one or you can bootstrap the functionality by introducing smaller incremental changes into all of the layers simultaneously. The first way is rarely possible anyway so I recommend the second approach. Work on the extension of the data model until midday. Then extend the business rules to accommodate the new changes in the second half of the day. The next day you will add more validation rules and integrate them with the new UI to support the newly added data. Then proceed to extend the data model again followed by respective changes in the other architecture layers. Dedicate the next day to the fine-tuning of your UI, just the presentation and nothing else. After that analyze the texts you have used so far, perhaps some extra copywriting work will be useful. When that is done return to the coding part again. Follow that strategy and you will find yourself interested, curious and motivated each new day.

6. Distribute boring coding tasks over time

One of the strongest and often impenetrable barriers that programmers encounter on their way to finishing their personal programming projects is the need to get a lot of work done which falls into the category of uninteresting, routine and boring. With just about any real world project the routine tasks represent the largest portion of the work that needs to be done. It takes the most of your time and the most of your efforts. Creating data forms, adding input validation, standard CRUD operations, integrating components together, it exists everywhere and is pretty much standard work. Very little to none innovation and creativity can be found here but it all must be done to make the application work and turn it into a complete product ready to be shown to the users. This is where most personal projects end. The innovative part, the proof-of-concept is what mostly attracts programmers and compels them to start their own personal projects. When it is done and it is done rather quickly the original interest drops to the level where it becomes almost impossible to motivate yourself to continue work. Because you see before yourself the months of routine, boring and tedious work which seems as boring as your daily job. Here many programmers just drop their projects and move to something new leaving this one unfinished. It goes without saying that a strong will and dedication are crucial to getting the work complete. You must prepare yourself to deal with many long hours of routine work. If however you are of the type who gets easily demotivated by that routine work here's a tip for you. Distribute boring tasks over time. Interleave them with that interesting and innovative work of yours. Insert routine coding sessions between the periods of highly motivated work on the proof-of-concept. Start by adding some basic user management. Some time later return to it and add a password recovery function. Then do something interesting again and when it is done find a couple of days to add the editing of personal details. When you turn months worth of routine work into relatively short coding sessions you won't have enough time to get bored by them because you know just after it's done you're back into something interesting again.

7. Enjoy little advancements

Develop an eye to see even the tiny bits of progress and rejoice over them. Recall that you didn't have this feature just yesterday but now you do. Always see how your application is better now after your coding session than it was before it. Play with the new feature – your eyes, your hands and your mind will notice the difference and the change, even if at a subconscious level, and that will keep your spirit high. Don't dwell on how far you still are from your final goal, but enjoy instead the advancement you've just made over what your application used to be just a day or even an hour ago.

8. Enjoy the final result now

In your mind imagine regularly your full application in action, with all of its features, bells and whistles in place. With the eyes of your mind see how people are using your application, how they make use of all of the features you implemented. See how the unique elements of your great idea help them accomplish their work more easily with more efficiency. Observe how those innovations of yours make your users more happy and more satisfied compared to how they felt when they struggled with the products of your competition and how they were annoyed and impeded by their restrictions and ultimately disappointed by their limitations. Watch how much better they feel now. This sensation can boost your morale a long way towards seeing the project through.

9. Play with UI sketches

Once in a while when you have an idea of a new feature or perhaps of a different UI composition, draw a sketch. Make a screenshot of your current application, paste it into an image editing program and start playing with it. Change colors, rearrange the elements, vary their sizes, their groupings. Observe how your application changes. You can do this to experiment with the appearance before you start on with implementing this functionality. Then play around until you've come up with the appearance you like then implement it. One other interesting option is to make a sketch of a feature you intend to implement afterwards but not now. Even during your current work it is good to interrupt your activities for a while and switch to a different domain. Especially when your impatience begins to distract you from your current task let it take over for a short while. Start thinking about the upcoming feature, make a few sketches of it. When you draw something you like very much it will return a tiny feeling of accomplishment, of progress, of mastering one other bit of work ahead even prematurely. Then you save your drawings and return to the unfinished task now not being drawn away from it but knowing that the other feature that is coming next is not an issue but a closed matter already now.

10. Do continuous concept reviews

During the entire project you must keep an open mind and be flexible. To accomplish quality work you have an obligation to yourself to be honest and to go wherever the path takes you. It's not like you've written down the initial idea and stick to it refusing to take a stroll or allow any deviation. Just like with writing where you often don't know where the pen takes you until you've put it to paper. The same is with venturing on with a new innovative project. Its final form and shape will be defined through the journey of its development. Be ready to realign your sensors during the entire journey. Allow for unexpected. Try things out. Make experiments. Listen to outside ideas and integrate them into your work. Don't regret if something hasn't worked out, toss it away and make it the other way, without reproach, without remorse. Don't leave wrong things in just because they once made part of the original concept. Change the concept to be consistent, sound and to work to the advantage of your users.

11. Keep the code clean

If one thing is clear with individual programming projects is that you're just one person against the world. Don't worry it will work but you need to make wise use of your time. One of the biggest mistakes is writing sloppy code, just to finish it quicker and present it to the market sooner. This is though a valid point it is however not an excuse to make a mess of the code by disregarding all of the best practices and bringing all of the antipatterns you've heard of. The usual thinking is that when it's up and running and has become successful you will redo it again properly. That is an illusion. To redo it from scratch doesn't even work with companies which have substantial financial and human resources to apply to the project. You're just one person. You'll never have time to do it twice. In fact the challenge is to even finish it once having gathered all of your inner forces. When it's running you will have other things to worry about such as extending your product in rapid pace to react to the customer feedback. You won't have time to stop and massively refactor it speaking less of writing it all again. Therefore do it properly from the start. Design a proper and a flexible architecture. Pay special attention to the database model, it is a pain to change while in production. Consider getting the structure of the public URLs of your web application right from the start, their later change will hit you hard SEO-wise. Perform regular code refactoring. When you feel a part of the application should be reorganized and cleaned up then stop your work and do just that. Don't let cleaning tasks accumulate. This will bring the feeling of a house with broken windows, when you realize that many things are broken you will stop paying attention to what you're currently doing and the number of issues will escalate. And like you suspect a large-scale refactoring of your application when it's done will be more than you can handle. Therefore constantly keep the house in good order.

12. Have a clear goal

Naturally complementing your great idea you must have quite a clear picture of what you wish to accomplish. You should clearly see what features make your product different, what are your unique selling points. You should have a list of priorities, what main features you implement first and then launch, what follows quickly and what you will add some time later when your application is stable and all of the urgent issues are addressed. You must also realize how you will present your application, what immediate questions about it your users will have and how you are going to respond to them. Consider now what role you are going to play in communication with your users, how you will be leading them through your application, what perception of yourself will you try to create in the eyes of your users. Apparently, what relation to your competition you are going to have and where and how you will position yourself. Not that you are going to get everything in the tiniest details before even beginning but the core elements of your strategy go along with a great idea and must be clear to you from the beginning. Some of them can be expected to become clear during the work. But do not engage in the work until you have a clear picture of what and how you wish to accomplish. Without that your work will have no focus and it is very likely your coding sessions will not result in a finished working product. Having a clear goal is essential.

13. Keep a log of work items

A personal project is no way as large as a company project done by multiple team members. Therefore a full-blown project management software might be an overkill. Keeping no plan at all is however another extreme and it is not going to work. You must keep some sort of a log where you track the work to be done and the tasks you have open. Often during the work you encounter something which must be added or changed somewhere or perhaps refactored a bit but you don't wish to get distracted by it right now. So you put it into your log of open work items and you leave it for a later time. I personally find even a simple text file does great job for me. I keep the three categories of them. A log of the things to be done during the current stage of the development, I put those things into an approximate order in which I wish to get to them. Small refactoring ideas go to this list too. Then I have a list of the things which must definitely be done during the following milestones which come after the current one. And then I have a list of the experimental things which might be useful but should be investigated further at some later time when most of the work is done. This has worked great for me. I keep the logs simple and flexible. Sometimes I rearrange the order or even move the items between the lists, when some new information changes my view on what should be done when. Important is, you keep that log and you promptly put in there what must be done and don't keep it in mind. Otherwise you will forget it rather quickly and then those lost items will hunt you through your entire work appearing when least expected which will be quite displeasing. Make a point of not letting a single issue go forgotten.

14. Keep a log of bugs

Quite obviously keep a list of the bugs you encounter during development. Often you don't want to stop your current activity and go debugging but wish first to finish your current work. Then by all means do so but immediately save the bug information for later access. Perhaps you will have time in a few hours, perhaps you will find the time tomorrow. Differently from the general work items, I recommend closing bugs as soon as possible. Returning again to the metaphor of a house with broken windows, you wish to fix the windows sooner rather than later so that the atmosphere of a broken place doesn't take over and start to dominate over you negatively influencing your morale and the work attitude.

15. Have no rigid schedule

Personal projects are done in personal time and that sadly limits how much time and energy you can invest in your projects. In addition you will have other free-time activities and the routine which will interfere with your work. Which is why it is crucial not to make any strict development schedule that you will be forcing yourself to stick to. Attempting to do otherwise will make you constantly annoyed and stressed about missing your own deadlines and check points. Realize that your off-time activities will happen as they happen and there is not much you can do about it. Let it just happen in its natural course. Sometimes you will feel close to burn-out and will take a break for a week of even a month. It's not really a problem for as long as you keep true to your project, have an overview of the schedule in your mind and continue the active work on the project. Whether you will release it a few months sooner or later will not make a big difference. The audience will welcome it when it comes. Important is that it eventually comes and you don't kill yourself in the process while trying to make it come sooner.

16. Aggressively overestimate development time

One other trick that helps very much in keeping yourself motivated is overestimating development time wherever possible. This strategy has a good reason for existence since work being performed on limited individual time can often be delayed or postponed because of personal tiredness or other unrelated events in life which take precedence. Then it is good to assign more time to the milestones you have in your schedule. When you suddenly finish things quicker (and that will happen in most of the cases) you will feel very satisfied and motivated. The more often you get the feeling of the work progressing quicker than planned the less you will be susceptible to the sensation that your work is endless and is never going to be finished. If you're working on user management and you know you make it complete in three weeks, assign two months, accounting for your tiredness, bad mood and other home activities which will require your attention. When you indeed finish this part in three or four weeks you will like yourself for having gotten it done one month ahead of schedule. If you're planning on adding some forum interaction functionality that you are confident you can do in two months, assign four months to the work, planning for unexpected issues that will no doubt happen. When the work is done in just under three months it will make you very satisfied and eager to continue cracking at an incredible speed.

17. Watch for burn-out

Through the entire work keep an eye on your health and your mental state. If you're starting to feel like you're approaching a massive feeling of tiredness knows as a burn-out, drop the work immediately before the burn-out actually happens. Take a break for a week or more depending on how it goes for you. Remember – you don't have a rigid schedule or deadlines hanging over you. You're free to plan your time the way it is best for you. Try some other hobby, go seeing things, do something different. When you've rehabilitated, return to your pet project. It is best when you work on it fresh, relaxed and motivated. If you're stressed and hard-pressed to keep to a schedule, the quality of your work will suffer. You will make mistakes, make wrong decisions, introduce bugs. And you don't want this to happen to your favorite project because you want it to rock the first time you publish it. You don't wish to be changing things later which appear to have been badly designed because of your haste and bad mood. Then do a service to yourself and your future users – only work on your project when you feel great and when you are confident you will perform the work to the best of your abilities.

18. Avoid office politics

We all know how hard office life can get. It's not just about doing your work, closing the tasks and keeping to the schedule. A part of working in a collective is integrating into the team, embracing the working atmosphere, socializing with the colleagues and playing an active role in the life of the company. It is often fun to do. Unfortunately many companies are infected with personal conflicts, internal politics and power struggles between different parties. It all consumes a lot of your energy, even if you are not involved but just an observer. Because when you're thinking about those problems, you inevitably take a side in the conflict in your mind. Then you get angry, you get negative feelings towards certain people and the situation. Then you start playing in your mind how you could change the things, what shall you do, what will you say and to whom to rectify the situation. It takes over you and you can't cast it off when you come home. Meaning the little of your personal time is lost by relieving the events of the day and being unable to abstract away from those problems. The solution is to avoid getting involved in the first place. Stay neutral. Don't participate in conflicts. Don't dwell on them. Avoid getting emotional about events and people. Go to the other side of the building, visit your other nice colleagues, walk around the building for a while. Try to save your emotional energy for the evening for you precious little project. If however you can't avoid having strong emotional outbreaks on a daily basis because of the specifics of your working environment, then consider changing a job to something more pleasant and less stressful. That will save you more energy to apply to your personal project and the stress is not paid extra for anyway.

19. Minimize evening meals

Many people only take snacks during the day and have a large meal in the evening. It's one mistake that can ruin your endeavor. Eat well during the day but keep evening meals to a minimum. Absolutely avoid meat or even fish. They make you tired and sleepy shortly after the meal. Any attempt to concentrate on your work will fail, any mental activity will just not go. The only thing you will be able to do is to watch the television. You will wrongfully attribute it to having gotten tired during the day but it is not so. It is the heavy meal that can render you very tired in an instant. This feeling will eventually subside in a few hours but not before it's too late and it's time to go to bed. Don't surrender your precious personal time to your stomach. Take light food instead. A salad is very good to give you strength but keep you fresh. Some tea with baked goods will sustain you for a few hours too. And don't worry about the lack of the heavy meals – you've had them earlier in the day and it's not healthy to take them in the evening anyway.

20. Do no business trips

One pretty much evil thing that can knock you out of the zone is going on a business trip. Traveling for many hours, staying and sleeping in an uncomfortable hotel, trying to cope with a different environment and a different climate, lacking all of your home comfort, it's enough to make you so tired you wouldn't want to do anything else on the upcoming weekend but relax. This is how an entire week can be lost. Additionally a long break in your work for a few days can take you out of your zone too. You will forget where you were in your project, what you were thinking about the last day home, what ideas you had, what you were about to do. It will take time to recall those things and get back into the zone. It's wise not getting into this situation in the first place. Say a firm no to regular business trips, they will ruin your personal life and will jeopardize your pet project. If you can't avoid business trips then perhaps it's time to change your occupation into something more favorable to personal life which will allow you to have your personal programming projects too.

21. Suppress doubts and quitter thoughts

A personal programming project is often quite a challenge, from the professional and perhaps even more so from the organizational side of the things. Throughout the work you will feel tired and exhausted many times. Often you will get the feeling like you've been working hard but the project hasn't been advancing fast enough. You will have doubts if you ever going to finish that major undertaking. It will seem like it will take some five years more to finish all of the features and clean up all the mess you made in the process. You will consider just dropping it, pronouncing it a failure and returning back to your daily work. Find the strength in you to cast away those feelings as soon as they make their appearance. Just say promptly no without dwelling on them. Be honest to admit that you are tired indeed but don't let your feeble body and mind take over your strong spirit. Usually these quitter thoughts come in the evening, when you are tired and exhausted by the happenings of the day. Know this phenomenon and let it have no influence on you. The next morning when you will stand up fresh and relaxed you will look at your work with different eyes and tell yourself it is just a piece of cake. You've gone thus far, you will reach the finish as well, no doubts whatsoever. Remember – evenings are your enemy and mornings are you friends. So watch out who is talking to you and deal with it appropriately.

22. Ignore the factor of time

One of the common delusions among programmers is that the time-to-market is critical, that you must launch your product as soon as possible at all costs otherwise the competitors will pass ahead of you and will take the firm ground and you will lose your only chance. It may indeed be so in certain situations but generally speaking it is a wrong belief. I doubt anybody aims today for an entirely new unexplored market because they hardly exist any longer. Most of the new projects are advancements over the existing solutions. The goal is to improve the old creepy applications and make things right, make them work more efficiently and look beautiful. Removing the current limitations, extending the old concepts, combining the things in a new and unique way, adding a modern user interface, improving the user experience – these are all the cornerstones of the newly launched products. Those improvements make the whole purpose of your application, its unique selling points. You can't leave them out for a later time but launch something already now. If you do your product will be no different from that of your competitors so nobody will appreciate it. And hacking things quickly won't probably cut it. You need time to make things better and bring innovation. Therefore take all the time you need but do it right. At any given time there are several people who are launching something similar right now, the exactly same thing that their competitors already have in the market, without any noticeable improvements but still hoping to somehow get the piece of the pie. Quite naturally nobody wants them, they fail to attract the audience and they quickly fall into oblivion. Therefore whether you launch today or tomorrow makes no difference because technically you're already late – your new competitors just launched yesterday and their competitors the day before yesterday. The real battle is not about who launches it sooner but who makes the things better. Having realized that now take your time and implement those advancements that make your application rock and only then launch it. Then you will have a strong advantage over your competitors who will be challenged to beat your advancements with their mediocre products.

23. Aim not at perfection

While it is necessary to properly implement the key functionality areas that create the value of your product before launching and make sure they work flawlessly, it must not turn into the quest for perfection on which many programmers depart but never return. Stop yourself from endlessly polishing the chrome and continuously refactoring your project. Any new day is different and you will always have new and great ideas how to better structure your code to bring it into the utmost harmony and perfection. Learn that the perfection is a mirage, you always see it just before the horizon but you never reach it. Know where to stop. Achieve a clean and logical structure of your application, so that adding new features, extending the functionality and debugging the workflow goes through a simple and a straightforward process. Then it is sufficient. If you have a clear overview of the project architecture and immediately see what changes and where should be made to add new functionality or adjust an existing feature, then it is perfect enough. Not absolutely perfect, but perfect in the context that matters. Refactor as necessary to achieve that state but then stop and move on.

24. Get the core right

The project code is like a living organism, it's constantly changing, growing, evolving. You reorganize modules, you restructure components, you optimize certain areas. It's a natural process that will always be there. Very often it is not possible to find the correct way of doing things right from the start. You discover it only with time as your project grows and evolves. You must accept it and not blame yourself for having made mistakes at an earlier stage. What you however should do is to try to get the critical areas as close to right as possible from the start. For many data-driven applications that would be the data model. Consider it carefully and try to make it as future-oriented as possible. It is quite a pain to change the data model for a live application that is in production and being actively used, though it is of course possible. For web applications that essential part would be the structure of the public URLs. That matters because the pages of your application will be indexed by search engines and linked to by many other people. Changing the format of the links can result in a rank penalty SEO-wise and in many lost users who will follow broken links. The internal structure of your application on the other hand is an internal matter entirely and can be changed later without the outside world noticing any difference. That is why it is necessary to pay special attention to mission-critical areas but it is quite acceptable to take it easier with the other aspects of your application.

25. Avoid immature product

With all that burning desire to publish your product sooner rather than later and get the feedback from your users as early as possible do not make a mistake of launching an immature product. If your application is still only a prototype of your great idea and is not ready for prime time, this will be a failure. Before all, the product has to be immediately useful to the users. If not they might give you a feedback but will go away. You don't want this to happen. Think of the key features which will make your product tick, without which it is useless. Think of your unique selling points. They must be implemented too. Consider the workflow your users will follow. What will they start with, what will they do next, and what would they finally want to do to complete their transaction. The users must be able to initiate interaction with your application, obtain the value they are looking for and register the fact that this transaction was useful to them, thus closing the circle. Your application must support it from the beginning to the end. If it does the users will forgive you for not having all of the bells and whistles in place yet, they'll know you're working on them and they are coming. In the meantime they must be able to use your product already, solve their problems and absolutely have fun in the process. Make sure that you've gotten to that state prior to launching your product.

26. Avoid premature launch

When your project seems to be finished in the first approximation you will naturally want to immediately launch it. Technically it is easy to do perhaps even the next day. From the organizational point of view it may not be wise if you're not ready or when the moment is not right. Before launching you must have your promotion strategy clear to you. You should know where and how you are going to present your product. You must know and understand your audience. You must have promotional texts ready and standing by. You should already anticipate what questions your users will pose and how you are going to respond to them. You need to understand what image of the product and of you as of its founder you wish to communicate and how you are going to make it. What attitude towards your users you will show, what role in supporting them you are going to play. If you haven't quite figured it all out during the process of the development (which is unlikely but still possible) then it is the time to take a break and think of those important moments now. Launch only when you've got it all covered and you are ready to step into the limelight. That will naturally take much dedication and significant time on your part so you must have that at your disposal. If some other activities at the moment require your attention, whether it is business affairs, career issues or family events it might be wise to postpone launching your product until you've cleared your mind from the other problems and can focus on your project fully, at least for the first few months which will be crucial to the success of your venture. Your users will immediately notice whether you're committed to your work or doing it part-day, lazily, only when you have available time. Don't make one of the most serious mistakes and don't disappoint your users with your wrong attitude right from the beginning. Wait for a favorable time and only then launch it. Your users will immediately see it that you've seriously and deeply committed to your project and they will give you bonus points for that.

27. Avoid common distractions

As it is well known programming work requires a great deal of attention and concentration. That's why programmers have problems working in noisy places with constant interruptions and always seek a refuge in a quiet place. With personal projects it is even more serious. A noticeable amount of focus and concentration is required upfront already and many programmers don't cut it. Add to that common distractions of your daily life and that can ruin a project entirely. At home there are many of those, small talks with your relatives, your children, your dog. Which is why it is very important to find the place and time to work on your personal project without being distracted by anybody or anything. Go working to a room which is seldom visited. Use the time when you're alone in the house, perhaps early mornings when everybody but you has already left or even better evenings when everybody but you is already asleep. Another option is to use the company's office in the weekends when it is deserted, provided, of course, the company does not object. Renting office space is something only few can afford for a personal project which brings no earnings, but if this option is available to you then why not. Important is, you can stay focused on your project for uninterrupted periods of a few hours so that you can accomplish some work.

28. Minimize the daily routine of life

Most personal projects are developed at home and at home there are always things to do. Buying of foods, cooking, washing of clothes, little house repairs, chatting with neighbors, helping in the household, these are the small things which tend to accumulate and suddenly consume all of your available time. You need to learn to keep them to a minimum for the duration of your project. Not quite abandon your living environment and isolate yourself from your social circle, but optimize and minimize time wasted for those activities. Instead of buying raw products and cooking for hours buy finished products that can be made ready to eat in five minutes. Instead of manual washing use a washing machine. A dishwasher is a great time saver too. Make quick and minimal house repairs leaving the big work for some later time. Get hired workers to fix things for you. Find a way to cut down the time the daily routine takes from your life and wisely use the freed time to invest it into the work on your favorite project.

29. Say no to recreations

Among many types of distractions that exist the most dangerous ones are those that you like. It is because you don't perceive them as distractions and you readily impose them on yourself. Watching television, playing computer games, hanging out online, playing with your dog, going on a picnic with your friends. These are the activities which you can't plan to start and end precisely as you want them to. Usually once you start you're taken for many hours if not for the rest of the day. Succumbing to passive leisure or activities which do not require mental work is very easy and happens quietly, unnoticed. You must learn to watch yourself and be able to recognize the danger the moment it shows its face. When you're about to engage into a usual recreational activity of yours say firmly no to it. Instead of wasting your time for pointless amusements go back to your computer, heat it up and implement a couple of new features to save the day.

30. Don't mid-jump into another project

Enthusiastic programmers always have a multitude of fantastic ideas. Many more come in everyday from the web, blogosphere, your colleagues and public events. In this situation it is extremely important to keep focused on one particular project you have already started or about to start. Write down all your other ideas as they arrive but don't act on them. Stay with your one project, exclusively commit your entire resources to its development and see it through. Don't let other ideas distract you. Don't jump in the midst of the process into another project because you very much want so. I know many programmers have an issue with many interesting ideas they bounce between, trying one then another, doing the proof-of-concept then abandoning it and going somewhere else. You need to learn to stop doing that. If you have a serious intention of finishing things, you have no other choice but to stay focused and resist an inner urge to switch to something more amusing, more interesting, brand new and cool. Your current project has all that, it's just your sense organs have been dulled by the time of working on it. Review the previously given tips on how to sparkle your motivation and how to keep your spirit high and apply them to your work. With time you will learn to derive continuous joy even from the long-term projects you will be working on.

31. Quit your regular job

This one is a strong advice and it's not for everybody. Obviously not every kind of a project requires that much of exclusive attention. If it is a simple utility or some automation script it can be accomplished during off hours. If you're developing a relatively simple non-profit project without a tight schedule and aspiration for market domination you can continue with it whenever you have time for it. It all changes if your experiments have led you to a strong idea of a quality product that has real chances of a market success and wide acceptance. Then you obviously want to push it and turn your private development into a real product. If that is a case at some stage of the process the work on your personal project will require exclusive attention. Usually it's after the proof-of-concept is completed and you have a clear image of the product in your mind. At this time you seriously need to put in many hours of hard work to bring your application to the state of a product ready to face the world. If it is a large product you can't avoid switching to it exclusively. It's one other often impenetrable barrier where a personal project fails – when the founder is not fully committed to it and is not willing to risk the stability of his permanent position. So he plays on the two fronts hoping to somehow pull it off. Sometimes it works out but more often than not the project eventually dies from the lack of attention. If you're indeed have a strong idea for a great product then you should know you might face the need to choose between your daily job and your project if you wish it to succeed. To do so first make certain arrangements. Save funds to survive for at least a year without a stable income. You might need to rethink and optimize your common expenditures and give up certain luxurious habits. If you have a family to support it clearly complicates things. On the other hand you might have an option of living without having any substantial expenditures, perhaps with your parents or a life partner, it depends. It is then another asset that works to your advantage. And naturally you should consider your current job in the perspective. Whether it brings you satisfaction, good income and a promising career future, these can all be the arguments against leaving it. If however you're not happy about it and were thinking about leaving it soon anyway then here is your chance. To continue pulling the burden or toss it out and commit to your own venture. The choice is yours and it entirely depends on your priorities. Make sure though to get them clear in your mind.

The tips and advice presented have been gathered through many years of my personal engagement into my own programming projects. I have watched myself during the entire time and learned many things about personal motivation, focus, organization and priorities. Based on these observations I have worked out certain recommendations to aid myself in this adventure. These have worked for me – I hope they will be useful to other programmers as well. Perhaps you have already tried some of them and they worked great for you. Or possibly some of them didn't quite do the job. Or maybe you have your other insightful advice. You are encouraged to share here your experiences with everybody.