Is designing specifications for hobby projects the only way to complete them?

Here is what interests me. Every night, when our 3-month-old baby lets us sleep, I jump onto my computer and start coding my hobbies. I have about 20 different projects that I'm working on: various types of projects, from C ++ games to web applications, as well as some contribution to open source projects. It is truly a passion and has been for many years.

However, when I look back, I see that I was not able to fully complete one of my hobby projects. I always made prototypes and set up the most important functions, but over time, and not finishing my project, I eventually switched to another project that now seems “so cool”. Therefore, I usually end up buggy and incomplete games that have no end, no history, 3D engines that have the fastest PolygonDraw procedure, but are unable to implement anything else, etc. The list is long. I think that the incomplete Pong must have written more than a hundred times!

I was told that the tool is to write specifications for my hobby projects.

For one thing, I write a lot of specifications at work. I know how important they are for determining the product roadmap and staying schedule. On the other hand, speculation and a hobby project just don't seem to go! It seems to me that the learning curve of building a game actually makes it fun; not the game itself. Hence the pleasure of wasting time restructuring the entire engine, the pleasure of creating the most useless functions, etc.

So the question is: have you ever written specifications for your hobbies? How do they differ from work? How do you manage to complete your hobbies?

I will be glad to know when I am working on my new project: Piano Sonata Generator :)

+43
language-agnostic specifications
Jun 18 '09 at 19:58
source share
23 answers

I don’t think writing specifications is a solution to your problem. It’s clear that your “hobby projects” are what you are interested in. You write funny parts, but then avoid the unnecessary parts that are necessary for something.

If you just “program for fun,” well, you are doing well. I don’t think writing specifications is fun.

If you really want to “finish” something, the best way is not to write a specification, and not jump to another project when the coefficient of pleasure falls.

+14
Jun 18 '09 at 20:07
source share

It's all about “managing your own projects” ... even for fun.

I feel for you ... I used to have a lot of repos that usually stuck around 200 or so.

This is what happened because I didn’t do enough planning, after about 200 commits, everything becomes messy and needs to be rewritten ... then the interest disappears because it seems like it is too much trouble.

I learned to write my own specifications for personal use.

to

  • Let me concentrate to do the work, and not go into the creep band of functions.
  • Remind me what I'm doing for
  • To get great ideas before I get the encoding
  • Keep more fun for a longer time.

For me, writing my own characteristics is vital in order to do something!

You wouldn’t start a business without a plan, right?

For personal projects, I have tons of books with moleskines filled with rude characteristics and ideas. When they ripen, they are transferred from note books to real documents and coding begins.

BIG EDITING . On disk for personal effectiveness and for completing projects. I read "Getting Things Done" ... Despite all the hippie crap about the "psyche" and the various levels of the mind (which are undoubtedly not based on any science), the tips are very good.

+12
Jun 18 '09 at 20:05
source share

I'm not getting too complicated, but listing all the features and requirements that you want to include in your application really helps. As with most hobby projects, you often don't just sit down and code them right after 2 months and finish them. It's an hour here, two hours there, etc. Basically, it’s very common to forget what you were working on and what the original purpose of this great app idea is.

If you spend several hours writing down specifications and requirements, it will be very useful for you after 6 months, when you get some free time or your ADD switches in this project, and you try to remember what it is. to do.

+7
Jun 18 '09 at 20:05
source share

I recently learned that writing specifications is really what I need for my projects to be completed.

I was a little like you, many projects, jumping from one to another and never ending. Until 6 months ago, when I started writing specifications and had a kind of roadmap for my projects.

All I can say is that it really works, because you break down your projects into smaller steps, just like a race with checkpoints, and when you start marking checkpoints like this was done, it feels good, captures and will focus on the finish.

Thus, you can save only 1 or 2 projects at a time, but actually finish them. And, of course, you have an additional and quite valuable bonus to keep up with the project, even if you don’t touch it for a month or more. Specifications will always be there to remind you of the goals and objectives of your project.

This is only my personal experience, and I believe that you should try. Hope this helps you too.

+6
Jun 18 '09 at 20:11
source share

I was able to do some hobby projects and finish some of them. I'm trying to finish them all, except for some that I just can't find.

The reason I think the amount of detail needed to complete the projects is so great that it goes from the project of passion to the hard work of the project.

What helped me finish most of mine was that they remained passion until the final touches disappeared. So I just plowed them.

Will the specification help, to some extent, yes. They take you further to the project, but almost always where the passion disappears, and you are looking for the next brilliant object.

+4
Jun 18 '09 at 20:17
source share

This does not work for me! Infact whenever I write specifications, I generally make projects even larger and less likely to complete.

Sometimes the best way to do this is to just do it.

Ze Frank explains this much better than me: http://www.zefrank.com/theshow/archives/2006/07/071106.html (link video with a curse)

EDIT: just add. If you find that you want to leave your finished project for a new, great idea ... do it! Do not look back!

Completion is optional for your own pet projects. No one will blame you for not completing material that hardly anyone would even start.

The reason you started was because of passion. It is very important. You should not force yourself to "break through" in your free time. You will drain your passion, which is your most important resource.

+4
Jun 18 '09 at 20:37
source share

Usually I write the first set of specifications at startup.

I am also a big fan of paper thinking, so I draw screens, UML, diagrams, flowcharts, design elements ... It's just a matter of determining the scope of your project and the ability to observe what you had in mind. It really helps me think.

These documents will be my specifications for the entire project. I will add others as I go, but I am not trying to maintain the old ones, as far as it would be, it was a working draft: I know where I am going and I can track changes regarding my code.

Of course, some of my hobby projects are implemented jointly. In these cases, I write down more specifications in order to better communicate with my team, and I try to constantly update documents such as DB Diagrams.

+2
Jun 18 '09 at 20:06
source share

I also have several hobby projects that I have not finished yet. I have about 10 and written a specification for one of them, the largest in volume (also games).

I did not finish either one or the other, except those who do not. I think this is because I never publish the work or show it to anyone, so it is full of mistakes and never ends.

I believe that this means that regardless of whether you have a specification, it will not affect the success of the project in the same way as other factors, such as the availability of time, motivation, help and confidence.

+2
Jun 18 '09 at 20:06
source share

The only best thing I've ever found to help move towards completion is to have someone with you working on the project. Find a friend (or two) who are interested in the same, and design / copy it with them. You not only have the opportunity to give up ideas, but you also have someone who motivates you, not to mention that progress is twice as fast, so you hopefully finish before you give up :)

Of course, this requires source control, but you have already used it for your projects, right? :)

+2
Jun 18 '09 at 21:10
source share

Do you want to finish them?

I think it's wise to never end a hobby. You can continue to work on it while you live. Aciddose has been working on its virtual xhip tool for many years, stubbornly never getting 1.0, making the tool patches people worthless from one release to the next. Nevertheless, he and the users of his softsynth seem to have a great time.

Maybe if you just aim for a “release” and are not “finished,” you will be more satisfied. Betas let you keep on dreaming.

+2
Jun 18 '09 at 21:18
source share

Yes and no. I write notes in a notebook when I think about it, and add to it when I implement it. This is a slightly different process from working projects, where someone else might need to see the specification.

I finish about half of what I'm starting.

+1
Jun 18 '09 at 20:04
source share

I helped with the development of a number of systems from mission-critical security avionics to throwing away personal projects like Sudoku solver. Obviously, with avionics systems, characteristics were important for the safe operation of the system and preventing the killing of someone, but I never worried about my personal projects.

I think this is because specifications are usually boring to read and write. Joel wrote an interesting article about this and how to make them better if you write them:

Painless functional characteristics

Unfortunately, I did not have the courage to try to make my specifications more interesting for reading at work.

Maybe you should write specifications, you should try to work on some projects for or with other people? This may provide some external motivation. I’m doing web development for my cousin in the theater, and if they need a function, they won’t stop asking me about it until I finish it.

+1
Jun 18 '09 at 20:39
source share

The biggest piece of advice I could give you is to get something there - make the specification for your first version small enough for you to really feel that you can complete it, although it won't have almost all the features you want.

Once you get something there, the pressure from the users of your software will be enough to hope that you continue it. It also ensures that the direction you take in development is the direction your users want you to leave.

If you are not really getting any users, then don’t feel so bad if you drop the project - if no one is interested, this is probably not worth the chase.

If the pressure from your users is not enough to keep you focused, then open source. If there is enough interest in it, someone else will pick it up where you left off, and you can move on to larger and better things.

+1
Jun 18 '09 at 20:47
source share

Short answer: developing specifications for a hobby project is neither necessary nor sufficient to guarantee completion.

It is said ...

I keep an engineering laptop for all my personal projects. I use a laptop to record all kinds of things about the projects I'm working on. This includes project motivation, valuable resources involved during the project, things developed during the project that could potentially be reused later, key ideas received, etc. Etc. It also includes, in more detail, your question, specifications for most projects. I use a flexible / thrifty approach to create these specifications that are attractive to me in terms of costs / benefits.

btw ... I have many, many personal projects that have not culminated in a complete working system. Some of them I could begin to complete "someday." I deliberately decided to stop working on some of the others, because they completed their task (for example, introduced me to new technology, helped me better understand language features, etc.). Continuing to scroll through projects like these would lead to a decrease in returns, so I decided to reallocate my time to projects that, in my opinion, were more powerful.

0
Jun 18 '09 at 20:21
source share

Unfortunately, after writing the specifications for the core of the DIFL engine (do not bother looking, because there are no traces outside my home systems), I still have not finished it.

0
Jun 18 '09 at 20:31
source share

The real question is: what is your hobby? Whether this is a project completion or a wizard. If getting the last ten yards is hard work, you need to decide if it's worth you. Writing detailed specifications will work; so will self-flagellation if you are in such self-discipline. Nothing is easier if it is against your makeup, so you need to decide if you are worth the ultimate goal.

And to demonstrate that there is nothing specific programming in this matter, you might really like this guy . One of the main points in his work is that conceptual artists such as Picasso and Da Vinci never cared about the final execution - the idea was everything, and, claiming this, they were strangely pleased with those who finished the actual work or leaving sketch unfinished and unpublished.

0
Jun 18 '09 at 21:29
source share

I'm not sure that writing specifications is a solution to your problems (or mine, similar to something like that), however, in the case when I want to do something more than an experimental experiment, there are a few things that help me not to take a little fun from of this.

The specs are actually quite dense and should be technical, but for a hobby approach you can write a little something similar much more free, which outlines some things that you would like to show, and shows how they fit together with each other's design documentation. Although it is not as detailed or restrictive as the correct specification, it could help the driver move in the right direction.

Secondly, you can break it and, depending on your temporary benefits, maybe add a few goals. If you focus on creating one part of the project as time, dividing it into subprojects that can be tied together at the end, it gives a sense of progress when you move from part to part, rather than feeling like you are working on the same age and not you can worry more. It works if you list it on the list, as usually this should happen at least in any case.

Saying this, if your goal is to play with certain concepts and not actually create the final product, then you probably will not do this because you are not working on it. One way might be to take the above idea to break it down, and then find a way to add something personal interesting to every part that bothers you, maybe trying to add a challenge to it or something else.

I have not experienced much so far, but it’s the way I keep myself in the yard (sometimes, if I didn’t get into the common blocky reason due to inexperience) and how I approached many multimedia and web hobby projects in the past of the year. Although the guy who said open source when you get bored and let someone else pick it up, it was a good idea if you want your code to be used but to satisfy your personal goals.

0
Jun 18 '09 at 22:38
source share

I have the same problem. One thing, I noticed that XAS helped, though, lowers my ambition. how to WAY WAY low. Writing a specification is one way to prevail if you have some kind of limitation on a specification, for example, “A specification can be only one page,” or “a specification can be no longer than 300 words,” or “Spec is just that I can do one day coding. " Choosing the right balance can take some practice. If you go over with the last limit, you can impose a rejection rule for the MANDATORY project if you cannot complete it in one day.

The good thing about this is that it limits you to achievable goals. At first, this may seem silly or wrong. Or maybe that sounds reasonable, but you just can't do it, you want to do amazing things, not ordinary things! Not the little things you can do in just a few hours!

but remember this:

"A complex system that works invariably reveals that a simple system is working. The converse statement also seems to be true: a complex system designed from scratches never works and cannot be made to work. You must start all over again, starting with a simple system."

-Jon Gall

It is too much easier to make this ambitious project if you already have a FINISHED and WORKING project, which will be based on it. Then the “more complicated thing” MAY be a project that fits in one day. This is the ideal and philosophy that I am working on, because I think she has the best chance of success. Looking at past successful projects, the vast majority of them have evolved in this way, whether it was intentional or not.

0
Jun 19 '09 at 0:37
source share

It helps me a lot to divide a new function into small tasks that could be done in an evening hack. Therefore, if I have time, I simply select one task from the list and simply finish it. This is enough to get "in the stream" and make "one more".

I only do this for one function at a time, so I am not distracted by all the other interesting things that I could add to my application.

0
Jun 19 '09 at 9:52
source share

I constantly write specifications for my projects, work, at the university and beyond in my free time. The programmer’s biggest weakness is his / her memory, which is why I believe that I feel good during my thinking, writing down every thought I have in a structured document. Before you know this, you have written a complete database schema or have a specification of requirements.

I am currently working on improving my SQL skills, and I have spent a lot of free time between writing queries that record my experienced ones. After a few tricks, I had a worthy document outlining what needs to be done.

0
Jun 24 '09 at 10:21
source share

I think that the main problem is not the lack of specifications, but that something ends with something ( hard ).

It’s hard to work . It might seem that your program is 90% complete. But, occupying these last 10% (eliminating all errors, getting an application for quality release, writing documentation, etc.), It takes as much work as the first 90%. And if you want to take marketing of your program seriously, respond to emails with support, and fix other people's mistakes, that's not all. And maybe not the job that interests you the most.

It is also hard mentally . An unfinished project has unlimited potential. This is an empty canvas where you can project your unbridled ambitions, high ideals and revolutionary thoughts. Once it is finished and becomes real, you should see it with what it is. Limited. Invalid. Never the same as the idea that gave birth to it.

However, decorating something can also be very useful. You study a lot, check the reality of your ideas, your satisfaction that you have finished something, and you will find out what other people think about your work.

Some tips:

  • Make sure you really want to complete the project. I. That rewards are worth all the hard work. (If not, accept this fact and remain a happy master.)

  • Find ways to motivate yourself through the “boring” parts. Speculation, maybe if it helps you focus. But find something for you, be it the ticking of todo-objects, rewarding yourself with cookies or dreaming of glory and luck.

  • Release early, release often. The more you keep the “big release”, the more likely it is that this release will never happen.

  • First release, then rewrite. . When you feel like making serious correspondence, first release and then rewrite (if you are still for it). Software is never perfect. If you strive for excellence without any pressure to free your half-baked (but existing) code, then you will never be reached.

0
Jun 30 '09 at 11:38
source share

Most of my hobby projects do not end there. While I am working on something and learning, although I do not think this is a problem. I am not currently writing specifications, but I am training / coaching TDD. I pick it up when I write tests that are specifications. Some days I sit down and just create a bunch of tests outlining what the software should do. I have been going through these tests for several days. Its pleasant in that I don’t need to keep the code in my head, and at any moment I can sit down and make further progress by installing broken tests. Things just work, kind of surreal.

0
Jul 23 '09 at 16:48
source share

Joel's article on evidence-based work schedule works for me. Although I implemented it differently.

The idea is to break the project down into small tasks and give estimates, and then make a forecast when your project will be completed depending on the time when the completed tasks have ended.

You might think that it will take years for your project to complete, but in reality it is only two months or less from the estimate. If you work harder and finish tasks quickly, you will see the end date, which will be earlier.

I think the most motivating thing to go forward is to approach the goal you are approaching.

Plus: create what you will use later. Using the material gives you an incentive to improve it later.

0
Apr 15 '13 at 16:01
source share



All Articles