There’s an interesting link being passed around today titled “Manifesto for Minimalist Software Engineers”. It’s a list of nine basic principles to keep in mind when developing good software and it’s definitely worth a read whether or not you’re in the developing industry. Ranging from “fight for Pareto” to “think different”, these simple, thoughtful guidelines are a higher level look at the nuts and bolts of everyday coding. We’re going to look at just a few of these helpful thoughts here.
The 80/20 law
There’s a business principle called Pareto’s law; it’s basically the same thing as K.I.S.S (keep it simple stupid). A more elegant explanation can be found below:
“The Pareto principle (also known as the 80–20 rule, the law of the vital few, and the principle of factor sparsity) states that, for many events, roughly 80% of the effects come from 20% of the causes. Business-management consultant Joseph M. Juran suggested the principle and named it after Italian economist Vilfredo Pareto, who observed in 1906 that 80% of the land in Italy was owned by 20% of the population; he developed the principle by observing that 20% of the pea pods in his garden contained 80% of the peas. It is a common rule of thumb in business; e.g., "80% of your sales come from 20% of your clients". – Wikipedia, “Pareto’s Law”
When this principle is applied to creating great apps, the manifesto has this to say:
“Best engineers are those who can estimate the effort of new requirements and they are the only with enough information to refuse the 80% that is not in the optimal next scope…..The worst code you've ever written is the code that is no longer used. Is called YAGNI (You Are Not Gonna Use It). The best code you've ever written is the code you didn't write, simply because it's the only that never fails.”
When you have a lot to do, it can be difficult to figure out what to tackle first. This is especially true for developers, especially when faced with a slew of bugs or errors or projects that, of course, are all due at about the same time. When faced with a long to-do list, some people stick their heads in the sand and procrastinate, while others attack on multiple fronts, while still others resolve issues in order of importance:
“Minimalism is not about not doing things but about focusing first in the most important.”
This is a thought echoed by productivity guru Leo Baubata, who writes the popular blog ZenHabits:
“Our work day is made up of an endless list of work tasks. If you simply try to knock off all the tasks on your to-do list, you’ll never get everything done, and worse yet, you’ll never get the important stuff done. Focus on the essential tasks and eliminate the rest….. – ZenHabits.net, “Simple Living Manifest: 72 Ideas to Simplify Your Life”
It’s about the process
One of the strongest enemies of true progress is the quest for perfection. If it has to be perfect from the start, how will you ever be able to take a step forward?
“Look for perfection, but not yet. Iteration is that friend that gives you the right advises at the right time. First do it, then do it right, then do it better.”
This is something we observed over the course of seven weeks in the Ultimate Coder Challenge. Seven coder teams took on a seemingly impossible challenge – build a working perceptual computing app with a brand new computer, a brand new SDK, and technology that nobody really knows anything about. Instead of running away screaming (which any sane coder might have chosen to do), these seven teams pulled up to the table and dug in. From one of the Challengers:
“As I write this, there is no app, no design and no code. I have a blank sheet of paper and a few blog videos. The six developers I am competing against are established, seasoned and look extremely dangerous. My chances of success are laughable, so given this humorous outcome, I'm just going to close my eyes and start typing. When I open them in seven weeks, I'll either have an amazing app or an amazing lemon.” – Lee Bamber, Ultimate Coder Challenge: Going Perceptual
As we prepare to crown the winner in this Challenge, it’s interesting to note that all the contestants had about this same attitude: it’s not necessarily about the destination, but the journey. Starting out with perfection as your ultimate goal is certainly admirable, but it doesn’t allow for the learning opportunities that are no doubt going to be dropping into your lap along the way.
With the popularity of touch designs in form factors, one of the issues that developers have to contend with is figuring out how to do more with less. The old adage of “keep it simple silly” certainly applies to touch. It’s an input method that forces simplification; you have to decide which actions are most important, what stays on the screen and what goes away. It can be a difficult process, but you end up with software that is easier to understand and therefore much easier to use. Users need input methods that are streamlined, non-fussy as possible, and effective. In order to get people to interact with touch, developers have to design for predominately direct manipulation; i.e., you have to use your fingers to interact with the content. The content is the user interface, making a change from the graphic interface. Distance has effectively been reduced in touch, in other words, extra “stuff” like icons, fiddly little toolbars, and pointers just get in the way. Simple is best:
“We have to write code for humans, not machines and synthesis is the key of communication. A good example is the Pasteaurs's quotation "If I Had More Time, I Would Have Written a Shorter Letter". Try to keep methods as short as possible, classes with a single responsibility, few parameters, avoid redundant comments… The work is finished when you have nothing to take away.”
Simplicity in coding is easier said than done, but it can serve a dual purpose of providing a better user experience and a more powerful application:
“Remember that beautiful doesn’t always equal usable. Heavyweight designs often don’t serve the purpose of the user; they may be created to please the eye rather than to facilitate functionality. Treat accessibility and usability as top priorities….Simplicity is achieved by thoughtful reduction. When reducing, be mindful of your organization. Even if you are dealing with a large number of UI elements or a great deal of code, a proper hierarchy and structure can convey the feeling of simplicity.” – Adobe.com, “The Pursuit of Simplicity”
Seeing the forest for the trees
When you’re in the midst of a development project, it can be easy to lose perspective, focusing on all the myriad details that need to be accomplished rather than seeing the bigger picture. These nine principles for software developers are good reminders to keep that higher level thinking engaged in order to see a project through to its’ greatest potential.
Would you add to this list? What would your personal software development manifesto include – and why? Let us know your thoughts in the comments.
Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.
Notice revision #20110804