Up to Newsletter Index

January 2015 Newsletter


Quotable Quotes

Constrain the user's expectations to match the abilities of the software.  –Bruce Tognazzini


The cost of a thing is what I call life which has to be exchanged for it, immediately or in the long run.  F. H. Bradley, quoted in Geoffrey Madan’s Notebooks


As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications.  Dave Parnas


Scale back your long hopes to a short period.  While we speak, envious time will have already fled: seize the day [carpe diem], trusting as little as possible in tomorrow.  –Horace


Bet on companies with software engineering groups to always win over those with “IT departments.” Actually, that’s a startup ideation strategy. Find Fortune 1000 cos with compartmentalized IT departments. Build what they can’t build.  Balaji S. Srinivasan, on Twitter


We act as though comfort and luxury were the chief requirements of life, when all that we need to make us happy is something to be enthusiastic about.  –Albert Einstein


The messiness cannot go into the program; it piles up around the programmer.  –Ellen Ullman, Close to the Machine


Adversity is the trial of principle. Without it, a man hardly knows whether he is honest or not.  –Henry Fielding



Return to top


Software Development Process and Methodology

Article:  The History of Software

Most of us think of the computer era beginning with the creation of ENIAC or, perhaps, development of compiled languages (or maybe it was Konrad Zuse’s Z1), but this nice “infographic” shows that it goes back well before that time.  Perhaps the most salient milestone to define modern computing was the Church-Turing thesis, at least 10 years before any modern hardware.



Article:  Your Agile Project Needs a Budget, Not an Estimate

In my experience, most development teams struggle more with effort and schedule estimation than budgeting, but this article makes some excellent suggestions about techniques that can be used to build a good financial picture for a project and help with effort/schedule at the same time.



Article:  #NoEstimates – Really?

I noticed the #NoEstimates meme in the development community several months ago, but preferred to avoid the fray until it ran its course a bit.  In any case, this is a great article the emphasizes that no estimates at all is unrealistic and makes several good recommendations about appropriate places for estimation in the development process and best practices for getting good estimates.



Article:  How to Lead Engineers

Development teams and other technical workers are often led by non-technical people and this is fine.  However, those leaders need to pay attention to the different styles of leadership and management that are effective for technical employees.  With insights from project managers at top companies like Facebook, Google, Microsoft and others, this article gives simple, but valuable advice.



Article:  Does Agile require cultural change?

In this interesting perspective, the author makes the observation that, rather than the conventional wisdom of requiring workers to adopt a new culture in order to embrace and succeed with agile, instead, the process of moving to an agile process should itself drive the cultural change.  His conclusion:  Change comes first, culture follows.



Article:  3 Reasons Why Software Development Projects Fail

If you’ve worked in IT for any significant amount of time, these three reasons for project problems will probably not be surprising.  Nevertheless, this article goes into some good detail about the contributing factors for each of the overarching causes.



Article:  Why developers hate being interrupted

We are all familiar with the psychological concept of flow and how this state of concentration is often key to developer productivity.  This author compares interruptions of programmers to the relationship between Superman and kryptonite, emphasizing that it’s the recovery period after the interruption that is the killer.  He goes on to make several good suggestions for reducing disruption and how to recover more quickly when they happen.



Article:  The Art of Programming

In the last several years, it has generally be acknowledged that software development is as much an art (or perhaps craft in the sense of artisanal work or “skilled creators”) as it is a science.  This excellent article provides a great visualization about how technical knowledge, experience, creativity and curiosity come together to give us great software.



Article:  The Tears of Donald Knuth

This essay discusses eminent programmer Don Knuth’s claim that much of what we consider the “history” of programming and computer science is flawed due to a lack of emphasis on the technical challenges and technology breakthroughs that they brought about.  I think it’s a delicate balance in all areas of history and historiography to provide sufficient depth on the topic and the context surrounding it, while maintaining the interest of the reader.



Return to top


Software Testing & Quality

Article:  How Bad Software Leads to Bad Science

Much of the technological advancement of the 20th and 21st centuries comes from basic research in the sciences and engineering.  As with everything else in the world, much of that research relies heavily on software, especially for statistical analysis.  This article explores the potential crisis in research caused by defective software.



Article:  Orion's lesson for IT: Test your systems, then test again (and again)

Do you ever wonder if all of those long hours that you put in testing your applications really matter?  If the results of NASA’s Orion test flight, after many recent spacecraft failures, is a good indicator, then the answer is a resounding, “Yes!”



Article:  Reinventing software for security

It seems fair to say that the recent history of software security failures is a less than glowing commentary on the industry.  This developer makes several great suggestions for both technical and methodological changes that would not only reduce the instances of security breaches but lessen their impact when they occur.



Article:  9 Integration Testing Do’s and Don’ts

Integration testing is one of the key elements of any test strategy/approach.  Here are a collection of great tips to help you focus on the important aspects of integration testing and avoid getting off in the weeds.



Article:  FIT: Failure Injection Testing

This article explores how Netflix uses what it calls “failure injection testing” to understand how “small” problems can have pervasive and unexpected impacts.  The overall goal of the process is to minimize the cascading impact of failures and keep them isolated (i.e., minimize the “blast radius”).



Return to top



Reference:  Rob Pike's 5 Rules of Programming

Rob Pike may not have the name recognition of some of the world’s famous programmers, but undoubtedly he’s one of the most influential.  Here are his five principles for writing good code.



Tutorial:  URL Design for RESTful Web Services

By now, most of us understand that REST APIs are the “secret sauce” of good application development.  Since the URL structure of your application is the “language” of your API, it’s important to include it in your design.  This article gives some simple, practical tips to design a straightforward, effective URL format.



Tutorial:  Java’s Reflection API

The Java reflection API is one of the most powerful, yet least understood features of the language.  It is one of the tools that make Java so flexible.  This excellent, detailed tutorial will help you not only get started using the functionality, but help you best choose when it’s appropriate to use.



Return to top


Career Development/Miscellaneous

Article:  How To Make Difficult Conversations Easy: 7 Steps From A Clinical Psychologist

I’m not sure if it’s coincidence that this article came out around the annual performance review cycle, but it provides some great tips about how to handle yourself in any sort of confrontational situation.  The bottom line is that you should remain calm (not always easy!) and focus on asking questions instead of making statements.



Article:  Dealing with Negative Emotions in Teams

With the long nights of winter, many folks tend to show their negative sides more and these ill feelings can rub off on others and almost certainly impact others in some way.  In this interview, a researcher discusses how project managers and development team members can deal with their own and other team members’ negative feelings and emotions and how it impacts team dynamics and productivity.



Article:  The Curious Science of When Multitasking Works

We frequently reference articles which confirm that multitasking is typically a bad idea.  However, this researcher shows some specific scenarios where it’s beneficial, specifically in cases where association is important.  The author notes that the problems in multitasking come in when we try to employ rapid context-switching between independent tasks or activities.



Article:  New Harvard Research Reveals A Fun Way To Be More Successful

Everyone wants to be more successful, whether it’s in your career or your relationships or some other aspect of your life.  But the big question is how do you do it?  According to this research, the answer is a bit counterintuitive, including insights such as happiness drives success rather than vice versa and how we need to consider difficulties as opportunities and not threats.



Article:  This I Believe: Culture Means Everything

Recently, I’ve decided that organizations need to emphasize culture over traditional mission statements.  This essay from the leader of his company borrows from the incredible This I Believe radio series to simply define the culture that he wants his organization to engender.



Return to top


Useful Utilities

Mockup Designer (Free – Cross-platform online tool – N/A)

Similar to Wireframe.cc, which we've featured before, Mockup Designer is a minimalist online tool for building web site mockups, especially simple web forms.  Each document gets a unique ID, so you can share with others.  Likewise, the tool supports import/export of your design as JSON and a preview window.  And you can export to PNG image, as well.



CSScomb (Free – Cross-platform online tool – N/A)

Keeping CSS definitions clean and consistent can be a difficult task.  CSScomb is an open-source Node.js tool that applies consistent structure and format to your CSS, such as ordering the attributes according to greatest impact.  It has good configurability, including indentation, brace placement, quoting and much more.  Likewise, it supports CSS pre-processors like SASS and LESS and even has integration with Sublime Text and Brackets.  (For a great tutorial on CSScomb check here.)



Chrome Dev Tools App (Free – Cross-platform Windows/Linux/Mac OS X and NodeJS – Varies)

The development tools built into the Google Chrome web browser are some of the most polished and well-conceived utilities for web developers of all stripes.  But what if you could run them outside of Chrome with most any browser?  Well, now you can thanks to this utility!  It runs as a completely separate process via NodeJS and node-webkit.  You can use it to test and debug web designs using any browser or even none at all!



Base 64 CSS Generator (Free – Cross-platform online tool – N/A)

This handy online tool allows you to convert small images to base 64 encoded data that you can then include as CSS objects on your pages.  While your mileage may vary, in general, loading the images from CSS is faster than loading an image, because the browser doesn’t have to make another request to the server for the image, since the CSS is already loaded and cached.



Npackd (Free – XP/2003/Vista/2008/7/8.x – 7.5MB)

Most of us have our favorite applications that make our system a comfortable place.  When you build (or re-build) your system with a clean installation of Windows, it can be a daunting task to download and install all of your tools.  Npackd is a free tool that catalogs almost 1400 freeware and open-source Windows applications and allows you to install them directly from its interface.  The catalog has good categorization to make finding what you are looking for easy.  And since the tool is community-built, you can even share your own tools.



NBAndroid (Free – Cross-platform Windows/Linux/Mac OS X, NetBeans, and Android SDK – 5.2MB)

Over the past several years, the NetBeans platform has really grown and matured and I find it superior to Eclipse now.  If you prefer NetBeans and also want to do Android development, then check out the NBAndroid plug-in.  It provides a fully native Android development environment, including remote debugging and support for real devices and emulators.



Return to top


Just For Fun

Moonjs - Apollo Guidance Computer Simulator

You may have heard recently about how at just 31-years-old, Margaret Hamilton was the lead developer of the software for the Apollo Guidance Computer that put people on the moon.  If you want to get a feel for how primitive such a system was by today’s standards, check out this simulator written in JavaScript.



Learning Curves (for different programming languages)

Everyone has their favorite programming language.  But did you ever wonder if your favorite is your favorite because of its simplicity?  Here’s a humorous look at learning curves for some popular languages.



Timeline of the far future

How far away is the future?  Often it depends on the context of the question.  Anyway, here’s the BBC’s attempt to consider what’s ahead for the Earth, humanity, and the universe.



Return to top