This action might not be possible to undo. Are you sure you want to continue?
Written by Alex Iskold / October 16, 2007 / 31 comments
In 1975, Frederick Brooks wrote a classic book on software project management called The Mythical Man-Month. In the book, he famously argued that adding more people to a development project will hinder rather than help to get things done faster. The reason is that having more people working on the project introduces a non-linear overhead in communication. Five years before Brooks' book, a software development methodology called the Waterfall Model was coined. This approach applied the insights from mature engineering disciplines (mechanical, civil, etc.) to software. The idea was to construct systems by first gathering requirements, then doing the design, then implementing it, then testing, and finally getting it out the door in one linear sequence. We have come a long way since then and learned a lot about making software. The Waterfall Model is now considered a flawed method because it is so rigid and unrealistic. In the real world, software projects have ill-defined and constantly evolving requirements, making it impossible to think everything through at once. Instead, the best software today is created and evolved using agile methods. These techniques allow engineers to continuously re-align software with business and customer needs. With the advent of modern programming languages (Java, PHP, Python and Ruby), rich libraries, and unprecedented infrastructure services like those from Amazon, we are arriving at yet another evolutionary step. Digg, del.icio.us, YouTube and other poster children of the new web era
were developed by just a handful of programmers. To build software today all you need is a few good men (or women!). In this post we trace how we got here and where we are heading next.
Why The Waterfall Model Failed
Non-technical people tend to think that software is soft or easily changeable. Since there are no visible nuts and bolts and no hood to open people think that software can be tweaked and re-wired on a whim. Of course, this is not the case. Software, like any mechanical system, has a design and the structure; it is not as soft as it seems. Yet the accelerating pace of business requires constant changes to software. Older development methods completely fail to address business needs. Using the Waterfall Model, these changes were impossible, the development cycle was too long, systems were over engineered and ended up costing a fortune, and often did not work right.
The problem was that the Waterfall Model was arrogant. The arrogance came from the fact that we believed that we could always engineer the perfect system on the first try. The second problem with it was that in nature, dynamic systems are not engineered, they evolve. It is the evolutionary idea that lead to the development of agile methods.
Agile Methods - Evolving Software
In the early nineties a number of agile software development methods emerged. While they differed in details, they agreed at large that software development needed a major rethinking. First, software has to embrace change. Today's assumptions and requirements may change tomorrow, and software needs to respond to changes quickly. To meet the challenge, agile approaches advocate focusing on simplicity. Make the simplest possible system that satisfies today's requirements and when tomorrow comes, be ready to adapt.
Two techniques pioneered by agile methods are worth particular attention - refactoring and developer testing. Refactoring, elegantly described by Martin Fowler in his classic book is the idea of improving the design of the existing code without changing how it works.
Refactoring is what allows agile systems to embrace change, while remaining elegant and free from rot. Like an interior decorator continuously changes and improves the layout of your furniture, agile developers move code around to improve the product as a whole. Code is constantly changed to make sure we end up with the simplest, and best possible system that reflects our current needs. To make sure that changes do not break the code, agile methods introduced unit tests. As each agile project unfolds, it grows the base of unit tests. Each test is focused on a single component of the system and acts as an insurance that the component works as expected. Typically, the tests are run continuously against the code and require immediate fixes in case of a failure.
The software systems created using agile methods are much more successful because they are evolved and adapted to the problem. Like living organisms, these systems are continuously reshaped to fit the dynamic landscape of changing requirements. Without a doubt, agile methods made a major impact on how we think about building software today - dynamically and continuously.
It's The Libraries, Stupid!
While we discovered better way of making software, we also discovered better programming languages. C was replaced with C++, then came Java. Perl was great, but PHP and Python took its lessons further. More recently came Ruby, which has become very popular because of its natural way of expressing code. Because of this evolution, today we have a number of excellent, and virtually equivalent programming languages. While the choice of programming language is typically a sensitive subject, the truth is that it is not the language, but the libraries that
come with it that make a difference. C++ never had the standard libraries that Java has. Yes, Java is the simpler language, but people used C++ for a decade just fine. What gives Java the edge is its rich set of reusable libraries. The story is similar with PHP. It has been the language of choice for web developers precisely because it comes with such rich support for web and database processing.
In addition to the libraries that come with modern languages, the open source movement has also contributed a wealth of code towards global software infrastructure. Notably, just the Apache foundation on its own has created a huge amount of high quality reusable code. We have now arrived at an age where we have a strong foundation for building complex software systems. We know the methods and we have the tools, so what does that mean?
The Future of Software Development: Just a Few Good Men
Since early days of software development people struggled to build good systems. More and more people where thrown at the problem, making matters worse. But with the recent explosion of social web we've witnessed a new and interesting phenomenon: a handful of developers are now able to build systems that are used by millions of people. How can this be? The secret is that as with any good endeavor it only takes a few good men (and/or women!). With a bit of discipline and a ton of passion,
high quality engineers are able to put together systems of great complexity on their own. Equipped with a modern programming language, great libraries, and agile methods, a couple of smart guys in the garage can get things done much better and faster than an army of mediocre developers.
We are likely to see a few changes over the coming years:
High-quality, passionate software engineers will be in very high demand and will make substantially more money.
The developers who do not have great programming skills are going to have to look for jobs elsewhere.
The changes that we are witnessing today in the social software market are going to reach the enterprise level.
Software off shoring will make less and less economical sense. Computer science is going to remain a highly competitive and prestigious field.
Ironically, we are coming full circle with the mythical man-month. What was true twenty years ago is true of course today, but for a whole new set of reasons. An awesome array of programming languages and infrastructure libraries combined with agile methods has allowed us to break free of old software development dogmas. Just a handful of great engineers can now successfully build systems of great complexity. Craftsmanship has finally come to software engineering!
Why Your Plans Fail
Business plans, diet plans, plans to get a degree and your plan to get rich. Life is full of planning. You’d think that all your practice planning would make you at least somewhat good at it. Then why do so few things go “according to plan?” Your business can’t make money the way you intended. You quit your diet on day three and start eating the chocolate cake. You realize that you hate the subject you’re studying. The map rarely matches the territory. “Okay,” you might say, “I’ll admit some of my plans didn’t work out perfectly, but it can’t be that bad, can it?” The Planning Fallacy People are notoriously bad at planning. The worst part is, we don’t even know it. One psychological study conducted asked students to predict when they expected to complete an assignment, almost none gave enough time. Other looks into financial analysts show that few can consistently beat the market. The real problem is that these planning failures aren’t recognized. People make wildly overconfident projections but fail to notice their abysmal track record in predicting. The question is, what can you do about this? New Planning Techniques Aren’t the Solution The problem isn’t a better planning method. We’ve all had a great deal of practice planning. Different planning styles can help, but they can’t solve the core problem of uncertainty. That is, you have no idea what the future holds. The planning fallacy creates two major problems – the inability to plan and being blind to that incompetence. The real solution is to keep a careful eye on your track record and learn to stomach uncertainty. Watching Your Track Record The way to tackle overconfidence is to be aware of your success rate. Whenever you make plans, keep a record of occasions you were forced to deviate from them. I’ve done this, and the differences between your map and reality can be surprising. How does humility help you? We’ve all been told to have faith and certainty in our efforts, otherwise it is too easy to give up. I’d argue the opposite. When you are motivated to do something, being humbled about your ability to predict forces you to be highly flexible. Stomaching Uncertainty
Does risk make you queasy? Stomaching uncertainty is the next problem. Once you become aware of your inability to plan, you need to find a way to make the unknown tolerable. There are a couple ways you can do this: worst-case planning and flexible planning. Planning for the Worst One way to mitigate the actual risk is to plan for the worst cases possible. The point of this is to make you aware of the negative outcomes, and knowing you can handle it. The worst-case rarely materializes, or if it does, it usually happens in a way you didn’t expect. Worst-case planning can’t give you a look at everything that could go wrong, just a bit more confidence in knowing you can handle it. The other benefit of worst-case planning is it balances the built in optimism plans have. Most people can’t distinguish between their best-case plans and expected plans. In other words, when predicting the future they imagine the most optimistic scenario possible. A common rule I heard in software development was to figure out how long it should take. Then double that time and add six months. For your best-case. This adjustment was another method to offset the natural optimism in predicting. Flexible Planning The second option is simply not to plan. This may seem crazy, but I’ve found using what I’ll call a “flexible planning” model to be ideal for areas where there is a heavy amount of uncertainty. Flexible planning isn’t planning in the traditional sense. Traditional planning involves looking at your outcome and devising a route to reach there. Flexible planning defies this entirely by not focusing on an end result. Instead, the emphasis is placed on doing actions that will place you in more favorable positions. Flexible Planning VS Traditional Planning Traditional planning starts with your objective and works backwards from that. Let’s say you were planning out what career choice you wanted. A traditional approach would be to work out your career choice, possible firms to work with, education you’ll need, classes you’ll need to take and how to fund your education. Each step determining the one before it. The problem with this method is it cleanly erases uncertainty along the way. What if changes happen in the industry and firms you want to work for start downsizing? What if your school of choice doesn’t accept you? What if you don’t like the classes or eventual career? What if you can’t fund tuition?
Flexible planning starts where you are and works forward. So your current position might be limited post-secondary schooling and funds. Flexible planning suggests that many outcomes are favorable and that the paths to get there are almost infinite. Instead your job becomes to put yourself in increasingly more favorable positions. The next step might be to get some schooling, apply to different Universities and scholarship programs or work to earn money for tuition. The best step is the one that has the most favorable options flowing from it. In a business context this would mean planning your business so that it would have the largest amount of opportunities available. This way if one of your original plans fails, you can easily switch to another.
15 Ways to Reclaim 2 Precious Hours Every Day
“For every minute spent in organizing, an hour is earned.” Do you want to make better use of your time? If so, you’re not alone. We all want to be more productive in order to get ahead in our lives. Time management is really about managing yourself. It’s about making a commitment to be more organized, maintain your focus and use your time to your best advantage. You probably know that effective time management will help you get more done each day. But it has important health benefits, too. By managing your time more wisely, you can minimize stress and improve your quality of life. Whether you’re a time-tested veteran or a promising rookie, the following tips will help you reclaim some precious hours. 1. Make lists. Making a list externalizes your worries. In your mind, tasks can get intertwined. On paper you can divide and conquer, crossing them off as you go. 2. Learn to BANJO. BANJO is an acronym for “Bang A Nasty Job Off”. Doing anything gives you a sense of achievement, but getting something really unpleasant out of the way makes you feel even better. That task may seem trivial, but it’ll distract you until you do it. 3. Slam junk. Wading through the latest ‘unmissable’ offers from some pizza delivery or loan companies is the last thing you need when you’re legging it to work. The average adult spends three minutes a day opening and disposing billions of unsolicited items delivered every year. Remove your name from 95% of direct mail lists through mail preference service. And with each fragment of rainforest that lands on your mat, ask yourself: What’s the worst that could happen if I bin this? If you can live with the answer, it’ll save hours of unnecessary filing. 4. Morning glory. Unless you fancy the cleaner, staying late at the office is a waste of time. Our natural bodily rhythms make us most alert between eight and nine in the morning. Arrive an hour early and you’ll get through the equivalent of two hours of post-6pm work. So you can leave on time.
5. The wheel deal. Getting on your bike could seriously speed up your commute. Research from Citroen show average rush-hour driving speed in big cities is 7mph. Cycling it’s 13.5mph. Three quarters of all car journeys are less than five miles, and you have thousands miles of traffic-free paths as alternatives. 6. Stand and deliver. Feel like you’re constantly in meetings? According to TUC figures they take up three hours of the average worker’s weekly time, and if you’ve tried everything bar amputation to cut the collective thumb-twiddling, try this unorthodox approach: Take all the chairs out of the room. People will stop chatting and start making decisions as they won’t get too comfortable, and they’ll actively face each other so will be more engaged. Your meeting times should be cut by a third. 7. Take a break from technology. When you’re trying to concentrate, is there anything more distracting than a vibrating cell phone or the pinging sound of an incoming email or IM? If possible, take periodic breaks from technology. This will allow you to work free of interruption and get more done. 8. Delegate. Most of us now work in teams with overlapping responsibilities. If you look hard enough you may discover you have jurisdiction over a shared junior. Or at least a junior who believes you have. Delegate clearly, say, “This is your project, this is the timescale, these are the resources.” Then stand back. It will happen quicker if you don’t interfere. Trust is a skill. 9. Make it your call. Old Mister Graham couldn’t have imagined the hours of precious time his ‘electrical speech machine’ would cost the modern man. But you can save wasted minutes on the blower. Write a mini agenda of what you want to accomplish and you could spend five minutes less on each call. As for Mr Bell’s other unwitting time-bomb – the curse of phone tag – don’t make calls between 12 and 2 p.m. 10. Uncharted territory. If you’re nipping out somewhere new, don’t rely on your internal atlas. Recent studies show that the average man spends 36 hours a year stuck in traffic or lost because we don’t plan new journeys before setting off. Combine Google Maps with up-to-the-minute travel news on roadworks, accidents and other traffic problems. You could also ask directions.
11. Keep busy. Keep your skills sharp by having at least one project on the go at all times. Two or more is even better, as it gives you the opportunity to switch gears and concentrate on something else for a change of pace. Working on different projects simultaneously ensures that you always have something to work on. It also keeps your mind active and your perspective fresh. 12. Cook smart. If you’re time-poor, culinary challenged, or a little of both, takeaways are an obvious time-saver. The ONS’s latest Time Use survey clocks the average man squandering 54 minutes a day shopping, cooking and washing up. So, play your telephone dinner joker. You can have restaurant-quality food delivered to your door, either fully-prepared or ready for self-assembly. All you have to do is hide the packaging. 13. Off the hook. It may be good to talk, but it’s not so good to have your ears bent by telemarketers trying to flog you a new kitchen/set of Encyclopedias/path to salvation when you’re trying to eat your dinner. Register free with the telephone preference service and within a month you’ll no longer be on speaking terms with the New Delhi switchboard. The average household gets three cold-calls a week. Once you’ve deregistered, it’s illegal for telemarketing companies to call. You’ll have to get some real friends. 14. Cranks for the memories. According to a Leeds Memory Group research, adults waste about twenty hours a year back-tracking because of our distinctly unelephantine grey matter. If you often forget names or make return trips to the shop to pick up what you originally went for, write this down: Emotion is the glue that makes memory stick. You can’t tell everywhere you’ve been in your car, but you can tell where you’ve crashed. The difference is emotion. Use it and you can imprint information and retrieve it quicker. So, to remember your wife’s relatives, for example, associate each with some graphic deformity (Aunt Emmy = bad breath, Cousin Dave = unsightly ear hair, etc). 15. Get the nod. Unless you’re tucked up with a good book, there are few things more frustrating than the average twenty minutes a night we spend trying to get to sleep. Hit the 12-minute optimum nod-off time identified by scientists at Penn State in the US by avoiding intense exercise for two hours before hitting the hay. Exercise raises core temperature, which elevates your heart rate for over an hour. And have some milk. Edinburgh University study found that a hot milky drink cut the time it took people to fall asleep by six minutes. It contains tryptophan, the building block of serotonin, which is one of the
body’s natural sleep chemicals. And you’ll feel a damn sight at better at breakfast than you would after a few pints of amber sleep chemicals. Resolve to pay closer attention to how you spend your time. Success comes to those who work hard and know how to manage their time well.
This action might not be possible to undo. Are you sure you want to continue?
We've moved you to where you read on your other device.
Get the full title to continue reading from where you left off, or restart the preview.