Ask HN: Staying motivated, personal software products.
7 comments
In style, you're a mathematician (see the third item here: http://jcdverha.home.xs4all.nl/scijokes/6_2.html although I prefer Scientist to Physicist (perhaps because I was on a chemistry track)). Once you're satisfied there's a solution to the problem, you're happy.
I'd say that as long as you occasionally reify your designs into real stuff so you know you're generally right---I assume you do this at work, as you say they pay you for it---you don't have a real problem. And if you're truly good at this, you should angle for software and systems architect positions.
I certainly find my mental state and motivation shifting once I've found solutions to all the hard problems of a project I'm working on. And I by and large don't do personal projects; unless they're a means to an end, I've had more interesting things to do. (Now that I'm retired I'm working on changing that.)
I'd say that as long as you occasionally reify your designs into real stuff so you know you're generally right---I assume you do this at work, as you say they pay you for it---you don't have a real problem. And if you're truly good at this, you should angle for software and systems architect positions.
I certainly find my mental state and motivation shifting once I've found solutions to all the hard problems of a project I'm working on. And I by and large don't do personal projects; unless they're a means to an end, I've had more interesting things to do. (Now that I'm retired I'm working on changing that.)
I do actually have a mathematics degree, so your appraisal hits home.
I think you have to define, for yourself, what it means to finish. For example, I see 2 forms of finishing here that you may want to consider:
1. If you are doing this as a learning exercise, and you find yourself quitting when you get to the point where you are no longer learning, then there is nothing wrong with that. You are indeed finishing, in a sense, because you have set your goal as, "I am going to work on this project up until the point that I am no longer learning." So, you tackle the challenges that further and expand your learning. If learning is your desired end result, then you have completed your stated goal.
On the other hand...
2. If you want to do more than learn, if you want to take your ideas to the next level and put something out there into the world that other people will benefit from and use, then this is a different form of finishing. If this is what you want to do, and you find yourself bailing when you are no longer learning, then you will need to either 1) muster up the power to finish the boring parts yourself or 2) engage someone to do them for you. If you do not have the energy to do those pieces yourself, or engage someone to do them, then you may need to evaluate if you have passion for the particular project that you are working on. I wrote about this previously [1]. On a related note, I have also written about "Doing the Work"; it might be helpful to you as you work through finding your way [2].
One of the biggest challenges in life is finishing as it is defined in point 2, above, because it involves pushing through when the going gets rough and boring, when no one believes in you but yourself, or when things are crumbling around you as you fight to not lose sight of the personal vision that you have to bring your light into the world. Lombardi said:
"And in truth, I've never known a man worth his salt who, in the long run, deep down in his heart, didn't appreciate the grind, the discipline. The difference between a successful person and others is not a lack of strength, not a lack of knowledge, but rather... a lack of will."
Wishing you the best.
[1] https://news.ycombinator.com/item?id=6122593
[2] https://news.ycombinator.com/item?id=7076143
1. If you are doing this as a learning exercise, and you find yourself quitting when you get to the point where you are no longer learning, then there is nothing wrong with that. You are indeed finishing, in a sense, because you have set your goal as, "I am going to work on this project up until the point that I am no longer learning." So, you tackle the challenges that further and expand your learning. If learning is your desired end result, then you have completed your stated goal.
On the other hand...
2. If you want to do more than learn, if you want to take your ideas to the next level and put something out there into the world that other people will benefit from and use, then this is a different form of finishing. If this is what you want to do, and you find yourself bailing when you are no longer learning, then you will need to either 1) muster up the power to finish the boring parts yourself or 2) engage someone to do them for you. If you do not have the energy to do those pieces yourself, or engage someone to do them, then you may need to evaluate if you have passion for the particular project that you are working on. I wrote about this previously [1]. On a related note, I have also written about "Doing the Work"; it might be helpful to you as you work through finding your way [2].
One of the biggest challenges in life is finishing as it is defined in point 2, above, because it involves pushing through when the going gets rough and boring, when no one believes in you but yourself, or when things are crumbling around you as you fight to not lose sight of the personal vision that you have to bring your light into the world. Lombardi said:
"And in truth, I've never known a man worth his salt who, in the long run, deep down in his heart, didn't appreciate the grind, the discipline. The difference between a successful person and others is not a lack of strength, not a lack of knowledge, but rather... a lack of will."
Wishing you the best.
[1] https://news.ycombinator.com/item?id=6122593
[2] https://news.ycombinator.com/item?id=7076143
Work with other people. Working alone both removes one of the most powerful human motivators and can create huge blind spots you aren't paying attention to.
You might be scared to finish. When a project is incomplete, it still has potential to be world-changing. When it's released, you find out if it is or not.
When I catch myself doing this, what I do is set a deadline + cooloff period. For example, I must ship it by the end of the month, otherwise I must put it aside for six months. Sometimes that creates an urgency to finish, but sometimes it gives me the time off to think objectively about the project. Whereas continuing to poke at it for six months wouldn't get me anywhere.
When I catch myself doing this, what I do is set a deadline + cooloff period. For example, I must ship it by the end of the month, otherwise I must put it aside for six months. Sometimes that creates an urgency to finish, but sometimes it gives me the time off to think objectively about the project. Whereas continuing to poke at it for six months wouldn't get me anywhere.
Chose one project you really really want and then continue no matter what.
I'm making a markdown-like format for sheet music in SuperCollider.
I'm making a markdown-like format for sheet music in SuperCollider.
That's the problem. I don't really care about the end goal. I program to learn things, and when all I'm left with filling in the rote nonsense that completes a project makes it robust, I'm not learning anything. I'm just re-iterating what other people have done, I'm not learning anything just going though motions.
I do it for work, but that's because they pay me.
I do it for work, but that's because they pay me.
I think it's safe to say that the answer to your original question, "what keeps you going after you've solved the interesting technical issues in a software project?" is care for the end goal, the end goal being a project, not the learning.
Find out if you really don't care about the end goal if the end goal is a project itself. If that's the case, maybe your actual end goal is to keep learning new things for personal pleasure. If you do decide that this is it, no reason to be "ashamed" or worried that you don't keep going after the technical challenges.
Just be honest with yourself to see if you really don't care about the end goal or you are not very familiar/comfortable with what comes after the technical challenges and are rationalizing ways to keep in this comfort zone.
If you do realize that you are actually _afraid_ to care about the end goal because of what is needed to get there, then work on learning something you are completely unfamiliar with. Maybe this will 'break the spell' and reduce your fear (that leads to a possible procastination).
If you - after a honest look at yourself - decide that you are _really_ not afraid, and that you _really_ don't care, then the next step is to ask yourself if you are happy with it. If you are, problem solved =).
Find out if you really don't care about the end goal if the end goal is a project itself. If that's the case, maybe your actual end goal is to keep learning new things for personal pleasure. If you do decide that this is it, no reason to be "ashamed" or worried that you don't keep going after the technical challenges.
Just be honest with yourself to see if you really don't care about the end goal or you are not very familiar/comfortable with what comes after the technical challenges and are rationalizing ways to keep in this comfort zone.
If you do realize that you are actually _afraid_ to care about the end goal because of what is needed to get there, then work on learning something you are completely unfamiliar with. Maybe this will 'break the spell' and reduce your fear (that leads to a possible procastination).
If you - after a honest look at yourself - decide that you are _really_ not afraid, and that you _really_ don't care, then the next step is to ask yourself if you are happy with it. If you are, problem solved =).
Honestly as dumb and petty as it sounds. The only goal I see to finishing software projects is to be able to say with confidence that your implementation is better then somebody else's code or project on a technical level.
To have a project as a proof of understanding. Its one thing to say, "Yes I understand how to do dec64 math." Its another to say, "Yes I understand dec64 math, here's my implementation."
Its kinda stupid I know, but that's literally my frustration with not completing projects. Its petty, so I don't indulge it.
To have a project as a proof of understanding. Its one thing to say, "Yes I understand how to do dec64 math." Its another to say, "Yes I understand dec64 math, here's my implementation."
Its kinda stupid I know, but that's literally my frustration with not completing projects. Its petty, so I don't indulge it.
That's somewhat competitive, but I wouldn't call it a problem. Maybe you should redefine what kind of projects you tackle? From your definition, you could call a project "done" by the time you implement the dec64 math library, or whatever challenge is in the project.
Why don't you just release the library as open-source? This would give you a sense of accomplishment (because you did complete something), and possibly pride, if the library becomes popular.
A key point is it being open-source, though: so you can focus only on releasing the "proof of concept", but letting other people focus on the details, the edge cases, and the fixes to mundane but show-stopping bugs that make the project battle-hardened, production-ready.
Why don't you just release the library as open-source? This would give you a sense of accomplishment (because you did complete something), and possibly pride, if the library becomes popular.
A key point is it being open-source, though: so you can focus only on releasing the "proof of concept", but letting other people focus on the details, the edge cases, and the fixes to mundane but show-stopping bugs that make the project battle-hardened, production-ready.
"I program to learn things" -> As long as this holds true, you're in good shape.
One day, you'll want to start a company, or get a particular job, and whatever side projects you're doing, however unfinished, will help you do that.
One day, you'll want to start a company, or get a particular job, and whatever side projects you're doing, however unfinished, will help you do that.
You have to change your attitude 180 degrees. You sound like 99% of programmers: a techie who wants to get into business. You need to think like a businessman who uses programming to solve business needs. Do you understand the difference?
You talk about file-caching, /tmp, OSs, UI, blah blah blah; all irrelevant. You should be thinking of business needs, attracting customers, marketing, talking to potential clients within your niche. This is the important stuff.
Good luck.
You talk about file-caching, /tmp, OSs, UI, blah blah blah; all irrelevant. You should be thinking of business needs, attracting customers, marketing, talking to potential clients within your niche. This is the important stuff.
Good luck.
I have no interest in business. You missed the part where I like learning about writing software, the underlying system.
Are you literally projecting so hard I could view power points off of you? This literally has nothing at all to do with what I posted.
Are you literally projecting so hard I could view power points off of you? This literally has nothing at all to do with what I posted.
Then why do you care if you finish projects?
Don't need an answer as I don't care. Good luck.
Don't need an answer as I don't care. Good luck.
>Then why do you care if you finish projects?
Because there is more to life then money.
Because there is more to life then money.
Next I move on to testing various methods. When should a file be cached to ram, or just dumped in /tmp things like this. What is the pro's and con's of each. I'll learn the technical details of why the operating systems, development environment, etc. works like that. Finally I'll find myself about 50-60% done. Most the decisions are made from a technical level (and justify able with graphs). All that's really needed is some spit shine on the user interface, and some basic error handling in the tools I did the benchmarking and profiling in.
Then normally I just quit. I procrastinate, push the project aside. Slowly forget about it. So what keeps you going after you've solved the interesting technical issues in a software project?