Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm a senior student at my university and chairperson of IEEE Student Branch there. Recently I was thinking of some idea to acquaint students with the professional environment, how software is produced in the industry and get a practical experience..

Obviously trips to software houses are not enough and we cannot provide this many internships. So the idea of simulating a software house within the university popped in.

Resources at my disposal are students with their own laptops, university UPS and lan network with internet access, and a reasonably sized room with a whiteboard and three hours free time daily.. :)

However, I have absolutely no idea where to begin with. Milestones or whatever it may be called, are Requirements Document generation, sharing of resources, delegation of tasks, version controlling etc...

I'd really appreciate some advice, programming tools (for JAVA), communication tools etc and other things used in a decent software house...

Technologies to be targeted shall be random possibly starting with J2EE Spring Hibernate and Later Visual Programming in .NET C# and ASP.NET MVC as well as Android or iPhone development....

share|improve this question

closed as too broad by gnat, Bart van Ingen Schenau, GlenH7, MichaelT, Kilian Foth Dec 13 '13 at 8:33

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

I'm probably missing the obvious here, but what about getting a sponsoring professor who could possibly get you some grant money and work on one of their projects? – Dunk Mar 14 '11 at 21:32
up vote 4 down vote accepted

Having the possibility to work 3 hours a day, simulating to be a development house is a great idea, and opportunity too. Many development companies have begun on similar ways, my best wishes.

Answering your question:

In my experiencie, you should focus in 3 main aspects but only advancing when you feel one stage has been successfully complete:

I - Get the team
II - Set development management basics
III - Set software process management basics

So, i will now explain these stages.

I - Get the team

1) Get a real project to develop: preferently a small project within a small company
2) Get interesed students: just show them your work plan, if they are interested they will come, also mention this is a real opportunity
3) Concentrate on obtaining and testing client requeriments
4) Discuss openly initial system arquitecture and design with the team and from there choose programming lenguage and implementation technology
5) Create a basic schedule from your requeriments, inputting develop and testing dates
6) Just begin the project and watch your team self-organize, while you ask them to keep on schedule

II - Set development management basics

When you finish your first project, begin to consider development management, as you will probably had problems fullfilling client requeriments:

1) Choose a development methodology (Scrum, XP, others)
2) Standarize your basic development tools (programming language, development enviroment, etc)
3) Create and fill in positions according to your team characteristics
4) Get another project and put it to work: this time the project and client scope should be larger than the first project
- Also, consider many aspirants should have quit at this time, so the process will be much more controlled

III - Set software process management basics

When you finish your second project, concentrate on the following, as you should probably had problems with a succesfull software implementation:

1) Choose a Software process methodology (CMMI based, RUP based, others)
2) Define document and process control items
3) Define process and communication tools
4) Get a bigger project and client
5) Figure it out and put it to work

After all that...

When you end this stages, you will surely feel more confident about wich methods, tools, programming lenguages, etcetera to choose from, just remember this:

  • There is no way you can put a process to work without living it, specially when referring to software development.
  • Software development is always complex and will not work to every scenario, so don't try to stablish the perfect process, just a working one and improve it where it allows you to be improved.
  • With software development methodologies you can't expect much quality with unexperienced teams, you can only expect more tasks completed in a moment.
  • If you successfully executed stage III (and see any benefits from it), then congratulations because you have acchieved something that not many teams has ever get to work.

That's about it... good luck!

share|improve this answer
Very Comprehensive and Very Useful... I don't have enough reputation to vote up sadly :( – tGilani Mar 15 '11 at 4:27
Thanks, and no problem... you will have eventually ;) – Ron-Damon Mar 15 '11 at 6:13

I vote against version one. it costs money and is way too clunky. I recommend pivotal tracker for doing very basic, lightweight agile development tracking. if you are using whiteboards, you may be able to get away with stories on index cards.

for a dev environment, eclipse is hard to beat for java, and it's free.

I agree with subversion and hudson for source control and automated builds respectively, using maven for configuring a project and managing packages.

setting up builds and releases is a very useful exercise for all developers to go through. it's important to incorporate automated testing, javadoc and other document generation from source, and perhaps some static analysis tools. maven is a good tool to use because it lets you get started very easily with defaults, but has a lot of configuration changes you can make as you get more comfortable with the tool.

another useful tool to have would be a wiki. one of the big software challenges is keeping documentation fresh and available, and a wiki provides a very flexible tool for quick information sharing and updating. i like confluence, but it costs money. of the free ones, either trac or mediawiki are pretty good, but there are probably a million others i don't know. requirements can live on the wiki until they get structured into user stories that can be stored in pivotal tracker.

when you do planning, you should set an iteration length (probably a week or less), and at the beginning of each week decide which stories you will pull into that iteration, and then track progress daily (quick face to face sync-up for the team at the end of the day).

share|improve this answer

As this is a pretty broad question, I'll add my "partial, in no way complete" suggestion here: Start with the basics that every professional development shop will have... perhaps ask local shops what they use for:

Source Code Control (I'd suggest SVN as it is free and widely used, Mercurial seems to be on the way up, so that is another possiblity)

Project/Bug tracking (The last shop I was in used VersionOne for managing a scrum process - seemed to work fairly well)

Automated builds (Used Hudson in my last shop)

Assuming you have an actual project you will be building, you'll need the above basic tools to help manage the process.

If you don't already have a project in mind, maybe you should build your own bug tracking/project tracking solution. There are, of course, plenty available, but what better way to learn about managing a software project than to write software to do just that?

share|improve this answer
None of us would be experienced in using any of these tools but that's the whole point of simulating a software house... Thanks for guidance... – tGilani Mar 15 '11 at 4:30

You can Hold a Contest...

The Contest Runner is the "Client". The teams need to submit a proposal, Design and implement the system. They need to self organize. Teams of 5 or more individuals will force personally clashes.. adding a nice real world touch.

Because they being judged, they must pay attention to the details and can't leave outstanding bugs (or obvious features).. Perhaps you can get a sponsor, or enter them in an existing competition.

share|improve this answer
Alright... Did you really read my Question or just posted the answer after reading the title...??? – tGilani Mar 14 '11 at 17:31
You're welcome. – Morons Mar 14 '11 at 17:56

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