Friday, January 30, 2009

Java Coding Guidelines - Part I

Does your company have a standard or set of coding style guidelines for writing Java code? Have you ever tried to write one?!?

From past experience, I'd recommend against it. Instead, I'd point you and your Java developers / programmers to Sun's Code Conventions for the Java Programming Language. This guideline has been vetted over many years and the entire JDK mostly follows it. As a result, most Java programmers are familiar with them, and Java code that follows these guidelines is generally readable by all Java programmers.

That being said, I'm going to ignore my own advice and begin writing a Java Coding Guideline for Xpediant. "Why?" you ask...

Well, I believe that Sun's guidelines are good, but incomplete. Remember, Sun's audience was much larger than Xpediant's audience, and therefore, had to be agreed to by a much more diverse group. Being smaller in size, we have the luxury of espousing and enforcing more specific coding practices - hopefully enhancing the quality, consistency, and effectiveness of our services.

So, where should I start? How does one go about crafting such a document?

Well, I believe the first thing that needs to be done is to create a vision - the same thing I would do for any new project.

Yikes.

Hm... Well, we are an integration and consulting company that works with and customizes software products that are Java-based, so it stands to reason that our Java code should be integratable with those products. And our projects generally deploy into enterprise-level production systems so the code should be high quality, production-ready. And since it's very likely we'll eventually turn over the code to the client to support, our code needs to be supportable and maintainable by other programmers.

So, the vision is:

To write a set of Java Coding Guidelines that:
  • Enhances Xpediant's ability to write, test, deploy, maintain, and reuse its Java codebase.
  • Consistently and seemlessly integrates with the Java codebase of the software products Xpediant's vendor partners create and sell.
  • Consistently and seemlessly integrates with Xpediant's clients' existing and new Java codebase.
Next, I'll explore the most basic Java guidelines - get the easy stuff out of the way first!

Friday, January 23, 2009

Unstructured Business Process(es)

Recently I came across a blog post that discussed the concept of unstructured business processes. You can find it here.

So, what is an unstructured business process (I hear you thinking)... Read on.

Internally here at Xpediant, I've always talked about dividing business processes into two types: linear and collaborative. Linear processes possess a set , pre-determined path of execution where one activity (step) is dependent upon the previous activity completing. In other words, the process is step-wise (and may loop or branch) and has a clearly delineated execution path from start to finish. Collaborative processes are ill-defined processes where the path of execution is non-deterministic, the order of execution is not defined and the only requirement for completing the process is that all activities have completed (either normally or abnormally, but 'done' nonetheless).

So, structured versus unstructured processes is the same set of concepts (with better names that are broader, more encompassing). It turns out, I'm not the only one that sees things this way (and, by the way, I know it is not the only way to segment business process types). There are several others that discuss the inherent differences between structured and unstructured processes as the blog entry noted above discusses.

One idea that spurred some thought for me was the suggestion that the relative number of structured versus unstructured business processes is analogous to the amount of structured versus unstructured data in the corporate world, which by the way is about 1:10. That ratio suggests that there is *large* market opportunity of unstructured business processes for BPM vendors to tap.

But as I thought about it more, the idea of BPM vendors addressing unstructured business processes was potentially antithetical to the processes themselves. In other words, the idea of applying a BPMS to an unstructured business process would inherently change the unstructured process into a structured (or at least partially structured) business process. So, it seems to me, the nature of the business process is altered and the process is no longer unstructured - walls are built that the process must work within.

That may or may not be a good thing. As I thought about it more, a potential opportunity with unstructured business processes is to reign them in and move them towards a more formalized (structured) process. In fact, this is the very point for applying a BPMS to a business process - structured or not. Formalization of the business process provides the opportunity to make the process reliably repeatable which can be measured and analyzed. This in turn provides the opportunity to manage the process, possibly making it more efficient.

However, it seems to me that in this same group of unstructured business processes there are processes that won't lend themselves to the application of a BPMS. That their unstructured nature is exactly what makes them work - the process itself depends upon and is enhanced by the unstructured, dynamic application of the work.

So, while there may be a large market opportunity with unstructured business processes, it's smaller than the whole set by some amount. Not only that, when choosing which process to apply a BPMS to, care and consideration of the nature of the business process is critical to the success of the project.

Friday, January 16, 2009

Response: OJT is Dead; Long Live Training

I've got to rant. Recently, I was forwarded a link to a blog post by Anne Thomas Manes that poses the notion that SOA is dead. After reading this post, I had to respond:

Obituary: OJT

OJT met its demise on January 1, 2009, when it was wiped out by the catastrophic impact of the economic recession. OJT is survived by its offspring: mentoring, coaching, experiential learning, Observational learning, and all other training approaches that depend on “hands-on” efforts.

Once thought to be the savior of business, OJT instead turned into a great failed experiment—at least for most organizations. OJT was supposed to reduce costs and increase agility on a massive scale. Except in rare situations, OJT has failed to deliver its promised benefits. After investing millions, businesses are no better than before. In many organizations, things are worse: costs are higher, projects take longer, and work is more fragile than ever. The people holding the purse strings have had enough. With the tight budgets of 2009, most organizations have cut funding for their OJT initiatives.

It’s time to accept reality. OJT fatigue has turned into OJT disillusionment. Business people no longer believe that OJT will deliver spectacular benefits. “OJT” has become a bad word. It must be removed from our vocabulary.

The demise of OJT is tragic for business. Organizations desperately need to make training improvements to their work force. Training is a prerequisite for rapid integration of people and business processes; it enables situational development models, such as mentoring; and it’s the foundational architecture for experiential and observational learning. (Imagine shifting aspects of your business to the cloud without training between on-premise and off-premise work.) Although the word “OJT” is dead, the requirement for training is stronger than ever.

But perhaps that’s the challenge: The acronym got in the way. People forgot what OJT stands for. They were too wrapped up in silly debates (e.g., “what’s the best job?” or “Skilled vs. Unskilled”), and they missed the important stuff: training.

Successful OJT (i.e., training) requires disruption to the status quo. OJT is not simply a matter of deploying new people and building friendships with other employees; it requires training. And it requires a massive shift in the way business operates. The small select group of organizations that has seen spectacular gains from OJT did so by treating it as an agent of transformation. In each of these success stories, OJT was just one aspect of the transformation effort. And here’s the secret to success: OJT needs to be part of something bigger. If it isn’t, then you need to ask yourself why you’ve been doing it.

The latest shiny new buzz-word will not make things better. Incremental training projects will not lead to significantly reduced costs and increased agility. If you want spectacular gains, then you need to make a spectacular commitment to change. Like Bechtel. It’s interesting that the Bechtel story doesn’t even use the term “OJT”—it just talks about training.

And that’s where we need to concentrate from this point forward: Training.


Yes, that's a parody (not the real blog post). Interesting, no?

In my mind, Ms. Manes' post was nothing short of a call to arms for evangelists, marketing types, and the media to come up with a shiny new buzz-word (or words). SOA (the term) is dead, so we need a new term. Something new to write about - to market, to hype.

We don't need no more stinkin' buzz-words.

My apologies if you find this offensive, but if I were working for a business that decides on a budget based upon media hype (or denouncement, as the blog post suggests), then I don't want to work for that business. Business decisions - and by extension business cases - need to be based upon solid, quantifiable information, not hype. A business cannot hope to survive by investing millions (as the post claims) in unwarranted, unsubstantiated claims of vendors and media. I have a higher (and experienced-based) expectation of the budgetary decision process.

What about you? What do you think? Does your experience indicate that the arrival of a project proposal on a business manager's desk with the moniker SOA make the proposal DOA? I would hope not!

Friday, January 09, 2009

A Call for Agreement

Can the BPM industry please stop 'defining' what BPM is? Please? Pretty please?

Am I the only one who's noticed that every time someone - an individual or a software vendor or a consultant or a book writer or etc... - talks about BPM, the first thing that's discussed is "What is BPM?".

I even caught myself doing just that as I was drafting a newsletter article recently. Ugh!

I know why we do it. We hear different ideas about BPM all the time that oftentimes don't line up with what we think we know about BPM. So, before we delve into what we have to say about BPM, we feel we have to "set the stage" (so to speak).

Why don't we have one definition? Why don't we all agree? Presumably we are all trying to do the same thing, right? So, if we all have the same goal, then we should be able to state it.

From now on, can we all please reference ONE definition for BPM and reference it? May I suggest wikipedia? Here's the BPM entry.

Now, if you have something you want to add, do it there. Let's discuss it, agree to it, and start using it. I will be happy, you will be happy, and most importantly, clients/customers will be happy they have a centralized reference.

By the way, looking at this entry in wikipedia, does anyone know how to eliminate the proposed merger of BPM and BPI entries? Maybe I should define BPM and BPI for you...

Thursday, January 08, 2009

Professional Development

This past December 2008, our company held an 'all-hands' meeting day. Basically, we all came together in our main office in Houston to get together before the holiday vacations and do a little internal training and networking.

I gave a presentation to all our consultants about professional development. While I believe there was interest in the topic, I think the presentation was received with bewilderment and a collective "huh?".

Have you ever volunteered for something and then been given the list of expectations after-the-fact (kinda like signing up to send out the church volunteer schedule only to find out that you are really responsible for managing the entire schedule - from finding the volunteers to facilitating communications to filling in for no-shows)? Yeah? That's the response I saw on the faces of our consultants.

I wasn't upset about the reaction. That's happened to me before - I used to be a corporate Java programming and software engineering instructor, and have seen worse reactions as I presented material. But, the reaction did make me think and assess ("inspect and adapt" as the agilists say).

So I did my own personal retrospective of sorts. It's taken me a couple of weeks to process what I can only describe as guarded "what the?" for what I had to say.

Here's my retrospective results:

We simply had mismatched expectations, and that is a communications failure - my communications failure.

I failed to adequately describe what the presentation was about. I just told everyone I would talk about professional development (like I just wrote above). That's it. So, miscommunication happened.

I believe the expectation of our consultants was that I would talk about "How to be professional as a consultant". You know, guidance on proper consultant behavior on and off a clients' site, and ways for managing your time and relationships with a client.

I certainly talked some about that, but my presentation was broader - I came ready to talk about "growing professionally" (not just as a consultant). I included discussion about proper consultant behavior, but also included skills training and company responsibilities as a professional.

Wow. That's really different perspectives. But, they can both be concluded from the same base idea, "talk about professional development". I really missed the mark communicating within my own organization.

So, what's the moral? "Don't let Bill present to our consultants anymore..."

I hope not. Or, maybe I do... Hm...

No, that's not my take-away.

My learning is that communication, whether formal or informal, whether verbal, written, or otherwise has a lot to do with success, especially as a consultant. It is one of the pillars of wisdom for consultants, and affects most, if not all best practices for consultants (and really, for professionals as a whole). Bad communication is the bane of professionals. We all need to develop and keep refining our ability to communicate. It's in our best interest and our customers' best interests too.

So, I'll add communication skills to my "Professional Development" presentation (and at the same time, try to come up with a better title!).

Do you have any good stories about miscommunication that lead to unexpected circumstances? I bet you do!

Wednesday, January 07, 2009

Leaf Blowers

Have you ever seen those guys who cut grass that use a leaf blower?

As I was taking my usual walk the other day, one of them was blowing leaves and grass clippings across the sidewalk into someone's flowerbed - out of sight, out of mind.

That kind of behavior really gets to me. And it's not just landscapers that exhibit this lack of judgment.

I am seeing this kind of behavior with software engineering and application development professionals - especially as the complexity of coding increases.

Here's what I mean.

Software code can be generally thought of as either internal or external with respect to other aspects of a system, specifically if your company is a software vendor. The external code is the code that the source is available and the internal code is the code that the source is private.

What I've noticed is that internal code, if you decompile it, oftentimes looks like the flowerbed where the leaves and grass clippings were blown. It seems that some software engineering professionals allow their code to get cluttered with bad or ill-designed code that has been swept under the mat of abstraction and encapsulation (to use object oriented terms), and left there - out of sight, out of mind.

I urge software professionals and vendors to clean house. Your code needs some spring cleaning. Dust out the cobwebs and sweep under the mats. And then, put in place some best practices (continuous integration with unit tests would be a good start) that will help keep the leaves out of your flowerbed.

Just promise me one thing... Don't be a leaf blower.

Friday, January 02, 2009

Year 2009...Looking Back...Looking Forward

As 2009 unfolds, it’s clear that enterprises with a forward-thinking approach and a solid grasp of technology trends will have a distinct competitive advantage. In an economic downturn companies that invest, develop and capitalize on technologies that decrease cost while increasing efficiency and effectiveness will have an opportunity to increase significant market and mind share with new and existing customers.

Even though the media is overwhelming us with consistent bad news and a doom and gloom outlook for 2009, I am fairly optimistic about the innovative spirit that makes us the leading economy in the world. There is a reason that investors all over the world flocked to the US Dollar at the height of economic downturn a few months back.

The technologies that companies will be looking to employ in 2009 range from Software as a Service (SaaS), virtualization, Web 2.0, document management, social networking to video collaboration. Other areas such as Portfolio Management, Business Process Management (BPM), Service Oriented Architecture (SOA), Enterprise Mobility, and Risk & Compliance will continue to stay on the radar for the next few years.

I also believe that companies that commit to applications developed using content management, collaboration, portal, SOA and BPM frameworks will not only find new opportunities/markets but also cost savings that are important for the short term.

To quote Edward Cornish “ The future of every organization, nation, and individual is filled with uncertainties, and our task in dealing with the future is to recognize the fundamental uncertainty in human activities but not allow that uncertainty to make us act without due consideration to the possibilities and probabilities.”

As we move into a year that may offer both sobering downturns and heartening recoveries, let us take this advice to heart and act with due consideration and thoughtful optimism.

Looking back 2008 has been a good year for Xpediant – our customers are happy, we have deployed mission critical systems on time and under budget, kept our annual revenue consistent from 2007 and had most of our customers renew or extend our contracts into 2009.

From all of us at Xpediant, Thank You for your patronage, we Wish You A Very Happy New Year, be safe.

Sincerely,
Qusai Mahesri