What are some solo developer programming methodologies? [closed] - methodology

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
What are some solo developer programming methodologies for smaller projects?

Just about any development methodology will work in a solo environment except for those that explicitly require a team (such as side-by-side programming). But even then you could get around that by just creating some imaginary friends/teammates or developing a multiple personality disorder.

Even as a solo developer you can use methodologies applied to large development teams.
Write a Spec.
Layout a UML.
Do pencil-and-paper UI design.
Hallway testing: If your expect a large crowd, ask Mom if it's easy to use.
Peer review: You can build ad-hoc review teams with other solo developers.
Keep an up to date schedule.
and so on...
I solo develop all the time, and these practices keep me in line with my own work and give my bosses a great resource to know what I've done and how far along I am. And they keep me on track, to boot!

The rubber duck methodology comes to mind:
http://lists.ethernal.org/oldarchives/cantlug-0211/msg00174.html

Many agile techniques work great solo:
User interviews and stories: If you don't know what your users want, why would your software be useful?
A simple spec: Or even just be a mission statement. "Let people broadcast short messages to their subscriber lists." "Use in-degree to sort internet search results." "Let people collaboratively answer programming questions." Whatever.
A strictly-ordered todo list: Helpful to keep you from drowning in thoughts.
Tangents log: A good to-do list has a "to-don't" component, so you don't obsess over things you aren't going to do (yet).
YAGNI: Stay on target. This is very important when working by yourself, because no one is there to tell you "No! Don't reinvent dynamic typing in Java! Get back to the project." To-don't lists help with this.
Test-driven development: Writing tests forces you to think about the end result, rather than getting bogged down in implementation details. You'll get bogged down enough anyway; no need to make it worse.
Frequent releases: Make yourself stick to deadlines. "We'll have a feature-complete version that includes user stories 1-4 by Friday. It won't connect to the network or save data to disk, but XYZ..."
User testing: Have your buddies look at what you're making on a decently frequent schedule -- maybe once a month, maybe every week, depending on how many friends you have and how much beer/pizza you want to feed them. Pay very close attention to what they say and do and think when using the software.
And other things that only seem like they make sense in big projects can help a lot:
Source control: Install git. It's bone simple. Use it. Don't obsess over it.
Off-site backups: Y'know. In case of house fires or floods.
A blog: But you're only allowed to write there when a release comes out. ;) Also helps you build an audience for your product before it even ships.
Hope this helps! Solo programming on a large project can be very daunting.

Follow what is laid out in this Stack Overflow question:
What Tools/Techniques can benefit a solo developer?
Also. Use Source Control. You wouldn't believe how many times I've been bitten by that on personal projects.

There's this:
http://en.wikipedia.org/wiki/Personal_Software_Process
It's probably overkill

The issue is more a question of what you are comfortable with and what problems you hope to solve. Most methodologies are used by a solo developer at some point (pair programming is a notable exception). The issue is are you actually alone, or just working by yourself? I have found that it is invaluable to have people I can bounce ideas off of. Furthermore having someone else to look at you code (peer review) is a great way to find issues that you just cannot "see". So to agree with Aiden Bell "Programming on your oen is uncool."
I would try and connect to a community (like SO) where you can bounce ideas off of others. Then you need to build your methodology in such a way as to allow for interruptions when you send an idea out.
Does that make sense? Why are you programming alone?
Pat O

Not really an official methodology, but I have done a lot of solo development (independent consultant and ISV), and here are the things I have found to be important:
Find an online organization (like
oisv.com) to share thoughts and
ideas
Make sure you take time to interact
with actual people in the real world
Set project goals, deadlines, and
milestones
Take time to do appropriate up-front
design and project planning
Set aside working hours are stick to
them
Don't work too much and burn yourself
out
Nothing is ever perfect, so strive
for good code that works, not
perfection
Get some non-programming hobbies

This is more of trick than a methodology. When you're debugging, explain the bugs out loud to yourself as though you were trying to explain it to a co-worker. It feels silly, but forcing yourself to articulate the problem out loud often reveals what the problem is.

Related

Which Programming methodology to used for Final Year Project? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I am a final year Computer Science Student and as part of my Bachelors degree I am doing a project on Data Mining of Microarray DNA expression data. I will have to develop a few algorithms such as Bayesian Networks to run on my datasets to find out how each variable(genes) affect each other.
As part of my Project Proposal I have to talk about which methodology I will use to develop my software. From what I have learnt in school and from extra reading I find that the Incremental Development model seems a good idea. I would run 2- 3 iterations of Plan, Design, Implement until I get the full functionality of the software. Could somebody with more knowledge than me please tell me it this sounds like a good idea.
The reason why I am not 100% sure which methodology I would use is because I don't have a team to work on the software, I don't have a client with requirements and I am very limited in terms of the amount of time to work on the project as I have 3 other modules. All the methodologies which I have read about seem to be for big software projects with teams of developers. What do you do if you are just 1 person and focusing mainly on getting 3-4 algorithms to work rather than focusing on getting broad range of functionality.
I was also thinking of using UML to get a better idea what I want the software to do and using like a stripped down version of an Object Oriented Methodology.
My guess would be I would have to use parts of more than 1 methodology at a very basic level but I just can't pick.
I am very confused and lost on the subject so any help is greatly appreciated.
Thank You,
For these types of work, I would suggest not to pay much of attention to methodologies, because after all, what matters is the algorithm. But, for the sake of having a response for your dilemma, I would suggest using XP (eXtreme Programming). Why?
Is light
It doesn't require filling many papers as RUP & others
Is more suited for changing evironments, such as yours
Just take a fast search at Google for XP methodology and you'll get a bunch of useful results. ARUP (Agile RUP) might be worth looking also.
I hope I can help you.
XP/TDD is harmonious with the scientific method; each iteration is a theory, the tests are experiments
It takes a lot of discipline to follow a methodology while working solo, make sure you pick one that isn't labour intensive or you'll never live up to it.
If I was back at school in your situation with what I know now I'd probably go for Test Driven Development. Unit tests are ideal for testing algorithms and will leave you with a body of tests that you can use to demonstrate that you did follow a methodology.
Your idea to do the project in several iterations of plan, design, code and test is fine however with small projects it's sometimes difficult to resist the urge to do it all at once.
In case you do get carried away and finish the project in just one or two iterations, keep notes about the order in which you did things (ideally use a version control system) so that you'll at least be able to fudge your documentation to make it look like you used several iterations. Not that I'd endorse such an approach of course ;-)

How can a Rails newbie find a job as a Rails developer? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm a Ruby on Rails newbie. I'm learning Rails in my spare time (my day job is C++ developer) and I like it. I would like to be paid to do Rails development full-time instead of C++.
How can I find a job in Rails when most job offering requires 2-5 years of Rails experience? What is the most effective strategy to get some credibility as a Rails Developer?
Thanks in advance for your answers.
I can't tell you how to get hired. I can give you the story of how I got hired, though. It may be helpful. Rather than putting the summary at the bottom, it's quite the long post:
Have a pet project
Learn all the time
TATFT: Test all the fucking time
Attend the local user groups
Share all the cool shiny things you come across
Contribute back to open source
Be active, helpful and constantly visible in the community
I got started with Ruby on Rails in September of 2006. My first project was not a blogging system like was cool at the time, but a forum system. I remember one of my first questions in the #rubyonrails channel was asking why I was getting an undefined method find on Thread, not knowing Thread was already a class.
In June 2007, I was hired at my first Rails job. I didn't know much then, perhaps a smidgeon more now. So as you can see, the process wasn't instant. Very few processes are.
What happened during this interval though was (aside from PHP contracting, being a checkout bitch and studying) that I continued asking questions in the #rubyonrails channel and refining the forum system until I got something I was happy with. In April 2007 the first official user group meeting of my home town begun and I attended that, mentioned I was doing PHP work whilst toying around with Ruby and was offered three business cards on the spot. I basically did cards.rand and picked a job that landed me an 8-month contract which I enjoyed.
I learned a huge amount during this job, as you should with any job. I applied what I learned to my forums, refining it using the techniques I was learning on the job. I've been refining it further and further since then and in its current incarnation it's probably my Open Source Magnum Opus.
After I left that job I was quickly picked up at another company where, again, I learned new things and applied what I had learned to my open source work. One of the greatest things to learn was automated testing. If you're not writing tests, you're at a huge disadvantage to those who are. I know of many prospective employers who are looking for people who can write good tests for their code.
Now that Github's about, I have a nice central location to share all my work where prospective employers can look. The only feature I crave from Github would be a list of all the projects I've ever contributed to, since this is what lures most employers. So far the "Big Three" in my mind would be: RSpec (better Hash diffing + other changes), Cucumber (That list of failing scenarios when Things Go Wrong(tm)) and Rails (documentation such as the Querying Guide and the in-progress Initialization Guide as well as bug fixes).
It also doesn't hurt to keep a blog of the technical (and not so technical) things you come across. If you provide useful information, you'll get noticed for that too. I got noticed enough that I was recruited to write a book.
I also attended the second Railscamp event in November 2007 where I met one of my future bosses and made a lot of "connections" with people in the Ruby community. I then went on to run a Railscamp in Adelaide (#4), and assisted with the ones following that in varying degrees.
I'm also very active in the community, helping out on of course here and the IRC channels on Freenode. Helping out is definitely one of the ways I've learned how to be a better Rails coder. You can witness other people making mistakes and suggest fixes, and also watch other people suggest fixes that you may not have thought of.
Currently, I'm teaching people Ruby on Rails and when there's nobody to teach I do development work. That's my day job. The night job is writing the book. I would advise you to only have one job, because over-work can lead to burn outs. That's what weekends are for, or so I'm told.
The best thing that you can do is have a live web application that is being used and is providing a useful service. Bring your laptop with the source code along on interviews and walk through it, demonstrating your mastery of and passion for the technology.
Contribute to open-source Ruby-on-Rails projects. You'll find lots of them on Github.

todo.txt and task management [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Apologies if this has been covered frequently, but I was wondering about how other people approach personal task management.
I've read (parts of) GTD, proceeded to get excited, installed a tonne of plug-ins all over the place, then let it all fall by the wayside. I've used todoist, outlook, google calendar, project. I've tried writing lists in a notepad, in 'notebook', on post-it-notes and in spreadsheets etc. None of it lasts.
Why is a simple and effective todo application so difficult to find? Because the application is so frequently used, I find that any small niggles with the application become overly exaggerated after a few days use.
So far, my favourite application is a variation of todo.txt called task
What do you use?
Sorry to be the bearer of bad news, but a "simple and effective todo application" is so hard to find because you are using the tool as a substitute for self-discipline and commitment. Statements like 'I've read parts of this and tried that and that and that but minor interface issues cause me to drop it in a few days' imply that you are looking for magic bullets and excuses.
Minor issues with the tools are a poor excuse to abandon the effort.
Pick a system and a tool and stick with it
No tool will give you the self-discipline and commitment necessary to change your habits
personal time-management is about changing your viewpoint and habits, not finding the "right" tool
caveat: some systems are more suitable than others for your personal work requirements. If you're a developer, a calendar-based system like Franklin Planner is probably not going to work, while a list-based system like GTD probably will.
Suggestion: google and review the various systems, pick one, and commit to it for at least a month. Try GTD and pen-and-paper, for example, then get fancy once the system is a habit. Once you know how you need to work the system and are committed to it, look for the perfect tool. In the meantime, the perfect tool is the enemy of the good practice, to mangle a quote ;-)
I use text files. Each contains a list of projects, separated by blank lines. Each line of a project's space includes syntax like:
'-': Item of interest
'*': TODO's
':': Code changes
'AWT': (Awaiting something external)
Text files live together and projects move in and out fluidly:
work.txt: Current work / active projects
deferred.txt: Stuff to do someday
done.txt: Finished; archived for records
The text file system is fast, effective, globally compatible and loads in a fraction of a second.
I think I'm like you (were, 2 years ago): too lazy to do anything until I find the perfect tool for it..
Yes, folks saying tools should never be mistaken to be a substitute for executing the plan, are absolutely right...
That said, one tool that seems "perfect enough" for me to drop thoses excuses for GTD: org-mode for Emacs. I really hope so, anyway.
I think this is almost a duplicate of How can I apply David Allen’s “Getting Things Done” as a programmer?
See also:
What Can Someone Do to Get Organized Around Here?
Time management tricks, tools & tips
What do you use to keep notes as a developer?
ToDoList is also an alternative
This is related to Task/issue tracking system with command-line interface which also mentioned todo.txt
Personally, I use the to do list on my Palm PDA, which syncs with Apple iCal.
I'm experimenting with better managing my time. I like starting out simple and building to complexity as it's required, rather than implement some behemoth bollocks that's hard to maintain.
To that end, i use simple lists.
http://tadalist.com
it's stupidly simple, free, and internets based so it follows me everywhere. winner
In our company we use Google Docs Spread Sheet - it's great beacuse you put all tasks into cells and you can share and coedit this document with others. It's very easy to use and doesn't require you to fill a lot of forms.
I use a sticky notes program called NoteZilla
Just scratch your task/idea/notes and forget about it. This is why I like sticky notes. No need to categorize, group. All that can still be done in NoteZilla.
I use TiddlyWiki. It's simple to use, all in one html file (so very portable).
It works great for me.
I'm echoing the above comment to some degree. For me, the tool is pretty much secondary to establishing the mindset and habits that would allow me to incorporate GTD principles in a consistent fashion. I really do love it, when I can get it to go. There's a nice sense of control and direction that comes when I can be disciplined about doing the small stuff - weekly sweeps, periodic reviews and all that.
My next GTD challenge is to get out of the trees so I can see the forest. :-) David Allen talks about the 50,000 foot, 30,000 foot, 10,000 foot views relating to goals. It's all very high-minded, but I have to get above 500 feet yet.
If you're familiar with GTD, there's a nice summary deck PDF over at DIY Planner:
http://www.diyplanner.com/diyp_official/diyp3cl/diyp3_gtdref_cl_2up.pdf
If you're a paper planner junkie (I am) the site's like crack :D
Hope it helps.
I use myLifeOrganized. The bottom line is you just need to start documenting the next thing you have to do on each task. MLO lets you easily and quickly do that.
It has a handy rapid task entry dialog and you can quickly enter data into it. You can document as much or as little as you want. This software, because of the ease of adding stuff to it, has saved my butt many times. It has helped me remember things that I had forgotten. I now wonder how many things I've forgotten over the years and didn't realize it.
I run it off a usb stick and I have it on my phone. I even use it to help me outline code.
As others have said, GTD is all about discipline: actually doing the things on your list. But, be sure to prioritize.
For my task list management, I currently use Remember the Milk, which is fairly handy with its IM integration (it sends IM reminders). My biggest challenge has been remembering to add the tasks, but I'm getting better at it, since somebody pointed out I could make a recurring task to remind me :P.

General Development Notes [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
During a typical day programming, I implement functions in a way that I would like to remember. For instance, say I tuned a DB insert function that, when I come across the situation again, I want to find what I did to resuse.
I need a place to keep the solution(what I did), and I need to find it somehow, which may be months or a year later. Using a mind map sort of idea, I was thinking about a personal wiki, but then I heard the stackoverflow podcast mention using this site for such a reason. Does anybody else keep track of slick things they've done so that they may find it sometime in the future. If so, what did you use, and in general, how do you use it?
i like to personal blog idea and using the stack for it. i'll try the idea of posting at the stack and then answering it myself, with the benefit of other people potentially giving their opinion.
As long a the stack will be around for a while :)
Jeff Atwood recommends using Stack Overflow for this kind of thing. Post a question (your problem) and then post an answer (the solution you found). This lets you share the information with the world, and maybe get some valuable feedback or better solutions.
(Wow, I got downvoted for repeating what Jeff Atwood said. I won't do that again, I promise.)
I use neomem all the time. I write notes to myself. Then I can later search for it.
You may find these questions useful
Where do you store your code snippets?
Tracking useful information
What is you preferred site for code snippets?
I use a personal Wiki, my del.icio.us bookmarks and my own blog for that. Usually my blog: When I learn something that I know I might stumble on again I write a short post in my blog.
I use WikiDPad or Wiki-On-A-Stick. It works not only for code snippets but also to take notes, record typical problems you get and how to solve them and documentation. Take my word for it, it makes your job a LOT more easier if you have proper notes... and add the power of interlinking to it and you have a killer resource. I have very bad memory and taking notes has improved my performance by an order of magnitude. It also saves you from having to ask someone the same question twice or thrice. Also, if anyone asks the same question, you can just helpfully point them to the wiki and they can read it and add to it if they need to.
The technical term for what you are thinking of is "code snippets", and googling for that will find you many programs designed to store them for a variety of platforms, including entirely web-based ones such as this one.
I set up dekiwiki on a server at work that my coworkers and I use for company specifics stuff but also for general programming tips that arise as well.
A simple wiki, may be useful. SeeTiki Wiki
I always put it on my blog. Not only am I able to get back to it later, there is also a chance that it can help someone else as well.
It's oldschool, but I keep notes in a notebook. Makes remembering solutions (or the problems that caused them) a bit easier. Usually I make 1-2 pages of notes a day.
The digital equivalent of this would be keeping a private blog or journal. Easy enough to add a search program to help you find stuff.
Worthwhile things that my boss might be interested in, like bugs and user calls all get entered into bug tracking software where it is more formally handled.
I use the excellent Trac project management system for my personal projects, and I use it's wiki as a brainstorming and note-taking tool. And, because it also hooks into the Subversion repository and the bug tracking system, I can link from my notes right to a particular section of code or a bug report.
I keep my personal projects on assembla. Wiki, Issue Tracking, Source Control... very useful.
Check to see if your editor has some kind of annotations feature. Ideally you could link a particular location in code with a small note, and store it in a centralized place. If it doesn't, that kind of plugin wouldn't be too hard to build, your biggest hurdle is going to be how to link the piece of code to a file (due to the volatile nature of code) and even that one isn't insurmountable.

Anyone soloing using fogbugz? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Is there anyone working solo and using fogbugz out there? I'm interested in personal experience/overhead versus paper.
I am involved in several projects and get pretty hammered with lots of details to keep track of... Any experience welcome.
(Yes I know Mr. Joel is on the stackoverflow team... I still want good answers :)
I use it, especially since the hosted Version of FugBugz is free for up to 2 people. I found it a lot nicer than paper as I'm working on multiple projects, and my paper tends to get rather messy once you start making annotations or if you want to re-organize and shuffle tasks around, mark them as complete only to see that they are not complete after all...
Plus, the Visual Studio integration is really neat, something paper just cannot compete with. Also, if you lay the project to rest for 6 months and come back, all your tasks and notes are still there, whereas with paper you may need to search all the old documents and notes again, if you did not discard it.
But that is just the point of view from someone who is not really good at staying organized :-) If you are a really tidy and organized person, paper may work better for you than it does for me.
Bonus suggestion: Run Fogbugz on a second PC (or a small Laptop like the eeePC) so that you always have it at your fingertips. The main problem with Task tracking programs - be it FogBugz, Outlook, Excel or just notepad - is that they take up screen space, and my two monitors are usually full with Visual Studio, e-Mail, Web Browsers, some Notepads etc.
Go to http://www.fogbugz.com/ then at the bottom under "Try It", sign up.
under Settings => Your FogBugz Hosted Account, it should either already say "Payment Information: Using Student and Startup Edition." or there should be some option/link to turn on the Student and Startup Edition.
And yes, it's not only for Students and Startups, I asked their support :-)
Disclaimer: I'm not affiliated with FogCreek and Joel did not just deposit money in my account.
When I was working for myself doing my consulting business I signed up for a hosted account and honestly I couldn't have done without it.
What I liked most about it was it took 30 seconds to sign up for an account and I was then able to integrate source control using sourcegear vault (which is an excellent source control product and free for single developers) set up projects, clients, releases and versions and monitor my progress constantly.
One thing that totally blew me away was that I ended up completely abandoning outlook for all work related correspondence. I could manage all my client interactions from within fogbugz and it all just worked amazingly well.
In terms of overhead, one of the nice things you could do was turn anything into a case. Anything that came up in your mind while you were coding, you simply created a new email, sent it to fogbugz and it was instantly added as an item for review later.
I would strongly recommend you get yourself one of the hosted accounts and give it a whirl
In addition to the benefits already mentioned, another nice feature of using FogBugz is BugzScout, which you can use to report errors from your app and log them into FogBugz automatically. If you're a one person team, chances are there are some bugs in your code you've never seen during your own testing, so it's nice to have those bugs found "in the wild" automatically reported and logged for you.
I use it as well and quite frankly wouldn't want to work without it.
I've always had some kind of issue tracker available for the projects I work on and thus am quite used to updating it. With FB6 the process is now even better.
Since FB also integrates with Subversion, the source control tool I use for my projects, the process is really good and I have two-way links between the two systems now. I can click on a case number in the Subversion logs and go to the case in FB, or see the revisions bound to a case inside FB.
I think it's great that Joel et al. let people use FogBugs hosted for free on their own. It's a great business strategy, because the users become fans (it is great software after all), and then they recommend it to their businesses or customers.
Yea FogBugz is great for process-light, quick and easy task management. It seems especially well suited for soloing, where you don't need or want a lot of complexity in that area.
By the way, if you want to keep track of what you're doing at the computer all day, check out TimeSprite, which integrates with FogBugz. It's a Windows app that logs your active window and then categorizes your activity based on the window title / activity type mappings you define as you go. (You can also just tell it what you're working on.) And if you're a FogBugz user, you can associate your work with a FogBugz case, and it will upload your time intervals for that case. This makes accurate recording of elapsed time pretty painless and about as accurate as you can get, which in turn improves FogBugz predictive powers in its evidence-based scheduling. Also, when soloing, I find that such specific logging of my time keeps me on task, in the way a meandering manager otherwise might. (I'm not affiliated with TimeSprite in any way.)

Resources