Skip to content

#TBT: Business Process Crystallization

crystal photo
Photo by włodi

This is a repost from over a decade ago, about how software coalesces and defines business processes. The post is a little rough (“computerizing tasks”?), but hey, I’d only been blogging for months.

The ideas are sound, though. The longer I’ve been around this industry, the more the ideas in this post are reinforced.

————————————————————-

I’m in the process of helping a small business migrate an application that they use from Paradox back end to a PostgreSQL back end. The front end will remain written in Paradox. (There are a number of reasons for this–they’d like to have a more robust database, capable of handling more users. Also, Paradox is on the way out. A google search doesn’t turn up any pages from corel.com in the top 10. Ominous?)

I wrote this application a few years ago. Suffice it to say that I’ve learned a lot since then, and wish I could rectify a few mistakes. But that’s another post. What I’d really like to talk about now is how computer programs crystallize business processes.

Business processes are ‘how things get done.’ For instance, I write software and sell it. If I have a program to write, I specify the requirements, get the client to sign off on them (perhaps with some negotiation), design the program, code the program, test it, deploy it, make changes that the client wants, and maintain it. This is a business process, but it’s pretty fluid. If I need to get additional requirements specification after design, I can do that. Most business processes are fluid, with a few constraints. These constraints can be positive: I need to get client sign off (otherwise I won’t get paid). Or they can be negative: I can’t program .NET because I don’t have Visual Studio.NET, or I can’t program .NET because I don’t want to learn it.

Computerizing tasks can make processes much, much easier. Learning how to mail merge can save time when invoicing, or sending out those ever impressive holiday gift cards. But everything has its cost, and computerizing processes is no different. Processes become harder to change after a program has been written or installed to ‘help’ with them. For small businesses, such process engineering is doubly calcifying, because few folks have time to think about how to make things better (they’re running just as fast as they can to stay in place) and also because computer expertise is at a premium. (Realizing this is a fact and that folks will take a less technically excellent solution if it’s maintainable by normal people is what has helped MicroSoft make so much money. The good is the enemy of the best and if you can have a pretty good solution for one quarter of the price of a perfect solution, most folks will choose the first.)

So, what happens? People, being more flexible than computers, adjust themselves to the process, which, in a matter of months or years, may become obsolete. It may not do what they need it to do, or it may require them to do extra labor. However, because it is a known constraint and it isn’t worth the investment to change, it remains. I’ve seen cruft in computer programs (which one friend of mine once declared was nothing but condensed business knowledge), but I’m also starting to realize that cruft exists in businesses too. Of course, sweeping away business process cruft assumes the same risks as getting rid of code cruft. There are costs to getting rid of the unneeded processes, and the cost of finding the problems, fixing them, documenting them, and training employees on the new ones, may exceed the cost of just putting up with them.

“A computer lets you make more mistakes faster than any invention in human history – with the possible exceptions of handguns and tequila.” -Mitch Ratcliffe, Technology Review, April 1992

A computer, for the virtue of being able to instantaneously recall and process vast amounts of data, also crystallizes business processes, making it harder to change them. In additional to letting you make mistakes quickly, it also forces you to let mistakes stand uncorrected.

King Soopers, Please Fix Your HomeShop Service

 

groceries photo
Photo by State Library and Archives of Florida

King Soopers is leaving money on the table.

I tweeted about this a while ago, but thought it was worth expanding into a full blog post.

Now, first, let me say that I haven’t used new shopping services like Instacart, but I agree with Gary Vee (link is a video, you want to go to 6:50)–home shopping gives me more time and that is an extremely precious commodity that I am willing to trade money for.

King Soopers, for readers outside of Colorado, is one of the two major grocery store chains–it’s owned by Kroger, a name that may be more familiar to you.  (The other is Safeway, and they don’t do home delivery to my area.)  The King Soopers online shopping experience, is abysmal.

Let me count the ways:

  1. It’s difficult to find the link from their home page (here it is if you want to try King Soopers HomeShop).
  2. There is no clear delivery map–you have to enter your address and then you find out if they do deliveries to your location.
  3. The UI of the shopping experience hasn’t changed since 2009 (the first time I used it).
  4. Searching is tough–synonyms are not handled (searching for ‘scallions’ returns no produce results, whereas searching for ‘green onions’ does, even though they are the same vegetable).
  5. Product description for produce is unclear. For instance, here is the description some onions: “King Soopers/Onions Yellow Organic Fresh Produce (Each)“, but the price is is by the pound.  So, when I put in 1 into the quantity section, am I getting one onion or one pound of onions?  I don’t know.
  6. Sorting is limited to ‘Brand’ or ‘Description’.  That’s right folks, an ecommerce site where you can’t sort on price.
  7. Browse options are not clear–they have an ‘aisle’ metaphor, but organic produce is in a different category than regular produce.
  8. Product images are spotty.
  9. They don’t have a submit event fire when you hit ‘enter’ in the search box.  To be fair, this issue only affects FireFox.
  10. They don’t have every product a store has.  But wait, aren’t they fulfilling from the same warehouse?  I don’t know.

So, why would you ever use King Soopers HomeShop?  Because home delivery is so dang easy, and spending an extra $11 to not have to go to the store is worth it, especially for a big shopping trip.  There are other reasons as well:

  • No (or far fewer) impulse buys.  Maybe this is the reason they aren’t investing in this product?
  • You can save a list of staples and just re-order it.
  • Did I mention they deliver food to your house?  The drivers have been very nice, and even brought the bags into our house at times.
  • The UI for picking a pickup time is good, and I haven’t encountered any traffic jams.
  • I’ve been happy about the quality of non fungible items I’ve had picked out for me (such as lettuce).
  • They are good about substitutions.  If something you request is out of stock, there are three choices: ‘no substitutions, just omit’ or ‘please substitute’.  If you choose the latter, you can either accept or reject the substitution at delivery.

But the best reason for using HomeShop is the convenience of having your food delivered to you for a reasonable price.  As a busy person, this is huge.

I really really want King Soopers to repair the crappy parts of this service and make it amazing.  Heck, I’ll even consult with you on it.  Home delivery is a win in so many ways–please fix it, King Soopers.

Finding company phone numbers

I ran into a situation recently at work where I was trying to find the phone number of a company. Checked the company site, including the footer and contact us page, and no phone number was available.

Now, I can see why, as a small startup (which is what this company was), you would not want a phone number available. But we were doing due diligence and I thought a phone call or two would be appropriate.

So, here’s a list of places to go to find a company’s phone number, if it isn’t available on their site:

  • Dun and Bradstreet. Especially useful if the company has an iphone app, because Apple requires DNB registration for a corporate developer account.
  • Facebook often has different information than a corporate website, if they have a facebook page at all.
  • The whois database sometimes has address and phone numbers associated with a domain.
  • The Secretary of State office, for whatever state they are in. This is where business documents are file, and is worth checking.
  • Twitter. Depending on your situation, you can also just tweet them directly: “@foo, I’m looking to call you, do you have a phone number”.
  • LinkedIn, to look for people who know people who work there. This may be more or less useful based on the spheres you run in and where you live.
  • The Wayback Machine, which lets you see how websites appeared at various points in time. This is useful if the company at one point had a phone number on their website, but now does not.
  • Use the above methods on any other names you have turned up during your search, as well.

It is simply amazing what you can find on the internet with some digging. So, if you are looking to find the phone number of that company, because you need to talk to them, don’t give up.

Coursera online MOOC: one student’s experience with Stats 101.

I have been taking Statistics 101 from Coursera. This course is taught by a Princeton professor. I have been interested in stats for a while, but have never taken any classes. As a bonus, a work project I’m focused requires a lot of linear regression. (I’m using a library for the linear regression, of course, but wanted to understand some of the limits of linear regression before applying it for a business purpose.)

It was very easy to sign up for the class. I was a bit early, (the lectures are put up weekly starting on a given date), so I just added my email address to the wait list. When the class started, they emailed me and I registered.

It was free.

There are some changes coming to the university world. I have some friends who are professors and I’ve been sharing articles like this one and this one for years.

So, that was an additional reason to take the course. What would an actual online class be like?

The class is divided up into 12 weeks, 1 midterm and 1 final. Each week there are between 4 and 6 lecture videos to watch (the longest was approximately 20 minutes, the shortest is approximately 5 minutes), a lab video and a homework assignment. The lab typically examines the lecture concepts and puts them into practice using R, an open source stats tool/language. The homework is an untimed quiz that I have 100 tries to finish. Each quiz has 10 questions, some text input, some multiple choice, and typically is due 2 weeks after the initial lecture on the topic. I can complete the quiz later for reduced credit.

I’m over halfway through the course.

Am I learning something? yes. Definitely. I’ve learned basic concepts of statistics. There has been some handwaving on some complicated concepts and single letter concepts are occasionally introduced with little explanation (t, Z, and F values, for example), but this is an intro course, so I am unsurprised. I definitely have become comfortable with basics of R.

Am I learning what I would be in a normal college classroom? Nope. There’s been no collaboration (because of my time constraints, I don’t participate in the forums, which are the only form of collaboration I have seen). All R scripts are provided in the labs, which means you sometimes just cut and paste. Questions on quizzes are constrained by the online test format. Because I’m jamming it into my schedule, I don’t review the material as much as I should. There’s no opportunity to stop the instructor and ask exactly what he meant.

But….did I mention it was free? And that I’m not in college and don’t have the time for a normal college class?

If you are thinking of taking an online course through a MOOC like this one, here are some tips.

  • block out time to watch the lecture videos–I spend about 1-2 hours a week doing this. You can double book this with mild exercise (treadmill), sometimes. Sometimes the concepts were complex enough I could not multi task.
  • Coursera has a button on the video player to run the videos faster. I just started using this and find running the lectures at 1.5x is doable.
  • plan to spend some time on the labs and quizzes–I spend about 1-2 hours every week.
  • know what you want. If I wanted a deep understanding of statistics, I would probably need to spend an additional 2-4 hours each week working on understanding all the concepts covered in the lectures, and get an additional statistics book. (This one looks nice.). But I want a conceptual overview that lets me dig into third party libraries and learn the domain jargon enough to search the internet for further resources. This class is letting me do that.
  • get a tablet–these devices are perfect for consuming the lecture videos.
  • be flexible in your viewing, but try not to view a week’s worth of material in one day–that much academic knowledge transfer is no fun.
  • no credit is available. This might be an issue for some students.
  • be committed. It is very easy to sign up for these courses and then drop out, because there really are no consequences. But there are a huge variety of courses from a number of sources: udacity, udemy, edx, Khan Academy.
  • enjoy the free world class instruction.  Did I mention this was free?

All in all, I’m happy with this course and will come out of it more grounded in statistics.

From my experience in this class, I think that the business of teaching, especially introductory material that lends itself to video lectures, is going to undergo a change as radical as what newspapers have been through over the past 20 years. I don’t know if MOOCs will augment or supplant universities, but the scale and cost advantages are going to be hard to beat.

My ODesk experience

A few months ago, I had a friend who mentioned that he was investigating ODesk to find help for his software project.  I’d heard of ODesk before and was immediately interested.  I have a directory of Colorado farm shares which requires a lot of data entry in the early months of each year, as I get updated information from farmers.  So, I thought I’d try ODesk and see if someone could help with this task.

Because this was my first time, I was cautious.  I worked with only one contractor, and only used about 17 hours of her time.  We worked off and on for about 3 months.  She was based in the Philippines, so everything was asynchronous.  We communicated only through the ODesk interface (which was not very good for a messaging system).

I chose her based on her hourly rate (pretty cheap), skillset (data entry) and reviews (very good).  I made the mistake of contacting her to apply for the job, but letting others apply as well, and in the space of 3 days had over 90 applicants for the position.

After selecting her, and her accepting my offer, I created a data entry account, and described what I wanted.  This was actually good for me, as it forced me to spell out in detail how to add, update or remove an entry, which is the start of the operations manual for my site.

After that, I managed each task I’d assigned to her through a separate email thread.  I did light review of her work after she told me she was done updating, and did go back and forth a couple of times over some of the tasks.  In general, she was very good at following instructions, and OK at taking some initiative (updating fields beyond what I specified, for example).  There were some bugs in my webapp that caused her some grief, and some updates I just did myself, as it was quicker to do them than to describe how to do them.

The variety of work you can get done via ODesk is crazy, and the overall ODesk process was very easy.  You just need to have a valid credit card.  If you are looking to start on a project right away, be aware that some lead time is required (they charge your card $10 to validate your account, and that takes some time to process).

Even though it didn’t save me a ton of time, it was a useful experiment and I’ll do it again next year.  For simple tasks that can be easily documented and outsourced, it’s a worthwhile option to explore.  Though be careful you don’t outsource too much!

Hackfest tips for companies with few developers

Last year, my company ran a hackfest.  This year, we are doing it again.  The company I work for, 8z Real Estate, is about 20% real software developers, though everyone at the company is familiar with software and technology.

How do we run a successful hackfest when only a few employees can build software?

  • Include everyone.  It will be a richer, more fun experience with more people.  Get executive buy in–I found the original ‘fed ex day’ post helpful in explaining the idea.
  • Set goals and expectations.  At a typical hackfest (or hackathon), running code is the goal.  For us, autonomy and exploration is more important.  In the announcement email we state: “the idea is to give everyone a chance to do something work related that they want to do, or try, or explore, but don’t have time to because of the hustle and bustle of work life.”
  • Reset deliverable expectations.  Rather than running code, the deliverable at a typical hackfest,  at an event with many non technical attendees other deliverables should be embraced.  Spreadsheets, powerpoints, text documents, mockups, link gallerys, images–these are all artifacts that capture an exploration.  They can also be referred to in the future.  (I don’t think a presentation without an artifact is a good idea, because of the lack of permanence, although I guess you could videotape it.)
  • Encourage developers to work on different teams.  Spreading the developer viewpoint and code writing ability across as many groups as possible is a good thing, as it will allow the groups to push their ideas further. That said, if a developer really wants to work on his or her own idea, don’t force them to join a team.
  • Make sure contractors feel welcome.  Because this isn’t a typical workday, it can be difficult to justify paying contractors to attend.  But a hackfest reinforces company culture and can make contractors feel part of the team.  We compromise by inviting contractors and paying them a mutually agreed upon reduced hourly rate.  If they are technical, this also adds to the pool of developers as well.
  • Have the hackfest onsite, preferably in one conference room. Especially for the first one, the hum of people working will be motivating and exciting.
  • Have the hackfest happen on one day.  Pick one that is slow–for real estate, that means closer to the year end holidays.
  • Plan for some ‘normal’ work to be done on the day of the hackfest.  We need to provide daily customer support, so on hackfest day we try to compress a full day’s work into a few hours, then shut off the phones.

Then, some general hackfest principles that I believe are true no matter what the attendee’s skillset.

  • Start with a timeboxed ideation whiteboard session.  This lets everyone see all the great ideas, and find what interests them.
  • Use the ideation session to head off any ‘typical work’ tasks that people suggest (‘I just have to verify 4 more bugs on the foobar widget’).
  • Let teams self organize, but encourage cross pollination between departments and teams.  A hackfest is a great way to build trust between people who don’t normally work together.  On the other hand, if someone is very passionate about an idea that no one else cares enough about team up on, let that person pursue their passion.
  • Handling managers at a hackfest is a sticky subject.  On the one hand, there is benefit to treating them as another employee–they get the benefits of working with different people and ideas.  On the other hand, because of their job, they may (unintentionally!) warp the autonomy of the team.  Last year, the CEO worked alone, but all the other managers were treated as employees.  Discuss this issue, especially with higher level executives, before the day of the hackfest.
  • Order in lunch, which keeps the momentum going.

Any tips for a good hackfest, especially one attended by fewer developers than non technical people?

Tips for using your phone as a wifi hotspot

I recently was working remotely.  Typically when I do this, I try to find a coffee shop or library–someplace I can park for free or cheap and get access to wifi.

On this trip, for a variety of reasons, finding such a place was going to be more of a hassle than usual.  I had noticed my phone had wifi hotspot capability in the past, so I decided to try it out.

I have AT&T service, and an Android phone (an HTC Inspire running Android 2.3.3).  With my existing 2GB/month data plan, I could not turn on wifi hotspot cability.

However, a quick call to AT&T customer service revealed that the only obstacle was upgrading to a 5GB/month data plan, and that I could downgrade easily if I wasn’t happy.  The change would take place immediately (or at the next billing cycle if I desired). After a day of deliberation, I placed the order, and started using my phone as a wifi hotspot.

Pluses

  • great to work from anywhere where I can get a decent signal
  • able to use go to meeting, video, browse the web, email, skype–there was really no online tool I was not able to use
  • you can control number of users and apply access control

Minuses

  • Speed was like DSL (I had 2 bars most of the time and was on the 4G network, but the phone was a 3G hotspot–not sure what that means)
  • A variety of things could cause internet access to stop: incoming phone calls, downloading lots of data (photoblogs), having three or more browser tabs downloading data, trying to upload a photo and download data in another tab
  • Internet access would stop working every thirty minutes or so with normal usage, requiring me to ‘reset the router’ by turning off the hotspot and mobile data, then turning them back on

Tips

  • Use an offline mail client (thunderbird is my favorite, even though it is no longer being developed).  This will let you respond to emails without using notepad or some other desktop app to capture your thoughts.
  • Practice patience, and if you absolutely must have bulletproof network access, go to a coffee shop.
  • Focus browsing on crucial pages.
  • Having another phone available (for web meetings or regular phone calls) is really helpful
  • Have someone else host skype calls–trying to host didn’t work, but I could participate just fine if someone else hosted

Even though the experience wasn’t optimal, frankly it is pretty amazing that I can use my computer and have reasonable access to the internets from anywhere that has a decent phone signal.

Why isn’t everyone a developer?

I was at a party recently kvetching with some fellow developers and managers of developers about how hard it is to find good talent here in Colorado.  One fellow said he feared a return of the last days of the 1990s, when the hiring bar, and thus the quality of code produced, was drastically lowered.

On the way home, my SO asked why, in a time where many are having difficulty finding jobs, why everyone wasn’t a software developer.  At first, I thought, why not ask “why isn’t everyone a doctor; we have a shortage of those”, but then I realized that it is not applicable.  Especially if you are willing to be a junior developer, the low educational and licensure hurdles to becoming a developer, the remuneration, and the flexibility and intellectual challenges combine to make it a very attractive job.  (Given I am a developer, I may be biased.)

I think there are five attributes you need to have, that progressively fewer people meet.  (I’m purposely ignoring experience programming, because everyone was junior at one time.)

  1. Willingness to work in an office–it’s not everyone who wants to drive (or otherwise commute to an office), sit on their butt every day, deal with office politics, and miss out on natural light.  Even work in a home office or a coffee shop, while alleviating a some of the above issues, is a lot of sitting.
  2. Computer literacy–a developer has to have a basic level of comfort with a computer.  This is a filter that will probably become less relevant for middle class Americans as younger people who grew up with a computer reach the workforce, but for a substantial number of workers, computer interaction is tedious, confusing and irritating.
  3. A logical mind.  Computers aren’t very squishy (fuzzy logic aside) and while logic can be learned by anyone, it takes work to think of the world in the kind of systems that can be modeled in software.
  4. Initiative.  You’ll notice that throughout this, I talk about a developer, not a programmer.  That’s because a programmer, someone who takes a set of specifications and codes them, is a job that is rapidly disappearing.  Developers, who have a broader skill set, including, if need be, the entire stack from business analysis to coding to testing to deployment to support, need to have initiative.  Initiative is, incidentally, a precious attribute for any position.
  5. Lastly, I come to the actual skills of the job–coding, business analysis, testing, etc.  This is the last hurdle, and one of the smaller ones.

So, there are many good reasons why everyone isn’t a software developer, even though there’s plenty of software to be written.

What is the difference between a developer and a programmer?

In my mind, developers have skills that are a superset of the skills of a programmer.

Programmers:

  • understand how software works
  • think about the best way to solve problems they are presented with
  • write good code
  • learn new techniques, languages and manners of creating software
  • write documentation
  • write tests

Developers:

  • do all of the above
  • work with the business to define requirements
  • test beyond basic unit tests, up to and including user acceptance testing
  • understand basic system administration
  • do basic database tuning
  • deploy software and solutions
  • can do some UX design
  • can manipulate graphics
  • support and maintain what they’ve written

In other words, developers can span the gamut of needs–they are jack of all trades.  Not all positions are fit for developers because they can be a mile wide and an inch deep, but in general having someone who can handle the entire software lifecycle is more useful in more situations than having someone who is handed a spec and can crank out code.

(Note that I’ve never worked in a huge company for longer than a few months, so perhaps that is where programmers are more useful.)