Ask Slashdot: Best Practices For Starting and Running a Software Shop?
An anonymous reader writes: I'm a systems architect (and a former Unix sysadmin) with many years of experience on the infrastructure side of things. I have a masters in CS but not enough practical exposure to professional software development. I'd like to start my own software product line and I'd like to avoid outsourcing as much as I can. I'm seeking advice on what you think are the best practices for running a software shop and/or good blogs/books on the subject.
To be clear, I am not asking about what are the best programming practices or the merits of agile vs waterfall. Rather I am asking more about how to best run the shop as a whole. For example, how important is it to have coding standards and how much standardization is necessary for a small business? What are the pros and cons of allowing different tools and/or languages? What should the ratio of senior programmers to intermediate and junior programmers be and how should they work with each other so that nobody is bored and everyone learns something? Thanks for your help.
To be clear, I am not asking about what are the best programming practices or the merits of agile vs waterfall. Rather I am asking more about how to best run the shop as a whole. For example, how important is it to have coding standards and how much standardization is necessary for a small business? What are the pros and cons of allowing different tools and/or languages? What should the ratio of senior programmers to intermediate and junior programmers be and how should they work with each other so that nobody is bored and everyone learns something? Thanks for your help.
Get a good accountant to keep the books in order. Get a good lawyer so you always have someone vetting your contracts and preventing or solving any litigation you may find yourself entangled.
Don't try to do all by yourself, delegate everything you are not a specialist so you can focus on your core aptitudes.
I have a masters in CS but not enough practical exposure to professional software development. I'd like to start my own software product line and I'd like to avoid outsourcing as much as I can.
Since you're getting into something you by your own admission lack domain experience in, unless you've won the Powerball and have a lot more money than brains, anyone you interview will realize that you're going nowhere and hence even the short-term prospects are, at best, poor.
At least with outsourcing, you can BS them as much as they BS you so they won't walk out the door shaking their head.
Bonne chance, 'cuz you're gonna need it.
"Transparent" is a shit show that trades on every stereotype going. A man in drag is NOT a transsexual.
When you setup up accountancy and have a lawyer, you can create a development team. Depending on your domains, expertise, and scale you want to enlist people for domain analysis, requirements engineering, software design, programming, UI design, etc. As it is too expensive to hire so many people, it might be best to outsource that to freelancers. Therefore, you need an appointment with your lawyer to draft the necessary contracts.
As if you are the one who maintains it.
There was an unknown error in the submission.
Business is about sales and customers. Everything else you do is completely irrelevant if you don't have sales and customers. If you don't have a good plan to sell your wares, you don't need to spend 5 minutes thinking about how you will produce them.
Especially when you lack experience, that is a setup for disaster. Instead, just start developing a marketable product out of your home. If you need help, contract someone over the internet. Grow organically from there, one step at a time. When you finally have a marketable product, then maybe you need to start worrying about sales and lawyers and all the overhead that goes with a business. By that time, your thinking will have matured.
Isn't the most common scenario for these enterprises where the programmer's customers grow beyond his ability to support just by himself?
So he starts adding people to handle the portions that he cannot, efficiently, handle himself.
If you're going into this wondering what the "ratio of senior programmers to intermediate and junior programmers" should be then I think you've skipped too many steps.
The same with "different tools and/or languages". The 2nd programmer uses exactly what the 1st programmer uses. The idea is to provide support for the founder so he can focus on what he is good at.
Looking at the successfull software companies, I would say that marketing is the most important part. No matter how good or shitty your product is, if your marketing is good, it will sell.
Don't fight for your country, if your country does not fight for you.
If you are planning to sell software to the government or business as a startup, consider source code escrow. Your customers will tend to stick with established vendors for fear of you going out of businesses and leaving them with an unsupported implementation. The source code escrow is insurance against that being more of a catastrophe for your customers than you.
Invest in dedicated technical support. It plays up as great comedy in the movie, Office Space, when the character says you don't want the customers talking directly to the engineers. You actually don't want that. Establishing a quality support team keeps the engineers productive on developing while the support group ensures the customers are getting help with their issues. Oh, and don't outsource this responsibility to a foreign country. If you think you can't afford quality support, at least staff it with a recent college grad and split that person's time between support and bug fixing.
$5 / month hosted VPS on linux = awesome!
...I would strongly recommend just getting the best people you can. In my experience good, experienced people in a small team do not mind picking up the grunt work if the team is pulling together and being productive.
[FUCK BETA]
Above and beyond any specific policy areas such as coding standards, seniority mixes and son on, the biggest and most important thing to manage is the overall software development culture. If you can energise the culture, and inspire people to believe in the mission, to fight for it like their own flesh and blood, as well as to honour each other's diversity of perspectives, you will achieve far more than by drawing policy lines in the sand. Keep it fun. Make the crew feel special. Give them a feeling that their futures are within their control.
This said, I would also recommend frequent peer code reviews - this will inspire better work, knowing that people are accountable to their peers. Also, be on the lookout for single-sourcing, and fight it off like the plague, even if it has a productivity cost. Yes, Natalie is brilliant with the middleware. But what if she gets hit by a bus, or leaves to have a kid? Defend in advance by ensuring there are others who can instantly step in and take over from her.
Again - an energised culture with a strong team spirit - a deep and powerful soul - will optimise the workplace far better than any arbitrary standards.
-- In the beginning was the WORD, and the WORD was UNSIGNED, and the main(){} was without form and void...
I'd like to start my own software product line and I'd like to avoid outsourcing as much as I can. I'm seeking advice on what you think are the best practices
The two "best practice" points that I know of are linked.
The first is to have a great deal of money - far more than you could possibly think is necessary.
The second is to be very careful, to the point of stinginess, on what you spend it for,
I would work on the assumption that it will be a year before you see any invoices getting paid and during that time you will have to pay out for both the startup costs and the people you employ. Since people will be the single biggest cost item, employ as few as is possible to get away with and work them as hard as possible - but only on things that will contribute directly on creating income. And then, only on short-term income.
Once you do that all the high-level questions will either answer themselves (and usually the answer will be "no") or they will turn out to be irrelevant to the immediate survival of the enterprise.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
Heres the deal :
Youre going to get the following advice :
1. Hire a professional to run/manage/accountant/payroll etc and you can never do anything properly.
2. Youre an idiot - stop dreaming!
Both pieces of advice are flat out wrong.
To start an actual business you dont need professionals, funding or being extra smart. What you do need to do is not listen to idiots and learn. thats it.
Heres what you do :
1. Start your business. That is - go out into the world and find someone willing to pay you CASH MONEY in large chunks for doing something. Thats at least $2000 cash on delivery of x product.
2. Put that $2000 towards your business expenses. Now go find a lawyer who incorporates businesses federally with $2000 AND make sure you have enough of it left over for a mailboxes etc address, domain name, google apps subscription for mail, web address, business cellphone and rental meeting room in a office rental place. This is your "Start up capital" or "Seed round".
3. Now go develop that product yourself. Send it to your client. be prepared to gain $0 from this transaction since your client will likely dump you after seeing that first product.
4. Develop the product some more while looking for other clients.
5. If you find any, congratulations ! You have a business!
This is how I started several years ago. Bottom line is in 2 weeks you must be break even and in the first month you must have enough to meet payroll. If you do youre fine.
The summary is a bit short on detail, but one thing is lacking: a business plan. I've never run a software business, but am running my own business now so have a bit of experience in setting it up. What do you want to program? Who are your customers? Where's the demand?
You're already talking about hiring multiple people - this means you must have a decent outline of a piece of software to develop, and it's going to be a quite big project. Do you have customers for that already? Without customers, you're going to run dry very very soon, and you won't be able to get any funding. No customers, no future for whatever you want to do. Just saying "let's set up a software shop" is a one-way street to bankruptcy. You need to have potential customers before you start producing anything, really. You need to know the demand is there. You need to have your income sources. You'll have to find customers who need a product, and who believe you can deliver what they need at good price and quality.
Hiring people is very expensive for a shop without income. I've always started up on my own, do everything in house until you have too much to do that you have to start getting other people involved. In the meantime this also means that revenue is there.
Getting started is hard: no-one knows you, and hiring you (the new kid on the block) for some big, expensive software project (the kind a single person can't handle) won't happen. They'll go to the ones they know that can handle it. You'll have to start small, slowly get your way into the market, get your name out, get your product out, let the people know you're there and you're good. Then you may get bigger projects, then you may start hiring people and setting up an office that's not part of your living room.
Good luck with it all!
There's an interesting video about software shop culture from Spotify: https://labs.spotify.com/2014/03/27/spotify-engineering-culture-part-1/
You are volunteering for a lot of misery. If you must persist, read Steve McConnel's "Rapid Development" - He lists all the normal pathologies of software development. Also read Steven Blank's "4 Steps to the Epiphany" - about the normal pathologies of the software business. The problem with reading about the mistakes everybody makes - you won't believe you will make the same mistakes. You will of course painfully repeat each mistake, guaranteed.
The best replies I have seen are from Zurk,& Kohath so let me add to that.
Either develop a market or a product that will fill some segment of a market, first before you do anything.
Now let me suggest that you target a market where the predominant players have become lazy and charge a LOT for their software.
This company Zemax started off when optical design software had a few big players. Their software, on average was selling for $30.000 US per seat. The company founder got a PhD in optical design and while he was still at school started writing his software. What he did was build a PC based optical design system that did 98% of what the big players did. But in that 98% he included what a lot of people term is that last 2% which is the really hard work. He left a lot of the simpler things for later. When he released version 1.0 he sold it for $2500.00 per seat ( with the hardest dongle he could buy at the time ) and after the first month he was moving ~ 10 units a month. In 20 years his price for the basic software has only gone up to $3600.00 a seat.
Make no mistake he worked his ass off to do it, he did it by himself for a long time before he hired his first employe. The company is still privately held and the man stopped having to work for a living many years ago, but he still does it because he loves what he does.
Hey KID! Yeah you, get the fuck off my lawn!
I strongly recommend keeping the same set of tools, language and build. Each different element adds overhead. With a small group you can't afford additional overhead.
It is likely that everyone will have to handle multiple aspects of the project. You will want multiple people who can wrangle the build and the tools the better.If everyone is sharing the process then it is easier for the team to be flexible and make the best use of the individual. It also means a relatively experience set of developers. Look for people who have shown flexible and wide variety of interest.
A clear process is also critical. Whatever system you use make it clear how decisions are made. Code review or pair program is required. You don't want to rely on one person to develop a critical system and then find out it is a mess or that no one else is clear on the mechanism.
Especially in software engineering, which is notorious for being difficult to estimate, customers are always paranoid that they are getting a bad deal, and often compensate by making excessive demands. They will try to put the screws to you, threatening to take their business elsewhere if you resist their extreme demands. You have to finesse that kind of pressure. Not an outright, flat no, but counterproposals that won't break your company. I've seen more than one business fail because they didn't push back hard enough. Sometimes the customer got what they wanted, at far too low a price and then the vendor folds, and sometimes they didn't because the vendor folded before delivery.
This problem is harder to avoid than it might appear. in one case, the company was screwed by their own employees, that, to be fair, they had put in a bad position. The employees were told that if the company didn't win the contract, they would all be laid off. So what happened? The employees did anything they had to, to win the contract. They lowballed their own company. They severely underestimated the effort and work required, coming up with a plan that called for the job to be finished in just 6 weeks, with another 6 weeks margin of error. Even the customer was doubtful that the work could be done that fast, but the deal was so good, from their point of view, that they accepted. Why management approved it, I'm not sure. Desperation maybe? They blew right past the 3 month mark of course. A deathmarch was nowhere near enough to compensate. After 8 months, they managed to deliver one working part, just enough so that the customer grudgingly decided not to sue them. The customer had little appreciation or sympathy for the vendor's plight. The rest of the work was abandoned. The company lost a lot of money on the deal. One bad deal wasn't fatal, but they made several other bad deals, and those were enough to kill them.
Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
Books, sales, marketing, employee handbooks, Government required postings, vacation policies... Get that stuff in place before you start hiring. Then treat it as a business - regardless of what your product is.
Browsing at +1 - no ACs, I ignore their posts. So refreshing!
Contradictions here:
Pay them as sub-contractors
... and ...
Have a senior programmer mentor a low-level programmer that would include code reviews and/or doing some lower level support for the senior programmer.
Even if they normally telecommute, that doesn't make them a sub-contractor. What makes them an employee are things like being mentored, being given detailed instructions on how to complete the task, etc.
Here's what the IRS says:
How do instructions and training affect the employment status of a worker?
Instructions and training provided to a worker are important factors to be considered. If you give the worker detailed instructions on how work is to be done or train the worker to perform tasks in a certain way, the worker may be an employee. A subcontractor does not need or receive detailed instructions or training on how the work should be done.
"Transparent" is a shit show that trades on every stereotype going. A man in drag is NOT a transsexual.
I would agree with that - but I probably wouldn't skip the lawyer part.
You'll want to ensure that you own any product that is written.
The most important part of any business is "cash-flow". You get that right and your business will be a success in conventional terms.
Your questions on different tools/languages do not really make sense unless you are clear about the product you are pursuing. The same about senior/junior programmers.
Though you don't want a take on Agile/Waterfall, from my experience any project which involves serious "design" works better in a waterfall approach because most of the phases of "design" may not be flexible to be accommodated in a two week sprint cycle.
Tat Tvam Asi
At a consulting company I used to work at we defined our "core processes" and in a bizarre act of simple self insight - probably because it wasn't billable - they found we had two:
1. Sell
2. Deliver
You're the system architect, are you the one doing the selling? Because I can't stress this enough, if you're not making sales you're going out of business fast. Even if you don't need a traditional salesman somebody has to promote the product in all sorts of media and get the word out to all your potential customers. The other part is having at least one guy who really groks code, since you're not it. You're going to produce a version 1.0 and it's going to have rough edges and it's going to have bugs. You won't have the to do all the things you'd like to do because you need to ship and make money, so stay on top of your early clients and make sure what bothers them is a top priority.
Is it a database-driven UI application? If so make sure you got database design experience as horrible table design and data inconsistencies will come back to haunt you, user interface designer who can also double as technical writer so your users actually understand to use it - this is also far harder than you think - in addition to the generic data processing skills. And really if that's three people, one salesman and if you haven't even started yet I wouldn't plan past that at the moment. If you're still alive and making money and looking to expand then you can start considering the rest. You'll quickly enough see where you need more people because you're out of resources, don't forget that the primary concern is running a business and secondary keeping your employees happy, if you fail at the first you fail.
Live today, because you never know what tomorrow brings
Sounds like thats a consultancy company.
I've only ever founded product companies.
Here's how we did it.
Key take away - a start-up is hard, you need to work with people you trust. If you're an engineer by inclination, stay in engineering, your start-up is not the time to be experimenting with new roles, you'll have enough to do just making sure your piece works since you're in charge... Remember that you're responsible for others giving up their secure jobs and committing to work for your idea, treat them with respect and share the wealth unequally but fairly (yes, unequally you've taken additional risk, they haven't).
Second followed a similar route
The actual tools are just details, you should be spending all your time working out how do we make this successful - not should we force highly motivated developers to use EMACS...or vi or
Its not important unless your product is EMACS....
- Make sure the everyone understands and agrees with the big picture.
- Make sure the people are invested in the end result. (this with the point above says that outsourcing is not the best solution)
- Be consistent, thorough and write high quality software. Coding guidelines and a clear process that everyone understands and follows will help with this.
- Understand that the idea is more important than the implementation, but a poor implementation can ruin a great idea.
The difference between Canada and the USA is that in Canada healthcare is a right and gun ownership is a privilege.
Just read Getting Real . I was thinking of recommending their second book, ReWork, but it's mostly a rework of the first. You either get Getting Real or you don't, and if you don't get it, you have problem about getting real.
"I work at a company where there haven't been coding standard until recently, so there were many years where a few programmers just made stuff work. Well now you come up behind them and it may take you hours to understand code that you could have understood in 30 minutes or less if it was readable and maintainable code."
Yeah, well, you know, owning a business is about trade-offs. Maybe if they were focused on processes and standards they wouldn't have been able to focus on producing stuff that just worked and then they wouldn't have employees by now to sigh about how hard their work is because of the accrued technical debt.
Most of the answers to your questions are "it depends" I don't understand what you mean by a "software shop" - is this a consulting company, a company that produces a large scale product, a company that produces a small product, an online service or what?
Your ratio of junior to senior developers depends on the kind of product you're producing. If you have an application that has a big, overarching architecture and then lots of relatively simple modules for specific cases, you want many junior developers to pound out those simple modules (e.g. different types of data entry screens).
Coding standards and standardization are always good. For a small shop you're best off looking around for one that you like and adopting it rather than trying to make your own from scratch because it is not a revenue producer and you can burn endless hours in meetings arguing about spacing, comment style, etc. Make an executive decision and move forward.
Tools and languages, again, it depends. Use the right tool for the job.
Since you don't know any of these things or how to make the tradeoffs, what you need is to hire a director of engineering who does because if you try to hire some developers and apply the vast depth of wisdom that you've acquired from this thread on Slashdot you're probably going to fail miserably.
Retain a consultant with a proven track record to implement your processes.
Hire only senior level devs who can do solo heavy lifting across your technology stack.
Deliver small increments of potentially shippable product.
Insist on emergent architecture.
Empirically adapt into better processes.
That's what I've always done, grown each business slowly, organically. I've since learned that there are two types of companies that work well - tiny ones that basically provide the owner with a job, and larger ones run by a management team.
What I did for far too long was deal with payroll, unemployment taxes, health insurance, sick leave, etc for two employees. That was a mistake. I should have chosen to either stick with just me and a part time helper, or make the jump to six or eight employees. That jump requires a leap of faith, some investment and a marketing campaign. Not making that leap meant that the business was dependent on one or two long -term employees who occasionally get sick, leave the company, etc.
Be tiny for a while until you figure out what you're doing. That may mean doing your business and a day job for a little while until the business provides you with a full-time income. Once it pays you $60,000 / year, then decide to either stay at that level or increase revenue by 500% quickly. Especially after the changes in the last six years, being an employer takes a lot of time and effort. Make it worthwhile. Do a POC by working it by yourself first, though.
Small? Specialize and get billing, taxes, legal and ERP covered. Legal and taxes are other people, billing an ERP can be done with online tools like FreshBooks or small to midsized softwarepackages like Lexware.
What practices you need is up to you - especially if you code alone.
It also depends on the code you write. If it's just custom ABAP scripting for a handful of clients at a time, point and click testing and a few manually checked testpositions ought to be enough.
If you want to deliver software to a wide range of customers, perhaps even online, with demo-versions and stuff you *have* to have your pipeline standing, even and especially if you are alone. You want to be able to compile and deploy a hotfix wih a mouseclick.
Ask yourself: if the worst possible szenario happens with my software, will I be able to fix it inmediatel? If the answer is yes, with a few night-shifts and my leet Google searching skill I ought to manage somehow - that's OK. If the answer is no, compiling for XYZ takes days of time each time around - then you're doing it wrong and need to automate your process (more).
As for the business itself: Specialize in a field and a subset of that. There is no other way you can keep up with the big boys as a small shop. ERP, Web, Embedded, DB, etc. They all have their ups and downs and each have countless subcategories you can specialize in. Do it! Do not look left or right, unless you don't have any customers in the current field.
Good luck!
We suffer more in our imagination than in reality. - Seneca
Before you think about how to run your shop, ask these questions:
Do you have a product?
Is there a market for that product? How do you know?
Do you have a business plan including a marketing plan?
Once you get past those questions, the rest is easy. Outsource anything that doesn't make sense (HR, accounting, payroll) and keep your core expertise in-house. Don't obsess about coding standards, etc. until you have cash flow. It's far more important to do your utmost to get the business making money thatn to worry about programming minutiae.
I did start a software product business back in 2000 and it's going strong. The very first person I hired was our VP of Sales and Marketing. I didn't hire another technical person until employee #5, so didn't have to worry about imposing coding standards on others. :)
My concern is not your domain experience, but your business experience. It sounds like you're approaching things from a largely technical viewpoint, and that's going to get you in trouble with running a business. Your focus, first and foremost, should be on revenue, a product portfolio, and a plan for growing the customer base.
Sure you'll need an accountant and should outsource your payroll and get a corporate lawyer on board and all the other things people have advised you to do, but first and foremost, you need to get your head around the idea that you're no longer going to be an engineer and will have to focus on business needs and decisions that would apply to any industry.
I do not fail; I succeed at finding out what does not work.
Then turn around and offer it fix it for a very inflated price once websites wont render anymore after you force them to use your product. Make sure it ties into as many business processes unrelated to your product selling points as possible so your customers can fire people who do the things your software does. Therefore can't leave you when done.
You will go well in the medical industry especially.
http://saveie6.com/
First, don't go it alone. If you can't find a few friends that you can convince that you are on to something with whatever product ideas you have then you aren't on to something.
Software development is a team sport. Even if the other players are you in 6 months. Have coding standards. Have have your IDE or some program enforce them. Write documentation. Use version control. Use a bug tracking system. (Yeah, all that stuff you've read is best-practice... it got published as best-practice for a reason.) As a startup select a "major" language but for scripting just accept that any of perl, python, ruby, bash are fine. Train, mentor, and grow your people. You want really good generalists at this stage and not experts that can't also do ops, admin, front-line, etc. Using open-source software is a force multiplier. If you are going to extend OSS just make sure that your product value is in the data you are generating and not the code (since you'll be giving the code away for free).
You'll want to find people at least as good as you are for raising money, marketing, sales, product development, and IT (assuming you'll be CTO/VP Eng and leading development; if not find a CTO [tech strategist to put in front of investors and give you something coherent as far as technology goes], and/or a VP Eng [developer+manager who can wrangle the cats and makes sure product gets delivered when product is supposed to be delivered]. Coming from the tech side of things do NOT undervalue marketing, sales, and your CEO. The better mousetrap will not sell itself. At the same time while a great sales guy can sell snow to Eskimos they won't pay a lot for it. Find/build a team that covers each others weaknesses.
Gonna stop here. Could go on like this for a while since this is what I've been living the past 4 years.
Blogs in no particular order: Joel on Software, Paul Graham, any other 2-3 of the top tech incubators in the country (Google em).
Finally, ignore anything above that doesn't make sense for the business you are running.
I started a business right out of school with just a vision and my CS degree. We are still in business today, 10 years later. The secret to success for me was twofold: * I went into business with two equal partners. They compensated for my weaknesses and were able to provide initial sweat equity for the business. There are also some do or die trials early in a startup and its easy to give up if it's just yourself but harder when you would also be letting your partners down. * We had a strong network of mentors who connected us with potential customers. I read a number of the comments in this thread and I have some thoughts: * You don't need a full business plan. You can pay someone to write that to get VC if you need it down the road (worked for me). However you do need a plan. How will you finance initial development? Can you name your first customer? How large is the potential market? What is the minimum viable product? * You absolutely can run a software business without having ever been employed in a software company. I figured it out. It's not an easy road though. * You must be an excellent salesman. If you are not, pick a partner that is or you are going to be handicapped. I've seen so much crapware sold for big bucks because the salesperson was talented. I also believe salesmen are born, not raised.
Exactly. If a company is in business, then it means they made mostly correct decisions up to now.
I started this way as well, here is an advice: have strict standards and do not let anybody violate them. You will have plenty of work to do, do not make mistakes of allowing standards to slip from the start.
Get fresh out of school people, maybe even people without full degree, pay as little as possible, you have no money to throw around, but make sure there is always coffee and food in the house, besg way to keep morale up is to have people who are not feeling hungry.
Get cheap or free stuff from craigs list, you will need computers, monitors, switches, cables, test servers, desks, chairs, some plates, forks, spoons, cups, a microwave, a kettle, a coffee maker, fridge, paper towels, bathroom tissue, buy in bulk from costco.
You need to be proficient enough to write/read code, who else is going to do it at first if not you? You do need standards, would be nice to pick a technology and stick to it, so make your picks. Some code generators would be nice too.
Prepare some document templates for proposals, design docs, business docs, release docs. It is very useful to have an accountant that knows you and can deal with the payroll,source deductions, etc.
Find clients outside of your country, but if you are an American you will have tough time opening an offshore bank account, which you need...
Good luck, you will need plenty.
PS. May want to consider a couch in the office.
PPS. May want to consider renting a house instead of an office, you can live there and have enough space for work.
You can't handle the truth.
I want to chip in about the general topic of standards and methodologies. Please remember that one isn't (necessarily) better than the other - they are all simply tools working towards a goal and you use whatever tool works best in your circumstances. Now, your GOAL is the important thing: communicating between different members of the company (communication over space) and remembering (communication over time) - which sometimes is important even if you are one person. Using a formal standard to do this should accomplish several things:
Free, as in your money being freed from the confines of your account.
I'm not sure this thread is giving the poster enough credit it depends how hierarchical his last job was but in my experience IT/systems admins can have WAY more business experience than software developers. Often they handle purchasing of IT equipment meaning interviewing users and determining needs, specing out the boxes, finding a vendor etc. Since the users cross the corporate spectrum you get exposed to the business practices and relative skills of different departments which can help greatly when you realize that for example a good records clerk might be a wizard with Excel but otherwise be an idiot with how to use a computer, but that is okay they can still do their job.
Often they have to handle reporting in order to allocate the expense back to departments, have to write or help explain the corporate IT use policy in such a way that it conforms to regulations etc.. Managing a much more complicated budget (service contracts, internal and external employees, equipment purchasing and refresh cycle etc: it can be much closer to running a smaller business within the bigger business. In software development it is much easier to just become the guy that makes the widgets and doesn't have to worry his pretty little head about how it is used. At best, again in my experience, dev managers can manage people hiring and allocating to projects to try to keep the projects going. They have little experience managing other types of resources.
I agree just having a masters degree doesn't mean you are ready to run everything. Corporate culture vs university culture is completely different. Spending grant money you've convinced someone to give you for the next 3 years is much different than spending money you are borrowing from an investor/bank/your personal retirement savings in hopes of making a business that will be profitable. In university it is often okay to say: we experimented and proved it wasn't a good idea, in business it is waste and needs to be managed or you'll quickly be out of business.
You haven't even started and you are already bogged down on "coding standards" and "best practices."
In The Beginning only one thing matters: robust code that does what you want it to very well. Maintainability? Pah - you need a future for that to matter. Best practices don't matter if you are bankrupt, or have a product nobody will touch.
I am very small, utmostly microscopic.
First, find some area with a high cool factor. Cool can be substituted for almost anything else, like management.
Find potential employees who are obsessed with your cool idea/company. There are two equally important characteristics that these people must have: they must be really smart, and they must be ready to do anything to make the cool happen.
Promise them two things: they will help change the world, and any sacrifice they make now will pay off in big bucks when you succeed. Pay them a moderately OK salary, but not anywhere near the high end. If pay ever comes up talk about cool, loyalty and payoffs in the indefinite future.
Work them until blood comes of their ears. If possible cater their meals, so they spend all their time either at work or with their co-workers. This keeps them from realizing that you are stealing their life. It helps if you can find single people, or couples where you hire both people. Social ties to non-employees just cause trouble.
Raise money, get customers, and go into panic mode. Take the people you have hired with no management experience and make them manage stuff. Don't hire professional managers because it is a waste of money and time. Also, if they know that you are making mistakes, they might challenge you and make the staff start wondering if you know what you are doing.
Pay yourself very well, but act humble. If the place is small, take people out to lunch or dinner a lot. It's tax deductible, and it makes them think you give a rat's ass about them.
Be a technical success at the cost of business failure. Over promise and deliver late, but show great technical chops. Make sure that everyone in your market area sees how good your results are, even if they are not economically viable.
Go out of business. Be apologetic to your employees about failing. Tell them they did a great job and it's not their fault. It helps if you have a partner you can blame.
This is all OK, because you got the big salary, so you can buy a house and have a new car, etc. You also have the intangible asset of having a high profile start up with high technical visibility.
Do it again as many times as you can. If you do it right you will have some workers, clients, and even investors who will follow you around and experience the cycle multiple times. Your net worth can go up and you can become respected in your field without ever running a successful business. It's called failing up. It's a very popular career path in both Silicon Valley and Hollywood.
Why is Snark Required?
Coding standards: pick anything and stick with it. Use Google's. Why not? (Haha I note they are using svn.)
http://google-styleguide.googl...
https://google-styleguide.goog...
These types of decisions are many times arbitrary and one valid approach rarely is any better than another.
I am very small, utmostly microscopic.
The pay cheque isn't the important thing. Experience working in a professional environment is. The difference between how you work on a class project and how you work in a professional environment is vast.
For example, class projects are typically:
- very small
- implemented by a single person or at most a very small team that does not change over the lifetime of the project
- finished within a short period of time
- built with unchanging requirements determined by a single authority and entirely known from the start
- implemented with little need or regard for ongoing maintenance.
Exactly none of those things will be true of a typical industrial software development project. The need to take these kinds of factors into consideration completely changes how you design your software, what tools you use, what processes you follow...
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
If they do it wrong, tell them to hit the road.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
First, you my friend are going to have a mighty rough ride if you are thinking about competing against the new generation of software people coming down the pipe.
I do not know what advantage you think you have, but asking such basic and simple questions although not a crime, suggests you should not be the one owning the shop.
Hopefully you recognize that and put someone else in control because learning on the fly with investor money is a sure fire recipe for disaster. Unless you are funding the shop yourself.
The people I work with, never went to college. They are a new generation built upon Internet access. The are debt free. Free thinkers and horrifically skilled and on their second startup by the tender age of 23.
They are debt free, confident and not scared of failure.
More than a match for any CS program anywhere in the world. I would ask one of these young choppers to run the place.
That is if you can get enough respect from one of them by simply dangling your paper degrees in front of their faces to be the one they call boss.
Good luck, you are going to need it.
Got Geometrodynamics? Awe, too hard to figure out? Too bad.
You need mutually exclusive skills. http://www.businessinsider.in/...
Casteism
I own a digital interactive development house. The number of starry-eyed, exceptionally bright, highly motivated people who walk in our offices, or contact us, or are found by our marketing nets that match you would really surprise you. Some of the advice here is very good, a fair amount of it comes from well intentioned people who clearly have zero actual experience doing this stuff.
The bad news. Based on what you've said, you're going to fail. Why? Because you're made the same mistake 3/4 of the people who come to our door with similar ideas make... You have devoted all kinds of effort to the product, and hardly any effort to the acquisition strategy - e.g. How are you going to find people to buy this thing? If you're budget for product development is $500,000 then your acquisition budget should be at least $500.000. Today's marketplace is not "Field of Dreams", if you build it, they will not come.
Second, give up on the idea of finding a VC or angel investor. The occasional news story where some guy got a million dollars to build his idea are the exception, not the rule. I've sat in many VC presentations, and watched many entrepreneurs burn out in search of elusive funding. VC's give money to startups with 1 - 2 year track record showing positive cash flow - and what you give up, in return, is control over the company. Self funding is the rule, consider all of that money to be at 100% risk. Don't mortgage your house, get a small business loan, or count on free money from the government unless you are willing to lose everything you have if it doesn't fly.
Third, most software houses don't survive of a single product because most things are cyclical. So think about a product + professional services customizing the product. Or the product being sold outright (licensed user) or a monthly subscription model.
Fourth, people who make a living writing helpful advice websites on how to start your small business and run it... make their living telling other people what to do, not actually doing it. Take their advice with a grain of salt. Seek out real entrepreneurs who have actual businesses. A good place to meet these folks are at M&A seminars if you don't know any.
Fifth, do you love the work so much you're willing to work 12 hours or more a day for two, three years? Are you willing to give up vacations? How do you feel about being on call 24x7 365?
The good news: You can do this. I am not the smartest guy in the room, nor do I possess any magical powers. I too, started out as a developer, worked my way up the ranks, and am now the owner of a successful software business. I haven't had a "real job" with a boss and a paycheck in a long time.
My one piece of advice: Learn how to build relationships with people based on respect and trust. Build as large of a network of such people as you possibly can. Because, at the end of the day, it is honest, trustworthy, decent employees and partners that will make or break a business. Good software is NOT about technology, tools, etc. it is about good working relationships between people
Murphy was an optimist
but it may be difficult to sift through them when what you are looking for is solid advice about the direction to go in and why certain actions/approaches will work, and others won't (or not as well). I've been building software for over a decade now and had my own business for about 7 years. I have learned an incredible amount from the experience of it. I can see from your question that there is going to be a process that you are going to have to go through. If you would like to have me consult with you for even a couple of hours, I might save you months of your life learning things the hard way... mwaschkowski at gmail.com Good luck! Mark
My number one advice to anyone thinking about starting a business is to draw a line in the sand. Clearly state to yourself and others how much money you're willing to put into the business and how much time you're willing to spend. The DAY that you cross that line evaluate, if the business is not at that point successful, STOP spending money and call it quits. Number two advice. Don't be the only one spending money, if your business idea is not good enough to get someone (not in your family) interested enough to help you bank roll it, then it's not likely good enough to be worth it. Besides, with that you also get someone else who's vested into the success, and that person/group can help you find other resources you might need. But that's just generic business advice.. about software I have much more to say, but if you don't have those two then no matter how good you think your idea is you won't make it.
Play to your strengths. Be agile. React quickly to marketing changes. Some customer wants to buy but you don't do something? Promise it withing 6 weeks and then frickin' do it.
Good luck, dude. Its a fun and fulfilling endeavor.
"You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design