Turing Software


I have founded a new Software Engineering company, Turing Software, LLC.  Please head over there to attain services such as consulting, training, and custom application development.  I’m also going to start blogging over there, so if you enjoy these articles please continue to read  them over there.  I’ll also post here, but it will be more of a personal nature and probably less frequent.  Thanks for reading my blog!

www.TuringSoftware.net

Why is Healthcare.gov not working? (from a technical perspective)


Most web applications have a architecture like the below.  There are of course nuances and exceptions, but for the layperson, this will suffice.

The “Presentation Layer” handles all the graphical packaging of content in web pages presented back to the user.  This article in the Atlantic has a good description of the Presentation Layer for Healthcare.gov.  This is definitely NOT the problem as pages of just content come back very fast without problems.  Clicking 90% of the links in the Healthcare.gov sitemap come back in under a second.  BUT, a web application with just a good Presentation Layer is like a book with a nice cover design and nice pictures inside; no one will care if the text is not good.  The rest of the Healthcare.gov web application is the text and is seems to be horribly bad at the moment.

The next part of the system is the “Business Logic” layer.  In Healthcare.gov this is called the “Data Hub” and is described here.  There is a tremendous amount of coordination between different web services (Social Security Administration, IRS, Insurers, etc.) to make sure you get the insurance you’re supposed to.  Unfortunately, this is where the software engineers for Healthcare.gov have the least control over what happens, because they are dependent on these other services to relay data back to them quickly.

Finally, we have the “Data Access Layer” and “Data Source”.  This is where all the data is stored (e.g. your name, address, age, etc.).  The data that Healthcare.gov has to collect and then connect to other relevant pieces is tremendously complex and it is very possible that many of the problems lie here as well.  Fortunately, this is one place where you can “throw more servers at the problem” to alleviate performance problems somewhat.

While the answer to the question why healthcare.gov is failing is not entirely clear, I hope you have gained an appreciation for the complexity of this very important web application and how one problem in any of it parts can make the whole application slow down.  Unfortunately, I predict that many of these problems will not be fixed quickly because of their logical complexity.  Throwing servers at the system will only alleviate a small percentage of the problems and ultimately does not substitute for quality software.  Throwing more people at this problem violates one of the few laws we have in Software Engineering — “adding manpower to a late software project makes it later”.

Software Requirements Evolution


Software Requirements are evolving to keep up with users’ demanding appetite for applications. Simple “The system shall” statements have grown into User Stories and Storyboards. It used to be that talking about the GUI was verboten when gathering requirements. We software practitioners knew how to use the magic of creating software and the lowly users just needed to tell us what they needed and we would pull the software solution out of our proverbial hat. Not so anymore. Practically everyone has a smart phone or smart device (even my 3 year old) and the word “app” is universal thanks to the iPhone. Can I really gather requirements from my 3 year old for her new drawing app using Use Cases? Obviously no. Granted,the use cases may be used by the software developers but my 3 year old can’t even read for Christ’s sake.

Most users now know if they want a mobile app, web app, or desktop app. They know the differences and strengths of using these from years of experience. That’s why I think a more agile way of gathering requirements where quick prototypes and storyboards are used to gather feedback are meeting users’ requirements much better. If it’s a web app, well you have obviously constrained the application down to what HTML, JavaScript, CSS, etc. can do. So why not make a quick prototype of that? If they want an iPhone app, well there’s a pretty set style of doing that set by Apple. Obviously, we software professionals still have a part to play by asking, “Are you sure you won’t want to eventually have an app on the Android too?”. This leads to conversations about different architectures, technologies, and the cost/benefit analyses of each. But older ways of doing Software Requirements are becoming decreasingly beneficial with the changing “tech savvy” of users.

Please don’t get me wrong, there are still places to use Use Cases for certain kinds of projects. They are a tool in any good Software Requirements professional’s toolbox. But newer tools are coming out that need to be considered much more to keep up with software professionals’ ever changing user base.

Where does the acronym ALM (Application Lifecycle Management) come from?


I became interested today in where this ALM term comes from.  It is involved a lot with what Microsoft does on the Team Foundation Server (TFS) front and frankly, I’ve thought it to be just another marketing term for Software Engineering.  BUT, I wanted to investigate and dig deeper….

The best I can tell, the acronym ALM comes from PLM or Product Lifecycle Management.  The Wikipedia article on PLM has a good history of the term and how it came to be used at Chrysler in the mid 1980’s.  They basically started centralizing all designs, documentation, etc. of the Jeep Cherokee into one database to manage its creation.  Sounds a lot like ALM to me today.

It also makes sense that the term would come from manufacturing.  This article from 2002 talks about the transition in the manufacturing industry from Computer-Aided Design (CAD) tools to a more holistic approach of PLM.  There was also a boon of Computer Aided Software Engineering (CASE) tools in the 1980’s.  CAD leads to PLM.  CASE leads to ALM.  We both went from individual tools that did design, requirements, etc. and integrated them into one tool or system.  That seems to be the evolution.

The borrowing from manufacturing also makes sense as so much of Software Process comes from that industry. Kanban, Lean, CMMI, and on and on.  Deming, one of the greats in manufacturing process, is cited often in software process literature.

So there it is, ALM comes from PLM which all originated in the auto industry with the Jeep Cherokee.  Who would of thunk it? 🙂

Google Chrome Extension to switch between multiple monitors


So I have dual monitors and I love my UltraMon tool.  It puts a little button on every window that immediately puts the window in the other monitor when clicked.   Every window, except Chrome!!!  I was hopeful that I could write an extension to do this, but unfortunately I don’t think it is currently possible.  The windows api looked to be the best bet, but it came back with the minimized window width and height instead of the maximized window’s width and height.  This seems to be a bug to me.

But even if they could do that right, it still doesn’t seem possible.  Chrome’s extension api is very young and immature right now, which I can see from both the api and currently available extensions.  I hope it matures quickly!!!

This is how you do Network Security


At a client and was trying to get high-speed internet. Did the old “take an ethernet cable from some computer and plug it into mine” routine. Couldn’t access the internet or their network. Good for them.

But the best part is SIX MINUTES LATER, some guy comes in and asks me what I’m doing here. Says he got an alert to his mobile phone that someone on the level tried to gain access to the network. If it was after-hours (thankfully it wasn’t); security would have come. Also, no USB Data sticks work on any of the computers.

I asked him what software they use for this and he said, “I can’t say”.

Very well done sir, very well done.

Is Software Art?


I was reading Architecture by Sir Thomas Graham Jackson tonight to see if and where the parallels between real Architecture and Software Architecture are.  I was struck by the amount of art that is imbued and intertwined with Architecture.  As he says:

So two workmen will do the same thing, but will do it in a different way.  The work of both may be useful and serviceable, but that of one will show thought and imagination, suggestive of further progress; that of the other will be correct, but dull and commonplace, leading no further.  The one man is an artist, the other a mere mechanic.

Am I a mechanic or an artist?  I consider myself a Software Architect, but that would mean I’m an artist.

Where is the art in software?

Where is the beauty in software?

Is it from the graphic designers? NO.  They are like interior decorators in my opinion.  They make our buildings look nice to the inhabitant.  We make the structure.

I can tell you where the beauty in software is:

  • TCP/IP
  • The World Wide Web

We have something called elegance in software.  There are elegant solutions and brutish solutions.  I propose the elegant ones are where our craft becomes architecture.  Something sustainable, something that will stand the test of time.  Something to be copied.  That is what Software Architecture is.

Software Education in the 21st century


It is unfortunate that today’s software practitioners are put at such a disadvantage by spending four years of their lives studying things that are totally irrelevant to creating software (i.e. a BS in Computer Science).  I have yet to use any calculus in my career.  Discrete Mathematics was also a total waste of time.  P = NP is nifty, but not really relevant to my profession.

That is why there is such a brazen turn against the term software engineering.  This is where things such as the Agile Manifesto come from.  It is the pent-up frustration of software developers finally saying “ENOUGH”!  I want to get things done, I don’t feel like studying so much theory that I forget why I started Computer Science in the first place.

This era in time is analoguous to the late 1800’s in which established universities such as Harvard, et. al. were still teaching Latin and other useless subjects.  What came out of this was MIT, all the A & M schools, Virginia Tech, Texas Tech, etc.  Universities that actually prepared there graduates for the real world.

The big universities are so large that they cannot be turned quickly and today’s software profession changes every month.  A new model of education needs to be developed lest these big university programs are replaced.  There is a vacuum right now for certifying and educating software developers.  Either universities need to change, and change quickly, or the industry will find another way.   But time is running out….

Posting code in WordPress


I just found this out… and I think it’s awesome! I always want to write about code in html, but formatting is a drag.
Now with this, I don’t have to format any more! Yay!!

Here’s some html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">