July 5, 2025 – Montgomery – Freedom Monument Sculpture Park

An hour or so later found us at the Freedom Monument Sculpture Park.

It was hot now, good and proper. The heat in the South is peculiarly different from the heat that we know in India. Mom remarks on this too. The temperatures are lower here. But the heat over here burns in a way that the heat, in say Chennai, does not. Could it be the relatively lower pollution? It is all probably in the damn mind. We are in shock. We are in America; we expected the roads were paved with gold; the air a constant balmy 65; the women all look like lifeguards on Baywatch; instead, WTF is this?

In the park, every few feet, along a winding walkway, were sculptures, plaques, and audio exhibits. Mom stopped at each exhibit, read every plaque, listened to every audio recording. Almost 45 minutes in, we barely covered the first quarter of the park. The stories did her in. The heat did not help. I cannot take any more of this, she said, let’s go.

I had shut down even earlier. Certain types of art do not move me. I am afraid the sculptures in that park were amongst them. The reason is not clear to me. Someday I must figure it out. What is ‘Art’ anyway? An act of communication, using a certain medium, employing a certain technique, adhering to certain social rules, communicating a certain story, a certain idea. Whatever they were attempting in that park, was missing me. This is similar to my response to some ‘Indian’ art. Thanjavur paintings, Mughal paintings, Ravi Varma paintings, the temple sculptures, they leave me quite cold. Everything is interesting. I can engage with them intellectually, study them if I have to. But they do not rearrange my insides. I know a piece of ‘art’ works for me, when I cannot escape it. It burrows into the psyche, and stays. The material in that park was not doing it. I followed my Mom, looking at things, with mostly one thought. It is too bloody hot, get me outa here.

We cut across the park. On our way out, we came to a wide and tall, wall with hundreds of names engraved on it. The wall cast a large shadow. I stood in the coolness of that shadow and was soon lost in the names. This ‘art’ was working on me.

One of the staffers in the park came up to me, and we started to chat. She explained what the wall was. After the Civil War, freed slaves registered for the Census. What names do they use? Their ancestral names were lost to them. Do they use the names given to them by their erstwhile owners? So they got to pick names for themselves. Bullseye; something heavy flooded through me. The young lady saw it on my face. She said, yea, cool, ain’t it.

I cannot relate. I cannot put myself in their shoes. This is the unknown. What does it do to you, when you have no past to rest on? Or the only past you have is several generations at the receiving end of slavery. The only life I have known, has been hell on earth. What must I carry forward from this life? What is my name? The name that my owner gave me – do I want it? What is my name? What is my Dad’s name? Who gave my Dad his name? Where did I come from? What is my heritage? A slave shack in Mississippi? Sod that. Who am I? What am I supposed to be now?

Couple of the other staffers joined us. Local college kids on summer jobs, perhaps? They asked me where I was from. I told them, Pittsburgh. I drove to Florida to see my aunts, I said, and we are driving back to Pittsburgh, with a detour through Alabama. They enjoyed that, like one enjoys a disaster movie. Man you’re crazy, they laughed. Yes quite, but I like it, I said.

These few moments, with these young people, made my Alabama trip. They were the monuments, which I needed to see. They were the future that all those earlier lives paid for. I am forever struggling to keep the faith alive. Those young faces, in the shadow of that wall of names, refueled me. We carry on.

We left the park and headed to lunch. It was a Mexican place, called Little Donkey. I must say it hit the spot. The portions were small and light, just right for Mom. I indulged in a Margarita, which was also small enough to be appropriate for lunch.

Next door was Hero Donuts. One of those new fangled places with gargantuan donuts that cost an arm and a leg. They were also serving breakfast. The place was more crowded than the Mexican restaurant next door. One table had a South Asian family. Parents and college-age children, they looked decidedly upper middle class. A physician’s family, I thought, if not, I will eat my non-existent hat.

We ordered a couple of donuts to go. We had to wait a bit. A young Black woman called out, Reddy!. I said, yea, loud enough to catch her attention, raised my hand, and walked towards her. She handed me the bag with a smile. Slightly tired, slow, smile that reached her eyes. God Almighty. ‘Art’ that worked.

Casting my eye over the crowd in Hero Donuts, I finally recognized something I had been seeing all day. Everywhere we went, there were multi-generational African American groups, going about their day, doing things, together. In the hotel, at the memorials, and in the restaurants. It occurred to me that I am not used to seeing that back East, in the neighborhoods I lived in. I am not sure what to make of that. It means something, that.

The donuts were ‘melt in your mouth’ good. But Holy Hell, do they really have to be so expensive?

July 5, 2025 – Montgomery – Hank Williams Sr.

We finished visiting with Rosa Parks around 9:30 AM. Next stop was a small unanticipated delight.

Hank Williams, the Senior, his grave is in Montgomery. He was from Alabama. I had no idea. I was idly googling things to do in Montgomery when I stumbled on the fact.

There are some sounds, which I hope accompany me into eternity. The music of Hank Williams Sr. is one of them. I find Hank Williams’ voice, his lyrics, and music, a little piece of perfection. Human beings, by definition, are not perfect. However, some of us, at certain times, are able to produce perfection. Hank Williams’ music is one such example for me. They say God is perfect. I cannot know if God exists. I do know Hank Williams’ music exists. I am happy to worship what I can hear, touch, see. Hank Williams’ life was plenty messy. Hank Williams was not God. His music though, to me, is bloody divine.

Krishnamachari Srikanth’s square drive off Andy Roberts, in the 1983 World Cup final. 42 years ago, and I can still see it in my mind’s eye. Tendulkar’s straight drive off Shoaib Akthar, in the 2003 World Cup. Jemima Rodrigues’ knock in the 2025 Semi-Final against Australia. These are of a piece with Hank Williams’ music. A touch of God amongst us mortals.

The cemetery is within the city, not far from downtown. There was a road all way up to Hank Williams’ grave site. It felt good to be there. Part of it was being all by ourselves in that vast cemetery, swaddled in the bright morning sun. It was not hot yet. Part of it was the dubious thrill of being in a place where I am not expected to be. Indian immigrant – what would he know of Hank Williams Sr.? My Mom and I got out of the car and walked about the grave site a bit. Little old Indian lady in a saree, at Hank Williams’ grave. Only in America.

After a bit, an older White couple stopped at the grave. We chatted. If they were surprised to see my Mom and me there, it did not show on their faces. Nice. The lady asked me if we were going to the Hank Williams memorabilia store. I said yes I wanted to, but it was not open yet. The gentleman said they were headed to a Hank Williams Jr. concert later. I replied, oh nice, but it’s not the same. Yes, he agreed, laughing. I offered to take a photo of them at the grave. They readily accepted. Shortly after, Mom and I left. They lingered on at the grave site.

I wanted to ask them where they were from. I did not hear a discernible accent. I imagine somewhere from the vast middle of America. Not a big city. Not a small town. Not a rural county. Middle of all that.

I did not make it to the Hank Williams store. I wanted to go. But the day filled up with other stuff. Also we lost a few hours to the afternoon heat. Ah well, I already have his music – all the memorabilia I need really.

July 5, 2025 – Montgomery – Breakfast and Rosa Parks

We started early again. We wanted to beat the heat. The hotel did a decent, if run of the mill, breakfast. I had the grits. I did not quite remember what grits were like. This edition was like upma, with larger grains, but without any spice. Well, I am guessing it had salt. Where is the hot sauce when you need it? They had not put any out. I asked the young man, Black, that was taking care of the food and breakfasters. He went into the kitchen for it. An older lady, Black, perhaps the cook, perhaps a manager type, brought out a bottle of Frank’s. Good old Frank. And she said something. And I replied. We laughed. It was a good laugh. Relaxed and genuine. But for the life of me, I cannot remember what was said.

Happens to me a lot. The facts of a situation are hazy. Rather, what has remained in mind, is some emotion of the moment. Which is also to say, beyond a certain point, I cannot trust my memory.

My Mom got the eggs. Eggs, bagel, and some coffee, that’s her thing. Bagel with butter and jelly, not cream cheese. She does not seem to like cereal, hot or cold. I’ll sometimes go for the oatmeal, she steers clear off it.

While traveling with my Mom, I know now that I do not have to worry about food. Just about anything vegetarian works. She does have preferences. However she does not advertise those preferences. I have to watch what she does, to figure out what she likes and what she avoids. Subs, sandwiches, work. Pizza, pasta, does too. The thing has to be light. Mexican, Thai, all good. Macaroni and cheese, I believe she likes, though tellingly, she has never said so. We have stopped going to Indian restaurants. The food is often a disappointment, and even when it is okay, it does not seem worth the price. Most Indian restaurant food pales in comparison with what Indian families make at home everyday.

I heard someone say this of the people of post-war East End – the ‘pride in making do’. That reminds me of my Mother. Please allow me to resist unpacking that further.

We left the hotel before 9:00 AM. It was already hot, God help us. The heat is a thing that no longer feels natural to me. I grew up with it. Now, it drives me slightly mental.

We headed first to the bus stop where Rosa Parks used to catch that bus. It is at the corner where Dexter Ave meets Court Sq. At the other end of Dexter Ave is the Alabama State Capitol. In between is Dexter Ave Baptist, Martin Luther King Jr’s church and home.

There were very few people about. Well, it was fairly early on a Saturday morning. Two old men were sitting with a small folding table in front of them. One Black, one White. I had an inkling what this was about. I have been to other ‘places you must see’ before. The Black gentleman came up and, more or less, started to sell his services as a guide. I said we were fine, but not before thanking him with a 20 dollar bill.

Excessive, yes, but we were on a pilgrimage dammit. Exactly what my Dad would have done, by the way. I come by my foolishness honestly.

There were a few historical markers, a couple on poles, and one set in the ground, next to the statue of Rosa Parks. My Mom read every plaque. I knew that would happen. I knew my Mom would diligently engage with what we came across. Some things, a few things, I do know.

The trip to Montgomery and Selma was exactly like the trips my parents would take to temples in myriad corners of India. The instinct that took them to those temples is the same instinct that took me to Alabama. This effort that we were making – I knew my Mom would not find it foreign, nor unnecessary, nor boring.

My Mom leaned on a decorative bollard and gave Rosa Parks her attention. I was happy. This trip to Alabama was not a mistake.

July 4th 2025 – On the road to Montgomery, AL

This I believe. When I go to Montgomery, I will see Grace, if not God. In Selma, the air will smell of ‘good trouble’, as John Lewis used to call it. In Alabama , I will lookup, and there it will be, the ‘moral arc of the universe’, breaking towards justice.

Of course, reality turned out to be a mixed bag. I was neither surprised nor shocked.

My Mom and I went to Montgomery, Alabama, this past July 4th.

We left my aunt’s house in Coral Springs early, before 7 AM. First stop was a rest area on the Florida Turnpike. I think it was south of Orlando. It was teeming with people. Where are they all going on the morning of the 4th? Orlando? Humans of every hue in sight. Multi-cultural Central. I’ve seen this before – Sawgrass Mills Mall. And yet, Florida keeps voting Red. I fancy that I know why. The typical immigrant from the Third World is a natural small ‘c’ conservative. Their lives have little room for romantic notions. Also, there are many other Floridas, which the likes of me rarely encounter.

Next stop was lunch, in Gainesville and thereabouts. I knew what I wanted. Some Cajun fries from Five Guys to go with the Tamarind rice that my aunt had packed for us. I found a Five Guys close to one of the Gainesville exits. Drove up, got the fries, and then parked under a tree, by a Checkers not far from the Five Guys. Under that tree, a very satisfying fried-food-centric meal was had by all. The Cajun fries worked perfectly with the Tamarind rice. I knew they would. Some things, a few things, I do know.

Mid afternoon, in Tifton, Georgia, we got off the interstate. Close to the exit was one of those large gas stations. LOVE, I think it was. We refueled and hit the rest rooms. I picked up a batch of my tried and true driving buddies – Brown Sugar and Cinnamon Pop Tarts. They are so good there ought be a law against them. Someday these morsels of Heaven will no longer be sold, and I will die a little.

The cashier was White. He had one earring, and a cross around his neck. A man who was a little bit of this and a little bit of that. Good. I relaxed. My people. The ones who are a confusing jumble. What am I? Indian, or American? I am both, you sorry ‘must be one or the other’ so and so. What’s more, I’ll tell ya, when I watch the ‘Derry Girls’, I am Irish as all get out. Hindu, or Muslim, or Christian, or Jewish? Surely, I ‘contain all of the above’(to paraphrase Walt Whitman), going all the way back to childhood. White, Black, or Brown? How can I be anything but some holy mixture? My world is built from everything I find in it; my life is informed by everything that is around me.

I got on a state route, which more or less would take us to Montgomery. I did not want to take the highway. I wanted to show my Mom, the America that is ‘fly over’ country. That is what I wanted to see too. What time I have left in this world, I want to minimize ‘fly over’. I’ve reached the age where I can feel time running out. Somewhat paradoxically, I am responding by slowing down, rather than speeding up. Trying to make it last, aren’t I?

As I drove, I googled and learned that we were driving through what they call the ‘black belt’. This is a majority Black swath of the country that stretches across the deep Southern states. Montgomery is in the black belt. Montgomery is majority African American. Birmingham, some way to the North, is the other way around.

Early in that leg, still in Georgia, we came across one of those tourist traps masquerading as a farm stand. It had the usual hits. Boiled peanuts, check. Watermelon, check. Fried okra, check. Jams and jellies, check. There was a redeeming surprise or two. Yellow watermelon, say what? Dried, salted, whole okra, very good. The boiled peanuts were pretty darn perfect too. We got a tall cup full. How could we not?

Every town we drove through had a dollar store and apparently little else. My Mom kept saying where is everything? Where is Walmart? Where are the grocery stores? And eventually, she started to ask, where are the White people? Not hard to see their absence. This is rural poverty, I told her. We have urban poverty, and we have rural poverty. Ten minutes from my nephew’s house in Fishtown, Philly, you’ll see urban poverty. Also along the route through Arlington and Mt Oliver, which we take to the Waterfront. You can see rural poverty on the Great Plains. Get off the highway in the Dakotas. See Native American reservations out West. Go deep into the mountains of West Virginia. Heck, drive through the hills in Somerset county, east of Pittsburgh.

We saw very little traffic for miles. At one point, a small nondescript sign flashed by. Stewart Detention Center, it said. I’d never heard of it. But I knew what it was. Googling later confirmed my guess. I did not see a gate or road or anything near by. Only that little sign, by the side of an empty state route, in the middle of nowhere. Sign of the times.

The Alabama state line runs through a largish lake. One side of the lake is Georgia. The other side is Eufala, Alabama. You’ve heard of towns like Eufala. It had a section by the lake, with very large, very old homes. The family in the big home, in a small town – that is a familiar Southern trope. Every second play, film, novel, short story, set in the South, seemed to be about the big home in a small town.

Wait a minute, all the Southern stories that I am somewhat conversant with, come from one source – Tennessee Williams. ‘Cat on a Hot Tin Roof’. And that other one with Shirley Knight and Geraldine Page and Rip Torn. And Paul Newman. ‘Sweet Bird of Youth’?

Was Paul Newman in every movie of every Tennessee Williams play ever made? No. See, ‘Streetcar Named Desire’, and ‘The Glass Menagerie’. And I remember one with Montgomery Clift, the name of which escapes me.

Paul Newman directed a TV movie of the Glass Menagerie. Joanne Woodward was the mother. Can’t remember who played the daughter (Karen Allen?), nor the Gentleman Caller (James Naughton?).

We reached Montgomery around 7 PM. It was still light out. It was July after all. We found our hotel slap in the middle of a very empty downtown Montgomery. And without much further ado, called it a day.

Essential Skill for Enterprise Software Development – Turn Uncertainty into Certainty

In most software development work at the office, I exercise a skill, which I can only think of as ‘turn uncertainty into certainty’.

Uncertainty

Some months ago, I was one of the ‘architects‘ on a project. The project lead told us that this was an ‘assessment’ project. We were not sure what that required us to do. We asked the powers that be. Their answers did not remove the confusion.

After a bit, this much became clear; we had to discover information that would help the client approve or reject the project. In addition, the project lead also wanted these; a Business Requirements Document (BRD), an Architecture Document, a Test Strategy Document, a Cut-over Strategy Document. What information these documents must contain, always seems vague to me.

Our business domain is vast. The BRD can get pretty detailed. How much detail do you need for a yay or nay decision? The analysts did not know. The project lead’s answers did not help much.

Regardless, we had to deliver something. Our jobs were on the line. My project lead needed something that the client could accept. Her job was on the line. The client needed something that was more than they already knew. Otherwise why engage us at all?

Certainty

What do you do? I sort of knew what to do. I had been to this rodeo before.

  • Give your lead something quick. It must be clear enough to let her immediately know if she can use it. Take the feedback into account, and make another small, quick experiment. Continue that till you arrive at something adequate.
  • Accept the burden of research and discovery yourself. Present the information such that the audience only has to say yes, or no. Don’t keep asking, what do you need. Instead, show what you have produced, and ask, does this work for you. Give folks something concrete to react to.
  • Keep the frequency of this interaction high. She has to see you digging, and adjusting. That is good for morale, all around. And if you go off on a tangent, both of you have to discover this fast.
  • Finally, you have to be ready to make a mistake. Yea, the work takes some courage. If you are lucky, your organization will make it safe to learn by trial and error. If not, well, who told you this was easy?

I know the types of information that characterize software solutions to a business problem.

  • Essential business requirement.
  • Specification of a solution to that essential business requirement. Broadly, you can often describe the solution in two different ways
    • A technology agnostic description
    • A technology-centric description

I realized that this conversation related to the technology-centric specification of the solution. So I studied the matter in question till I was able to put together a couple of technology-centric views of the solution.

  • A system-centric specification of the business process, in BPMN 2.0
  • A UML Component Diagram, which laid out software components that folks readily recognized; this also laid out how the components depended on each other.

As luck would have it, both the project lead and the client found this useful. This became the Architecture document.

Progress

I was still not certain that I had enough information for the ‘assessment’. I would wager that at that moment, neither were my project lead nor the client. It did not matter though. They saw that I knew the material that I presented. We went from uncertainty to some certainty. And they decided that if I did it once, I could do it again. That was progress. Onward.

Architect in a COTS heavy project

Does an architect have a place in a COTS software implementation? I was part of one in the recent past. It was confusing, difficult, and eventually, instructive.  

No Choices To Make

Architecture, as I understood it, seemed to be already in place. 

My operative view of architecture is Grady Booch’s notion.

To paraphrase, a solution to a business problem is a collection of choices. Some of these choices are expensive and risky to undo. These choices are architecture.

When the project started, the most consequential decision was already made. The bulk of our business runs on a massive COTS application. This COTS software has gaps, which we have filled with home grown software. Now, we were going to replace one of these homegrown solutions with a new COTS module.

Further, the vendor already documented hardware and software requirements for the COTS module. There are no choices to make there either.

If there are no choices to make, where is the need for an architect?

Kept Away From Business Domain

At the very beginning, they told me that business domain fell outside my lane. They excluded me from conversations related to business requirements. This confused me. See, my view of software engineering includes knowledge of the business.

I am an engineer. I devise, construct, and deliver solutions for business problems. At its simplest, this work has two prerequisites. I must know the business problem, and I must know the tools with which I will solve the business problem.

By the way, these tools include human beings. To put it another way, if you don’t know what makes people tick, you cannot be an effective engineer.

Architecture is a category of choices that make up the solution to the business problem. How can I make those choices, any choices, if I don’t know the business?

From that perspective, I could not fathom turning a blind eye to the business domain.

They wanted a machine honcho

By and by, I began to see what they wanted from me, the ‘architect’.

See, we have a business to run. People offer to sell us machines that will help run the business.

The vendor says that machine can perform business activities, X, Y, and Z.

  • You can send out Batch Enrollment Queries to CMS.
  • You can experiment with different rating rules, before committing to one.
  • You can communicate with customers via Email, Twitter, and Instagram
  • And so on …

Business folks verify the business promises that the vendor pitches to us. I, as an ‘architect’, am not expected to contribute to that effort.

The vendor also says the machine has some technical characteristics, P, Q, R.

  • This lawn mower runs only on premium unleaded gas.
  • Any certified J2EE application server can host this application.
  • Needs an IBM MQ Client installed on the same computer
  • The web pages will only work on the Safari browser
  • And so on ….

These attributes are agnostic to the business purpose that the software serves. Business folks could not care less about this stuff. Business folks lack the expertise to evaluate these properties of the machine. Someone has to do it. Enter, the ‘architect’.

The ‘architect’ discovers all relevant, technical, business-agnostic, characteristics of the new machine. The ‘architect’ evaluates the implications, cost, risk posed by this machine. Is the machine an easy fit into the technical environment in place currently? Does the machine conform to some grand enterprise strategy? The ‘architect’ must supply answers of that kind.

  • We are a .NET shop. The new machine is a Java web app. We do not have in-house expertise in managing a Java app.
  • This software needs 24 GB of RAM in Production.
  • We use Chrome. Chrome and Safari use the same rendering engine. Web apps that work on Safari will work on Chrome. So the browser will not be a roadblock.
  • And so on …

Not an exercise in solution design

They wanted someone that knew the machines well. They wanted someone that was familiar with the ecosystem of machines; current, and future.

They did not want someone that was well-versed in the art and practice of designing solutions. Sadly for me, there lay the sweet end of architecture.

Interview Question – Sort the common sorting algorithms based on Big O analysis

This interview question will make me laugh. The Big O notation for sorting algorithms indeed!

Short answer; I have been a generalist application programmer for going on 20 years. In all those years, I have never had to look up a sorting algorithm’s Big O score.

If I were a systems programmer, working on a compiler, or a DBMS, I presume I would use that knowledge. Am I producing consumer software that millions of users access at the same time? Are you processing tons of data, as in social media? We may need knowledge of sorting algorithms. Build or maintain in-house business software that 300 CSRs use, on a good day? At an insurance company that is only marginally more agile than the DMV in Zootopia? Big O notation is a faint echo.

My long answer; I can tell you how I approach performance, and load handling issues, if you wish. There is much I can do before I am forced to dredge my college memories for Big O balderdash.

At Business Analysis, and Solution Design

Business says, build this. Or business says, we have a problem, do something. Parse business’ lament, and you’ll find two categories of information. Essential business requirement, and a solution that satisfies the requirement. Further, we can view the solution from two perspectives; technology agnostic, and technology-centric.

Nailing down the work in the above manner will reveal performance problems. By the same token, lack of this analysis, can make you miss performance problems.

There was once a web app. The user would push a button, which initiated an action on a bucket of 100K documents. More often than not, the action took too long to complete, and the web page would time out.

Much unhappiness ensued. Smart people tweaked the application code, and the database. It was not enough.

Finally, someone asked the right question. Shouldn’t long lived actions be asyncrhonous? The user should not have to wait at that web page till we completed the work. The system should tell the user, thanks for the work, you can go now, we’ll let you know when we finish.

Big O analysis did not raise that question.

Do you know what did? Knowing what business purpose we were trying to serve, so we could find an alternative way to get there. Courage to point out the error in system design to senior folk who allowed the error in the first place. You could also consider it, caring enough about the work to speak up. Earning the trust of the business folks and your peers in tech, so they are willing to lend you their ear. Finally some technical skills in the User Experience, and Asynchronous Processing areas.

Loose Coupling or Bust

Next, in so far as there is room for it, ensure that the parts that comprise your solution are loosely coupled. In plan English, I should be able to tinker with one part without affecting any other part. Each part must know as little as possible about the other parts. Make this happen at both large-grained and fine-grained levels.

Dave Thomas, Pragmatic Programmer, on loose coupling.

At the fine grained level, this typically puts me in Bob Martin’s Clean Code territory.

At the large grained level (aka ‘architecture’), I want to make architecture disappear. I am referring to Grady Booch’s definition of architecture.

Grady Booch's definition of Software Architecture

To paraphrase, architecture is those choices that are expensive to change. All our choices must be inexpensive to change.

Construct, Measure, Improve

Next construct the solution.

Now measure performance. Throw load at the system. Locate the bottlenecks. Remove the bottlenecks

If we got the design, and construction right, it should be easy to locate the bottlenecks. Furthermore, we can remove the inefficiency with minimal impact to the rest of the system. Remember, the parts of our solution are loosely coupled.

Improving Performance, Without the Big O

Look at I/O

About performance itself, I know one broad truth. The delays caused by disk based I/O, and network latency overwhelms anything you might do in memory.

Here are three examples from my recent experience.


Several activities in our QA environment were crawling. We noticed that log files were huge. We were at a very fine level in QA. We raised the logging level, which wrote fewer logs to disk. QA sped up to acceptable levels.


One activity was slower than acceptable in production. We discovered that we were making close to 1500 trips to the DB. We consolidated the query into 3 trips to the DB. We were good to go.


Last, we have a batch framework. It breaks a large task into small chunks, and puts the chunks on a queue. Listeners pull the chunks off the queue, and work on them in their own time. Some tasks took forever to complete, seized up even. We found that the queue choked when it received a lot of messages very fast. 750K records broken into 7500 chunks of a 100 records each, ran for 15 hours once. Increase the chunk to 20000 records, which put about 38 chunks on the queue. This worked like a charm.

In each of the above cases, I did not need Big O analysis. Someone built the Logging Framework that we used. And the DB. And the Messaging Platform. That person needed the Big O.

Learn the machine

At some point, we will need to fine tune a machine; a DB, a JVM, a CLR, a Messaging Server. For this you need in-depth specialized knowledge of the particular machine. I don’t have that. Remember, I am a generalist. I know what questions to ask. I can dig up answers. And then forget, because I don’t use that knowledge everyday.

More to this than we can see

Last, at this level, there are often a lot of variables, which interact in ways that is not always easy to predict. For instance, there are tons of JVM parameters, and DB switches. You do what you need to do to get past the current problem. Then you watch how things go, till you have to intervene again.

This is what I know about performance.

See, I don’t remember enough Big O analysis to save my life. Yet, life goes on.


Business Agnostic Software – Buy rather than Build

A solution that you can apply to any business at all, is what I might call business agnostic software. If you feel the urge to build such software, think again.  Buy it instead.

Examples of business agnostic software

An insurance company maintains correspondence with the insured.  The company buy’s or subscribes to an email service.  It does not build the email service from scratch.

A bank generates statements, and various notices that the government mandates.  For this, a bank might need a template engine that generates PDF.  Buy that template engine.  The bank itself will have to build the templates for these business documents.

All companies have business processes that they wish to start, track, execute, and end.  This is what BPM (Business Process Management) engines are for.  Buy that BPM engine.  The business can implement its business processes using the BPM engine it buys.

Health insurance companies that are in the Medicare business, receive beneficiary information from the government.  Many rules determine how the company responds to this information.  A company could use a rule engine to manage these rules.  Buy that rule engine.   The company should stick to only implementing the rules.

Wait, here is the simplest example.   Why do you buy a database management system?   You don’t build an alternative to SQL Server, or Oracle, do you?

Why avoid building business agnostic software

The primary purpose of an Enterprise IT shop is to support the business. Learning the business, analyzing it, modeling it, and implementing it, is a significant challenge in itself.  Focus on that.  Master that before taking on other problems.

Business agnostic software focus on more general problems.

Take rule engines for instance.

  • What is a rule?
  • How can rules be combined to produce new truth?
  • Devise an algorithm that can execute 10,000 rules in a few seconds.

An insurance company could use a machine that answers those questions.  Does a health insurance company want to spend time and money on building that machine?  For most companies there will be little value in it.

People spend their lifetimes studying these fundamental questions.  There are PHds galore in rule systems.  Let them build the rule engine. You confine yourself to identifying an effective rule engine, and using it well.

We do build business agnostic software though

I am surprised by how often Enterprise IT shops end up building business agnostic tools.

In my work experience, I have seen home grown solutions to these problems, which are best left to the experts.

  • A web framework
  • An Service Locator/IOC container
  • A rule engine
  • A BPM engine
  • A scheduler

We can never avoid this completely.  Start with management that lacks engineering savvy, throw in gung-ho developers, and mix with institutional inertia.  Less than optimal decisions will happen. So it goes.

Exception

Some companies do focus on fundamental problems.

They have deep pockets.  They have the means to invest in fundamental research.  Their business model, their operating ethos, includes such effort.

Their business problems are of such scale and complexity that currently available solutions are inadequate.  They must invent new solutions themselves.

Unix and C came out of  AT&T.  Ericcson created Erlang.   UML came out of research at GE, and IBM, among other places.  Xerox pioneered Graphical User Interfaces, and Object-Oriented Programming.

Ask yourself.  Are you one of these companies? I am confident most Enterprise IT shops would say, no.

Nobody told me I had to be a teacher

A Tech Lead has to be a teacher? Why didn’t someone tell me?

We have this C# method. It used to be good. Small. 25 lines or less. All at one abstraction level. See Bob Martin.

One of the kids, from offshore as it happens, had a bright idea. Next morning I wake up to find that the method is now a 100 lines.

I want to tell the kids. The method is too large. No method should be more than 25 lines. And they will chop it down pronto. They are good kids. But. There is no telling how they will chop it down. If they know how to tell a story in simple, clear steps, I have not seen evidence of it yet. They can’t seem to find the shortest, most direct route, between A and B.

Ask them how to go from D.C. to Baltimore.

They will come up with this. I-495 from National Airport to I-270 and Frederick. Then take I-70 to Breezewood. Break East on the PA turnpike to Harrisburg. Finally, come down I-83 to Baltimore.

That was fun. We got to write a lot of code. Oh what a lovely route it was.

They won’t stop, look around, and find 295, the Baltimore Washington Parkway, a straight shot between the hearts of D.C and Baltimore.

So I have to teach them how to chop the method down. But there is a problem. I know how to do the work. I don’t know how to teach it to another person.

I can say, make sure all of the code is at a single level of abstraction. They have no idea what I am saying. I don’t blame them. What does the word ‘abstraction’ even mean? I don’t know how to describe it man, I just know it when I see it. You know the button that starts your car. That’s an abstraction. You know what I mean? You don’t? Well, bloody hell.

So now on to Plan C. I redo the method myself. You know, I give them advice, and an example. Guess what happens. Nothing. Two days later the silly drama repeats itself.

It turns out, they could not care less about Clean Code. They know the programming language. They know some libraries. They are decent at problem solving. They get a kick out of flipping switches and seeing results. They are having fun. They feel no inclination to examine what they are doing. Stop, step back, dig deep, see under the surface, unlearn old habits, cultivate new habits. Further, after a couple of Sprints, they also learn that I will clean up the code myself.

It took me a long time to understand how to write Clean Code. It took me much practice to do it instinctively. Do you know how much I rewrite? How am I going to get the kids to adopt a regimen of study and practice? How am I going to get them to show interest and sustain it? How am I going to get them to care?

I am only a working engineer. You are asking me to not only teach, but also to motivate.

All of this, I have to do while a project is going on; under the gun, to deliver something.

It is not going to happen.

You are not going to get Clean Code.

Unless. You hire the right people.

Focus on skills rather than role

The project manager said, that is not your role, stay in your lane. I held my tongue. But it struck me that I no longer understand the fixation on roles.

While developing software, we must make certain choices. Some of these choices are expensive to change if you get them wrong. These choices constitute architecture. See Grady Booch. Architectural decisions must happen. How does it matter who makes these decisions, as long as they know what they are doing? We need Architecture. We don’t need Architects.

The same argument applies to other work. We need business analysis, we don’t need business analysts. We need testing, we don’t need testers. You catch the drift.

If one person can do business analysis, and solution design, why not let them do it? If one person can write code and test, why not let them do it? With each fewer person in the team, you avoid an information hop. With each fewer information hop, you avoid some information loss.

Here is another argument. A designer must know the business that she creates solutions for. Why not let her learn the business first hand? Let her do the business analysis. A developer, makes better choices in the code, when he knows the essential business. Why not let the developer talk to the business? If the developer has the necessary skills, drop the middle man. Knowing what Agile has taught us, do you still want a developer that cannot test? Let the developers test; eliminate a whole moving part in pipeline.

If one person can do a job, why would you want three? If three people can do a job, why would you want six?