8 Entrepreneurial techniques for effective software development (and other complex creative projects)
Wednesday, September 29, 2010 at 5:54PM As the first post in our #idevblogaday Wednesday spot, I thought I'd take the opportunity to expand on a few points relating to the management and getting things done of software development with an entrepreneurial slant.
This is pitched at those involved in the practice of software design and development - primarily for those working alone or managing small teams. However, it's easily applied to people doing similar in other fields - particularly complex creative projects. It jumps about a bit between personal productivity and project design and decisions.
The inspiration for this list comes directly from a couple of videos in which Jerry Kaplan discusses the 5 biggest mistakes entrepreneurs make and the 5 critical skills entrepreneurs need. His points are related to business development and the management of people specifically, but the core of them can be applied easily to the creation of things, especially in the realm of software development.
I manage and lead a small team that makes computer games (iOS computer games at present) -- and the points I make below are all drawn directly form my experience and development doing that, and from having managed a variety of teams of developers and other creatives in the production of a variety of software projects, business applications and services. It all works the same, it's just that some of it (the games development bit particularly) is more fun.
A lot of the points below can be applied to different aspects and levels of software development and design, but I've mostly avoided the people-management applications as there's no point in repeating Kaplan's original (and very useful) observations.
1. Set a clear mission, goals and objectives at every level
Establish how you intend to measure success - at every level. How do I know if this feature is complete? How do I test that this bug is resolved? What should this button do? What problem is this application trying to solve? In what way is this game fun for the player?
Without a clear objective and measure of success, not only is it impossible to efficiently move from one task to the next, it's difficult to guarantee that the work you're putting in is even required in the first place.
2. Don't try to be clever
Being clever for the sake of it does nothing but make you look like an ass. And it almost certainly confuses the requirements or expectations of anything you create.
When you come back next week to write a parser for that set of data structures you just designed, what would you prefer - an obfuscated mess of techniques you don't fully understand, or a solid, transparent solution to the problem they were intended to solve?
Users of your software don't care how smart you are. In fact, they would really prefer to feel that they are the smart ones for choosing you in the first place. If you want to show off, go join the circus. If you want to impress users, deliver on your promises (see #1 Objectives).
3. Don't do it for the money
Do it because you want to, and worry about the rest later. If you genuinely want to make software, then make your decisions in that context.
If you can figure out how to find and utilise resources (your time, skills and passion count) and convert them into value, what you do inherently has value in and of itself. If you can't figure out how to make money at that point, go ask someone else - others are more than happy to help if properly recognised or rewarded for their input.
4. Share your wealth and skills
Kaplan makes the observation that "equity is like shit: if you pile it up, it just smells bad; if you spread it around lots of wonderful things grow." This can be directly applied to your most precious resource -- your time.
If you concentrate on any one piece of the software development process or on a specific aspect of one stage of that process you will almost certainly fail to meet your objectives. Just because you love to perfect the game mechanic doesn't mean you shoudn't be paying equal attention to the UI, or the audio, or the help system, or the game's marketing material... and on, and on.
5. Use what you need, not what you like
Maybe I've spent too long in the enterprise software world, but this seems to be apparent in almost every software development or delivery project I've been involved in.
It's simple: use the tools that get things done.
Do not use something (a platform, a method, a person, an IDE, whatever) because you like it -- remember this has got nothing to do with you -- keep your objectives in mind (#1 Objectives) and choose what gets the job done.
6. Know when to let go
Just because you thought it was a good idea a week ago, doesn't mean the same holds true right now. Your agility is one of your key strengths - adapt, change and -- if you have to -- let go of what you don't need.
7. Telescope as required
Every single one of us has spent an afternoon so absorbed in detail that by the end of it you're unsure of how you got there and, more importantly, why you were there in the first place.
If you're not consciously doing it already, identify and refine your ability to telescope: You need to be able to pick up on the detail of a problem, apply your skills and solve it with a constant view on its relationship to the wider context.
8. Lead and make decisions when you need to
You have to make decisions in order to move forward and if you want to be in any way efficient about doing so, you need to make them at the right time - not too early and not too late.
Don't try and anticipate problems for the sake of doing so and don't avoid making a decision because it changes something that came before (see #6 Letting go).
As Kaplan points out, leadership is often defined as the ability to build consensus in the face of uncertainty. Software design and development presents infinitely uncertain paths - you need to have the confidence that you can consistently pick them as you need to.
Update: For those of you who saw the original title -- I was planning on 10, but settled on 8. I guess 9 and 10 could be "pay attention" and "be concise."