(New posting on 2016-06-04; originally posted as /archives/4698)
If your business logic starts getting complicated, it might mean that you should use finite state analysis and design. This technique is very popular for the artificial intelligence systems used in video games, and there are a number of finite state machine frameworks out there for Java, but they are all pretty heavyweight.
How does one create a lightweight state machine, and what is finite state analysis anyway? The ACM published a paper called “The Art of the State” by John F. Cigas in 1992.
In the paper Professor Cigas describes how to do finite state analysis, and how to implement your state machines via a loop surrounding a switch statement… that’s it… its that simple.
Please read the paper. If it doesn’t make any sense, then ask me how this is used, and I will show you. Please go to this page to get the PDF: http://portal.acm.org/citation.cfm?id=134541 The technique basically orders complex if-this-or-that-or-this-or-that type logic into the simplest form possible, and its really easy to do.
(Originally posted on 2008-11-23 as /archives/1557)
I see-and-read way too many presentations that both start with doom-and-gloom, and then overstate the case that the author wants to make. This seems to be the only way that software consultants know how to begin a presentation: “Information is getting harder and harder to manage.” No its not. “Software is getting harder and harder to write.” No its not. “The sky is falling!” Actually, no its not.
“Our software will help you manage your Enterprise.”
Or your software will cause headaches and heartaches for countless people.
Your future client will read reports by an “independent” technology research firm. Then she will hire a consultant, and ask that consultant to write an evaluation of all of the available enterprise software applications for a given need. (Here is what Doug Savage has to say about this. Cluck, Cluck, Bawk!)
The consultant will produce a large report that says exactly what the independent technology and research firms say, in spite of the fact that neither said consultant, nor any employee of the research firms have any practical experience with the enterprise software in question.
Here is why:
There are only a couple of large independent technology research firms. They don’t have the resources to become experts with every product, so they do their research by meeting with the vendors and viewing their presentations.
This gives the product vendors incredible leverage. That’s why you can look at the descriptions of three completely different products where one started as a document repository, another started as a code versioning system, and another started as a Web UI toolkit. These products’ architectures have little in common, yet they are all called Enterprise Content Management Systems, and they all have the same listed features. Those feature lists are written to satisfy the independent technology research firms’ evaluations, and really tell you little about a given products’ actual capabilities.
CIOs and other executives subscibe to, and read, those independent technology research firms’ evaluations.
Then those executives hire the consultants. They ask for the consultants evaluations, but they really are looking to validate what they already believe. Consultants quickly figure this out after hearing “But [Insert-Name-Here] Research said” a couple of times. The consultants learn to mimic what the independent technology research firms say, in spite of the fact that the original research is based on little more than writers watching PowerPoint presentations.
Here is a universal piece of advice: never buy anything unless you get to prototype with it before you write a check.
Your future client will then ask the consultant to write a request for proposal (RFP) to send out for bids. That consultant will write the RFP in such a way that only his company can fill all of the “requirements” in time.
You will charge your client $1.5 Million. You will first ask for more, and after weeks of negotiations you will convince your client that you can go no lower than 1.5 Million, and that nobody gets your software for less, meanwhile all of your clients are actually paying 1.5 Million, plus training, plus development, plus support, plus travel, and the pluses just keep on coming.
I worked with one product at three different companies. Each of the company’s managers told me something like, “They normally charge X, but we got them down to 1.5 Million instead, because they really want our business. They won’t do that for anyone else.” Oh. Really.
Your client will spend many times the expected amount on employees and consultants. These people’s job will be to manage the mess that you create, and you client will have to live with that mess, lest she admit that she wasted millions on your “Enterprise” software.
You will convince your client that the mess was actually caused by her incompetent employees, in spite of the fact that her employees are actually proud, hardworking, well trained, and intelligent. You will then provide high-priced consultants to replace your client’s employees.
What else can they do? In some cases the enterprise software vendor’s management team is in survival mode, and will continue passing-the-blame-to-their-customer until they have a mature product.
In some cases, they may truly not know that their product doesn’t work, because the support team is filtering-out the bad news. This happens when you measure support success by how quickly problems get solved. The tickets get closed quickly, but the root problems rarely get solved, because that takes too long.
Either way the vendor has no incentive to admit that their software is actually not stable.
I once worked for a consultancy that was helping an energy company implement a new content management system (CMS), and the CMS vendor’s chief technologist simply repeated, “You have the DTD. That’s all you need” over-and-over again in front of the client. What we were asking for was the proprietary query language’s (non-SQL) documentation. Imagine if you had to learn a language with nothing but a description of the noun-verb-noun syntax. No dictionary. No thesaurus. No books. No teacher. No examples. Nothing. That product was not ready to be sold, and the chief technologist was able to seed doubts about us simply by saying, “You have the DTD. That’s all you need” over-and-over again. That product was highly recommended by the two large independent technology and research firms.
Your client will put up with this “gladly”, because how else is she going to explain why she wasted so much money on your “Enterprise” software, when there was actually something better out there for free such as:
Windows Sharepoint Services – free document management with every Windows server. Organizations buy expensive document management systems when they already have SharePoint available. Some companies want to integrate their new insert-name-here product with SharePoint, but insert-name-here is nowhere near as capable. They just believe that it is, because someone sold them the Brooklyn Bridge.
If you are going to write enterprise software, then start out by solving the hard problems, because the easy problems are already easy. I don’t know how many vendors told me, “We can do session management!” So? Anyone that knows what a Static Class and a Hashtable is can write a session manager in an afternoon. “Our sessions can survive a reboot!” OK, anyone that knows what a Static Class is, and also knows how to embed a relational database can create a session manager with sessions that survive a reboot. Solve the hard problems for me.
Project management, and software engineering are incredibly difficult, and that’s what makes this work interesting. If it were easy, then there would be no way to get me sitting in front of a computer screen for so long. Doing this stuff well is a true reward.
I have been meaning to write this essay for years, but I never bothered, because I didn’t believe that anyone would read it; it would be lost in a sea of more exciting tech news. The truth is that it caused a spike-in-viewing during what is traditionally a slow-day here.
Then there is the worry that a potential employer would see this world-view as negative.
Ironically it was an anthropologist’s (Dr. Michael Wesch) video that inspired me to finally write the essay. To see many of the real advances in the Web-realm presented in a few minutes, made clear many of the non-advances. The video’s name: “Web 2.0 … The Machine is Us/ing Us” sounds provocative, but the video looks optimistic to me. I suspect that different people see a completely different message in this video depending on their background, and that’s cool too.
(Originally posted on 2015-11-12 as /archives/10591)
Disclosure: I am a paying Blur customer, but that’s the only relationship that I have to the company.
All of the spam and computer viruses (yes viruses) for the past year have come from the same place, and I know exactly where that place was, even though the emails were all spoofed.
How? Blur (formerly called: Do Not Track Me) creates a separate email address every time that I fill out a form. I have more than 250 email addresses: one per website. Blur makes it extremely easy to create and manage them. It does almost all of the work automatically. I use it on Windows and Android, but it’s on other platforms too.
What’s the point? If I get spam going to one of those +250 addresses, then I can remove that address from Blur, and voilà: no more spam. That address is no longer valid, but everyone else can still email me.
HOW TO KILL SPAM IN A FEW EASY STEPS (the actual steps)
(Originally posted on Apr 20, 2009 as /archives/2531)
I had this experience back during the dot-bomb bust. Obviously I need to paraphrase here, because this conversation happened long ago.
“How are you doing your online job search?”
I then describe how I search for positions via friends, Monster, etc.
“That will never work. Those ‘known’ positions potentially have hundreds of applicants. It doesn’t matter how good you are. There are just too many other applicants.
Here is how I find potential applicants. One of my clients contacts me directly to fill a position. These are typically not positions that are widely advertised. My client wants to interview a small number of highly qualified people. I go to one of these Web sites (she then shows me Monster).
Then I search on the keywords that are in the job description, the potential applicant’s location, etc. Then I contact the folks on the first page. I am almost always able to fill the position for someone near the top of my search results.
So, the most effective way for you to find a position is to be on that first page. You don’t look for positions, because too many other people are applying for those very same positions. You simply position yourself so that I can find you.
See this? The results near the top were edited recently. Make a resume. Put it on here.
Put all the technologies that you know on it, and update it every single day, even if you simply add a space somewhere. Editing it every day puts it near the top of the search results. This advice will help other recruiters find you. In the meantime I will see if any of my clients need you now.”
Needless to say, this turned everything upside down. My job wasn’t to look for a job. My job was to market myself.
The advice above eventually generated many leads over the next ten years: long after I stopped updating my resume online. So this plan did work.
That said, you never know where your next offer will come from. I met a Walmart recruiter at a Diversity Job Fair during the dot-bomb implosion.
The Dallas Metro area lost over 78,000 IT and Telecom jobs during the 12 month period prior. Many of those folks were at this job fair.
There were two extremely out-the-door lines to the only two tech companies present, and a lot of empty booths for non-tech companies.
One of the tech companies was interested in applicants with flight simulator engineering experience. The other said, “Go to our Web site. We are not taking resumes.” O… K… I was near the start of the line, so I let others know what I learned, and I heard a lot of, “Thanks, now I don’t have to waste anymore time here” in response.
So, I introduced myself to a Walmart recruiter at her empty booth, because why not? She took one look at me and said, “I am not recruiting computer programmers. I am recruiting night stockers in Dallas for the holiday season.” I reply with, “That’s OK I was a Night Stocker at Ames Department Stores. I like retail, and I like stocking shelves. Also, I would like to move to Bentonville Arkansas to be a computer programmer.” She took my resume, told me that she would bring it home, and give it to a tech recruiter. That led to the highest paid position that I have held.