Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I've been struggling with how to get my project going. I've got an old software package that is in need of desparate rewrite. I haven't compiled the source code since 2004. It still sells, it's stable but does require the “Run this program in compatibility mode for:” on a lot of the newer windows systems. It's also one of those hard coded 640 X 480 screen resolution programs. Yuck!

I can't seem to get started with this rewrite. I'm constantly fiddling around with different things. I'll play around with different fluid layouts for a while. Then I start looking at how the main menu should work and look. I quickly find out that there's this thing called "Cool Bars" and I'll spend hours playing with that.

Then I start thinking about stuff like "Oh I need to make sure that the screen sizes are preserved so when the application gets relaunched it remebers how the screens were positioned." Which leads to what happens if they have two monitors? Which leads to what happens if they have a quad screen? Yikes it's got to stop.

I have always been a slow starter. I think about stuff long and hard up front. This has always plagued me. Once I get my mind made up though bam... I'm off and running.

I'm looking for advice from some other one-person software companies that can help someone like me get off to a quicker start?

Success

Thanks to everyone for your motivation. I finally have a plan in place. I wish I could split the vote between @haylem and @ThorbjørnRavnAndersen.

I went to download.com and filtered the downloads by my software category. I sorted by "Editors Pick" and downloaded a couple of the highest rated programs. On the second hit I found the final piece of inspiration I needed.

I love yellow sticky notes.

enter image description here

share|improve this question
9  
Dude, you live on Cape Cod - go swimming damn it. Once the summer is over, then do what it takes to get rid of the compatibility warning, test it, release it, and then go from there. Here is how I jump into the ocean when it is cold - I take a volleyball and kick it into the water as far as I can. If I do not get in the water soon, the wind will take it away. Once I am in the water, then I can do the optional stuff like practice my butterfly stroke. –  Job Jul 4 '12 at 17:53
6  
Exactly why is it in desperate need of a rewrite? If at all possible refactor it. –  user1249 Jul 4 '12 at 18:01
2  
Perhaps your slower start will lead to faster development and a better product - maybe you shouldn't be trying to fix it :-) –  Danny Varod Jul 4 '12 at 18:03
    
@ThorbjørnRavnAndersen: good question there. Though I assumed he meant partial rewrite. –  haylem Jul 4 '12 at 18:03
4  
In that case, I would strongly suggest you do an update without any new functionality and SHIP that. Only then put in any new functionality. If you don't separate the two you might never ship. –  user1249 Jul 4 '12 at 18:12

5 Answers 5

up vote 34 down vote accepted

Short Version

By adopting Zed Shaw's Programming, Motherf*cker! methodology?


Longer (Serious) Version

While Shaw - despite being a bit overly enthusiatic and (way) over the edge - definitely has a point there, there's a bit more to it than that...

You quite simply need to learn to embrace something similar to a personal productivity ritual or methodology, like Geting Things Done, the Pomodoro Technique, or Personal Kanban.

You don't have to to adopt these books and tools in particular, but the concepts they advocate are entirely valid.

Keep it Simple

Here's the big secret. I use magic tools:

  • TODO Lists,
  • Time-boxing,
  • Zero-Distraction or Distraction-Free Software.

Just Do It

The process to use my magic tools goes like this:

  1. Suppress Distraction
    1. Close the office door,
    2. unhook the phone,
    3. close the browser tabs and communication software,
    4. put on your headphones (with or without music).
  2. Plan for the Short-Term
    1. Take out a pad,
    2. write tasks down for the day,
    3. and set a timer.
  3. Get Cranking
    1. Open your favorite editor
    2. and start Programming, Motherf*cker!

Sounds dumb and simple, huh?... That's because it is. Every time I'm hit by a blank-page syndrome attach, that's how I snap out of it.

You just need to get yourelf do these actual steps.

Do not over-think things, do not overengineer, do not stall.

Make it a Routine

Make this a routine, a habit. And keep it going.

"Old habits never die", they say.


Personal Anecdotes

It all starts with main()

When I was in engineering school and we'd have trouble getting started on the next assignment in a never-ending queue of stuff piling down on our ends with weeks of 70 to +100 hours of coding, we'd always just tell ourselves the following:

It all starts with main()

So you just type it in:

int main(int ac, char **av)
{
  /* conquer the world, here, now! */
  return (0);
}

And you're on your way. Stop arguing with your classmate / co-worker / pair-programmer / partner, and just start the stream of code. It's a bit like playing an instrument, where you risk suddenly having a memory lapse if you had the stupid idea of thinking "what's the next note?". Keep it natural and flowy, don't overthink it, just stay focused and let intuition and muscle memory do the rest. Not exactly the same thing, but close enough.

Home-Offices and Remote Work can be Hard

This sort of block can happen to anyone, but it happens more often when you work in isolation. Which is the case for people working remotely, from home. Which has been my case, for the past 9 months now.

And believe me, sometimes you do get into the state you just described: you just can't get yourself to do anything. Which is infuriating and frustrating all at once.

When that happens, get up, go have a glass of water, stretch a bit, take a 5 minute walk, play with your kid, come back, and use the technique describe above. It just works.

I know, I use it all the time.


There's even a lot more to it than this long version. We could write books - well, people did - on personal productivity and remote work. The key is start from these core-principles, and then adapt to your taste. Find your rythm, develop your routine and good habits.

share|improve this answer
1  
Thanks for not stopping after the Short Version. Can't wait to see the rest. –  Cape Cod Gunny Jul 4 '12 at 18:01
    
@CapeCodGunny: ahah. Well, I hope you enjoy it. I can relate to your problem, I'm quite guilty of this sin myself very often. That's why it's a frustrating one and it drives me mad: I know exactly how to snap out of it, but it's the first move that's the hardest. Helps if someone forces you to do it, and if you don't set yourself up for failure: don't leave distractions lying aroung in your real and your virtual world. In fact, I was even thinking of writing a browser extension to just nag me if I open certain websites (like P.SE) during my working hours... –  haylem Jul 4 '12 at 18:09
    
thanks. I work full time for someone else and on my time I create the software I'm talking about. So my time is very limited. I also got burnt out writing code for someone else and now that I'm not burnt out it just seems like technology went from 60 miles an hour to 240 miles an hour and I slept through the whole damn thing. BTW, Nice linkedin profile. I wish I had stuff like P.SE back in the 80's. You have my permission to tell all your friends you just kicked a US Marine Corps Gunnery Sergeant in the ass. Good job. –  Cape Cod Gunny Jul 4 '12 at 18:17
    
@CapeCodGunny: You're welcome then, glad it helps. I can relate to the burn-out too. For the past 3 years I've had 2 to 3 jobs simultaneously (full-time development, part-time development, part-time teaching). Some of it was purely professional and not fun, and when you do indeed burn out, it's incredibly hard to get out of it, isn't it? Makes you feel rather worthless. –  haylem Jul 4 '12 at 18:21
1  
On the It all starts with main vein, I have started a lot of programs by writing one that prints out Hello world\n and then modified it step by step until I, say, had a map-reduce job for analyzing hundreds of gigabytes of log data. Every time I write that trivial start, I feel silly. But it works. –  btilly Jul 8 '12 at 13:28

I would suggest that you focus on shipping a new version where the only change is the new GUI. Everything else goes in the next-next version. Do this mercilessly - otherwise you will have too much work to do.

Whenever you look at anything, use the criteria "will it help me ship?". If not, leave it for later.

share|improve this answer
    
Just wrote "Will it help me ship?" on the white board... thanks! –  Cape Cod Gunny Jul 4 '12 at 18:23
    
I never heard of the second system effect... interesting. –  Cape Cod Gunny Jul 5 '12 at 1:47
    
We, only have one chance to make a first impression. How many times have you downloaded stuff and immediately felt like it was a waste of time... all sizzle no steak. Well I've got the steak... now I need to add the sizzle. I'm not talking bells and whistles for the sake of bells and whistles. I'm talking about the kind of stuff I expect from other programs I use. –  Cape Cod Gunny Jul 5 '12 at 2:31
    
@TRA - Thanks for your help. See my final edit. –  Cape Cod Gunny Jul 8 '12 at 11:12
    
@CapeCodGunny you're welcome. Please let us know how it goes. –  user1249 Jul 12 '12 at 13:00

excellent process answers so far, but let me address the question more specifically

if it sells, and the users aren't clamoring for new features (CoolBars, or whatever), then there is no reason to rewrite it

the only issue is the compatibility warning - this is where to start; this is the initial goal (as other have pointed out, it's the only obvious flaw in the system, other than screen resolution)

so instead of getting overwhelmed with all the what-if and should-I stuff, focus instead on the very next thing to do to make progress

i suspect that would be: recompile the system in a more modern development environment, to see if the compatibility warning goes away

if it does, yay! ship it!

then go talk to your users, and see what they would like to be improved. They may or may not care about the hard-coded screen resolution, so don't guess: ask

good luck!

share|improve this answer
    
Limited reporting is another issue. Example: I currently offer only print to printer. My users want print to PDF, printer and export to Excel. I've got the printing part figured out... the main issue I have with printing is this... I need to be able to print both potrait and landscape within the same print request. I purchased ReportBuilder which handles this. I want a grid to display and manipulate data that allows ordering rows by dragging and dropping (got this covered as well). It's like having a bunch of small groups of dominos that work well. I now need the big picture to emerge. –  Cape Cod Gunny Jul 5 '12 at 2:15
1  
Consider having your paying customers vote on what features they would like to have. Three votes pr customer. Perhaps let them buy more votes. This will give you a hint what is needed. Consider having a bug database visible to your customers. –  user1249 Jul 9 '12 at 11:44

Time Boxing

Don't give yourself "as much time as you need" for analysis. Just give yourself a limited amount of time. For example, "by next Friday I will have made a final decision on which UI paradigms I will support." Or, "within 3 weeks I will have implemented a working prototype of the Widgetizer screen".

It is better to have imperfect, working software than perfect, theoretical software. So don't focus on analyzing until the design is perfect. Time boxing will force you to focus on the critical decisions, and the less critical decisions might not be made with perfection, but that is okay. You will find that most of those decisions don't end up having any impact on the final result.

share|improve this answer
    
Thanks for the examples. –  Cape Cod Gunny Jul 5 '12 at 12:46
    
@jkohlhepp: Time boxing is already mentioned in some answers. If your answer does not add value to the existing ones, it's a candidate for deletion to reduce noise. –  haylem Jul 5 '12 at 15:14
    
Okay. I search for the term Time Boxing on this page and only find it in my answer. But if you feel other questions address the same concept with different terminology than that is fine. I would suggest editing those answers to include the term though, since that is a common term for the concept. –  RationalGeek Jul 5 '12 at 18:07
    
Ah. I do see it now in the top-voted answer, with no details around it. If you consider that adequate feel free to delete this. –  RationalGeek Jul 5 '12 at 18:08
1  
@haylem just mentioning something in an answer does not automatically invalidate all other answers mentioning the same. –  user1249 Jul 8 '12 at 7:19

You need a deadline. Once you have a deadline, don't spend more than 1/3 of your time planning. After that you'd better be "doing".

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.