Posts

New Surroundings

I would really like to post more often, but frankly, I've been too busy. The New Year brought a change of job scenery and I've been really busy getting up to speed and learning a ton of new things. That's not to say I haven't been writing at all. As I come up to speed here, I'm taking the opportunity to capture what I learn in a development wiki. My new team has a wiki instance in place, but it's been lightly used to this point. I'm a huge fan of using wikis for development . I like to leverage the wiki as a focal point to capture technical ideas and documentation for the team. Most people seem eager to contribute, so I hope it takes off. One point here, we're using the wiki included with SharePoint . It's not nearly as hard to edit as MediaWiki (the Wikipedia wiki engine), but I still prefer MoinMoin (used by many Apache projects). The heart of the software being built here relies on Ontology , and leveraging the data stored in that ontolog...

Happy 2009!

As the work calendar turns to 2009, it's natural to reflect on the past year. Professionally, 2008 was a very frustrating year. Part of it had to do with the tools I was using, part of it had to do with the project I was working on, and a lot of my frustration was that I felt like I wasn't being heard. Instead of rehashing some of the difficulties I've experienced over the past year, I invite you to read some of my previous posts . So, how do I hope to course correct in 2009? Do More Many times in 2008, I found myself waiting for others to complete some part of their work so I could do mine. Other times, we hit limitations of the development platform we were working on and waited for management approval for how we should proceed. In these instances I often had an alternative in mind for how to proceed, but didn't. I instead hung back and tried to let others do their jobs, make their own decisions, and get consensus on an approach. I regret this approach. I wish I h...

Performance Tuning JCAPS - Part 2

It's been close to 2 months since my first Performance Tuning JCAPS post. Since then, we've noticed our servers running out of TCP connections under heavy load. Researching this problem, we learned that the JCAPS' JMS server makes heavy use of TCP in implementing Request/Reply queues . We approached Sun for guidance and they assured us that they've had success implementing high throughput applications using the JMS request reply solution... but how? It appears a multi-step solution is needed. First, running out of TCP connections in a scenario like ours is a JCAPS bug addressed in an ESR (110348) and rolled into JCAPS 5.1.3 Update Release 3 . We installed this update and noticed a marked improvement. Running my simple 75 user simulated test, transactions took 2521 ms to round trip (compared to the previous time of 20128ms). While this is great improvement, an average of 2.5 seconds is still really slow for this simple transaction. We reported our findings to Su...

Side Effects May Include...

Software development is complex. A lot of communication is needed to coordinate with users and between teams to synchronize efforts. On large teams developing distributed systems, effective communication is exponentially harder. In addition to the users and development teams, you also need to deal with system admins, DBAs, network, and change control specialists. In many environments, this later group of people (the system admins, DBAs, etc.) do not get involved with the project until late stages. The development team might have free reign over development databases for instance, but when the code migrates to a certification environment things are suddenly very different. Teams move from surroundings where they have total control of machine settings, databases, and resources to an environment where they have none. Often, during the migration to a test or production environment things are often "forgotten". Things that often don't make it into an application's ch...

Secret Sauce

Good things always have that "secret sauce" - the element that sets it apart from the pack and makes it better than anything else. The "secret sauce" takes something ordinary and makes it extraordinary. It's a Mac vs. a laptop. Disney World vs. a theme park. A Big Mac vs. a hamburger. When I hear company execs talk about what sets their companies apart, it seems there's no real "secret" to the sauce after all. It boils down to hard work and a commitment to your customers. A commitment to a better user experience. A commitment to treating every guest interaction "special". A commitment to a good hamburger every time. There's not a magic switch you can flip... it's a commitment to excellence through hard work. Looking for a shortcut to this kind of success is a waste of time. All too often I've seen software development teams look for magic switches rather than commit to the hard work of fixing the underlying problem. ...

Right Tool for the Job

Business transactions can vary widely in their definitions, but they can basically be classified into two types - those where I need an immediate response so I can continue with my work and those where I'm going to tell you what to do and trust that you'll get it done while I move on to something else. These classifications are otherwise known respectively as synchronous and asynchronous transactions. When designing an architecture for solving business problems, it's helpful to figure out which type of problem you're solving and then pick an appropriate technology to support it. For example, HTTP might be a good choice for synchronous applications since it is request/reply by nature. JMS might be a better fit for asynchronous solutions since these structures are typically one way. Blurring the lines is the JCAPS offering of a request/reply mechanism for JMS messaging - called appropriately enough, JMS RequestReply . A colleague called this mechanism "synchronou...

Performance Tuning JCAPS

We're getting close to (finally) deploying our JCAPS rewrite to production. Our final task is to load test and "tune" the application - making sure it will handle the expected production transaction load. Prior to executing the load test, we added logging statements to report on the amount of processing time spent in each JCD (or processing unit for those non-JCAPpers out there). Using this info, we can determine the slow running processes and optimize them. For this optimization we could follow a traditional approach and profile the code, or we could take an easier route and configure JCAPS to throw more resources at the bottlenecks. This second option is done in the JCAPS connectivity map by increasing the maximum number of threads allocated to run the process. Clicking the input line to the JCD to open the properties, you can set the "Server session pool size" in the Advanced tab (NOTE: this setting is only for JCDs listening to JMS queues or topics). I...