I attended the TDWI Conference in San Diego back in August this year and the "theme" of the conference was Agile Business Intelligence. Having studied and worked in the Agile realm over the past 6 years or so, and by no means an expert on the topic, I looked forward to discussing how database and data mart development worked in an Agile fashion. To say the least, I came away less than impressed. I spoke with a number of BI experts who were conducting presentations/lectures on the Agile BI topic for the conference, but when I asked about db testing, assertions and evolutionary change at the database layer, they all looked at me like I was missing a key component to my head. All but Ken Collier, who was surprisingly refreshing in his response of "we, as an industry, don't do enough about that..." and then promptly pointed me to his book (that did have part of a chapter on the subject). There was even one lecture, where there were two presenters covering the material, when it seemed like the wrong presenter was covering the "Agile" part of the material. The person who ended up covering it dismissed it as "faddish", I believe, while the other presenter as least seem to view the topic as "having possibilities," when asked about it during one of our class breaks. The point I am making is that BI experts seem to mostly agree that, for BI to work, the database or data mart structure cannot change or, if so, not frequently. The point of Agile is to allow for change as a constant and manage that change as a point of design. Hence the title for this post.

Since the conference, I had been rather disillusioned over the topic as far as BI goes. Recently, though, I have found an opportunity to reclaim this concept for what I feel it should be. As I get deeper into the opportunity, I will do my best to describe the experience and then we can see if the experts are stuck in the morass of classical development thinking or if it is I who is more like Dorothy's Scarecrow (That's the one without a brain, right?)


I'm afraid I have to get in line with Paul Tassi from Forbes here. I will gladly go on record to say that Steve Jobs, along with Steve Wozniak, made the personal computer an eventuality where it wasn't before. I will also gladly say that personal technology is definitely richer now in the iPod/iPhone/iPad era than ever before. But something smacks of "pining for a future that doesn't exist yet" from this survey. Will the true gamerphiles/technorati please stand up, and not just the Angry Bird addicts? (As a note, though, the first personal computer video game I ever played outside of an arcade was on an Apple IIe, but that wasn't exactly groundbreaking.)


This is an interesting topic for me because I've been mulling over this kind of thing for a couple of years now. Of all the architecture "orientations", this one seems to encompass all the rest. I have seen references to this xOA going as far back as 2007, but I recently saw a piece that makes it truly fit into a current representation - the Orchestrator. A colleague and I debated this particular manifestation two years ago when we were planning out our company's SOA vision and design. We both felt like it wasn't given enough credit. Now that cloud plays are all the rage, this concept seems to be more important than ever.

 

http://www.biske.com/blog/?p=326

http://en.wikipedia.org/wiki/Orchestration_(computing)


I just read "A Yardstick of Service" and I come away with a renewed appreciation for Bill Gates, his stated perspective and what he has done to address that. As a technologist, I would hope that something I did made a difference to someone. A chairmaker probably makes a chair because he likes the work but even more than likely because he hopes someone will sit in the chair and be comfortable. This might be naive but I think any artisan or craftsman falls into this category to some degree. When the motivation is otherwise, I think we lose our way a bit.


Work as Art

Published 8/5/2010 by bishop

 

I came across an article the other day that compared computer programming to art , which I had read before years ago. It makes some good points and for a large part, I agree with the authors. In fact, I've been a fan of their work for some time now as I highly recommend their Pragmatic Programmer series. But where they compare programming to poetry and painting, I compare it more readily with architecture.

Architecture is actually one of the oldest forms of art, probably third down the list from cave paintings and clay statues. (Göbekli Tepe, a religious site, is the oldest known human-made structure at approx. 11,000 years old.) Where it deviates from other art forms is its function. Most art just sits there, waiting to be observed in some fashion. Architecture provides protection, either from the elements or your enemies. It provides a means for gathering, learning, governing, and worshipping.  It’s functional or anti-functional, depending on what was stressed – design for the use or designed for the eye. The truly exceptional examples are the ones that did both in equal measures. The Sidney Opera House is a modern example of this, where the design has been iconic of both Sydney and Australia for 37 years and is considered one of the finest spaces for music and presentation in the world, conducting over 3000 events per year with an annual audience of over 2 million people. In contrast, the Solomon R. Guggenheim Museum (“The Guggenheim”) in New York City is similarly iconic. Prior to its opening in 1959, concrete had only been used as a structural element, usually requiring a façade to decorate the exterior of a building. The architect, Frank Lloyd Wright, leveraged concrete in ways no one had ever seen before, creating a building that looks as modern today as the day it was completed. But as an art museum, it fell short when it initially opened. Twenty-one artists signed a letter protesting the building, due to the fact that all the interior walls curve slightly in concave, making it difficult to hang and display flat artwork. Also, due to the walkways that ring the outer part of the interior wall, the natural light that comes in from the center rotunda is blocked and makes artificial light almost a requirement at each display. These complaints did little to change the Guggenheim and now any changes to the museum are considered controversial.

The article makes a point that as developers, we create from an almost Pure Thought process. Creating “…castles in the air, from air” was the term. From that process, we need to keep in mind that form should follow function. We may not be able to create a Sydney Opera House for each project we engage, but we should have the functional goal clearly envisioned. There is little point in making “Less than useful” look pretty in our business. There's no guarantee that if you do, you'll have a Guggenheim.

 

 

 


 

Well, after a lot of grumbling and cursing, the blog is back up. My provider was making a move to IIS7 at about the time I started publishing the blog. Since I had already moved the BlogEngine.Net solution over to VS2008 successfully, I felt that moving to IIS7 was to be a good experience. Eh, not as much as I would have liked, I'm afraid. Timing could have been better, as this quickly became a backburner issue. For those who happen across this looking for answers to the same issue, here's the skinny:

A number of the challenges I was runn ing into involved under estimating the learning curve of the IIS7 Manager. I couldn't see the error trace, though I had everything setup correctly in the web.config.


1: <customErrors mode="Off" defaultRedirect="~/error404.aspx">


2: <error statusCode="404" redirect="~/error404.aspx"/>

3: </customErrors>


The default mode for Error Pages established within the site settings were set to "On", but it took me a bit to figure out where this was.

[screenshot to come]

The other part of this challenge was the fact that the overall problem was web.config related, preventing any file from being processed. What made this such a challenge was looking up possible solutions when the only solid criteria with which I could search was "BlogEngine.Net IIS7 Error 500". Between all the references to security settings, Integrated Mode, Classic Mode and everything else, finding the answer that looked most like my problem was the classic "needle in a haystack."

*Thanks to satarter's post  on Codeplex, Mike Volodarsky from the IIS Server team at MS, and Ruslan Tur from the BlogEngine.NET team and his Check utility.

Once I got past the basic error problem, the specific problem within the web.config came to light. IIS7 doesn't like to be told what to do when the "what" has already been done. Specifically, in the <modules> section of the <system.webServer> the FileHandler module was already defined by the server, and therefore the application area inherited that definition. But BlogEngine.NET has its own FileHandler in the Core, so the config entry for the BlogEngine.NET's FileHandler was refused. This caused the entire site to seize. 

The Fix:

I added this just above the definition entry:

 


1: <remove name="FileHandler"/>


Separately, there was some other clean up items that I made in the config (Assembly references) but whether they would have impacted the site once the module reference was resolved isn't clear. I might go back into it to see.

And now we're back up. After 3 months of on-again-off-again crap, no access to a Win2008/Win7/Vista box to test against IIS7 locally, less than stellar support from my hosting provider and the outcome is a 5 minute fix. At least it was a learning experience.

 

 

*Update*

And back up again. I switched providers late last year but since this was rarely visted before, no one seemed to complain when I didn't bring it back online. Now we are up on BE 2.5.something, built on .Net 4.0 using IIS 7.5. Had an additional issue to deal with on BE 2.5 that I had getting BE 1.6 back up, though this had to do with BE 2.5 preferring its own app pool. Unfortunately, my provider doesn't give me a lot of control over the app pool configuration, so I had to sink this into the root of the site. This may prove to be a blessing in disguise, as BE 2.5 now supports multiple blogs from the same install. We'll try that out.


Why Bu$iness C0de?

Published 4/26/2010 by Admin

 

Businesses that rely on development resources of their own often look at technology as an enabler or a means of separating themselves from what is otherwise a nondescript industry. A wholesale business of nuts and bolts might “enable” themselves by touting efficiencies due to their high-tech inventory/ordering system. One nuts and bolts business can very well be exactly like another, save the target market, but one that leverages high-tech development to reduce costs can easily differentiate itself from the pack.

For those who inhabit the realm of business-level development, rather than the deeper, more turbulent end of the technology pool of pure technical development businesses, what can seem like a safe environment hardly matches the reality. In the waning days of the DotBoom of the 90s, leading up to the DotBust of 2001, securing or keeping your job was as much attributable to luck as your technological skill. The luck came from the business leadership, the second biggest lottery in the business world right after customer perception. If the business leadership was smart and saw the value your organization contributed to the bottom line, you had a better than average chance of keeping your job.

The problem with the business seeing the value of the development organization stems from the fact that most development organizations are a cost center. Products and services that come out of the development organization may or may not turn a dime into a quarter, but the development organization costs money everyday. This groups the development organization with other groups that incur a cost, like Human Resources, where the necessity is perceived, but the value is hard to quantify and outsourcing challenges abound.

The point to all of this is development organizations stand a better chance of surviving and flourishing when it can show its worth qualitatively as well as quantitatively by tackling business issues through technology smartly and at the best cost possible. This means processes must be examined, technology strategies must be set and adhered to, and skill sets must be improved, all with an eye towards improved cost efficiencies. Development designs and methodologies must be geared to better flexibility and maintenance must be easier. Project management methodologies must be cautious of monolithic processes. Development skills need to be observed as craftsman skills, where the product or service being developed should be seen as a custom car or house. When these skills are not kept up to date, serious cost overruns can occur due to poor execution. All these points add up to an image business leaders can have of development as a money drain when a downturn in the economy occurs.

This is the essential progenesis of Bu$iness C0de. Analyzing the different aspects of technology in the business world to find ways to better address business needs.


 

It might be stating the obvious that development is a rather fluid process. Few projects are ever “finished”, especially in businesses that are not inherently technical, but rely on technical process to en able the business. As they use the product, and as business changes, the software must also adapt in kind. Aspects of the business may find new uses for the same software, but that adaptation will often incur a need for further development. Depending on how well organized the Development group is, this ongoing effort of development will have varying degrees of pain associated with it. Two well-developed processes in the industry endeavor to reduce this pain: continuous integration and unit testing.

 Unit Testing takes the component-based architecture to heart and builds on the foundation that comes from. A component should be based on a concern of some sort. It may expect some input and, based on that input, it should exhibit some behavior or achieve some output. So, by this standard, you can establish a test that offers some specific input and test for the expected output. The test would be predicated on the requirement of the feature. When the code changes, and the requirement hasn’t, and the code passed the test before the change, if it fails after the change, you know something is wrong. If the requirement changes, and some will, then you change the test first, then you change the code to pass the test. This is much more like a “Ready, Aim, Shoot” response to challenge the normal “Ready, Shoot, Check the Target” effort that plagues a lot of companies.

 

Continuous Integration takes the effort of the unit testing one more step. Unit testing must be enforced each time the code changes, as soon as it has changed. One of the biggest problems in projects of all sizes and for maintenance efforts is that changes to code that eventually cause a break are harder to find the later they are found. If something got changed, but it wasn’t tested until a week or two later, and a number of other things got changed in the meantime, then it becomes a hunt to find the bug. But if you could find the results of the changed code immediately, then you would know exactly where the problem was.

This becomes a good bit more difficult in practice when you have a dozen developers all working within the same code, especially on a tight time schedule. The continuous integration effort utilizes a system that will scan for changes in a set area within the source code repository, and once a change is identified, it will automatically pull the entire project down, build, test, and report the results. It can be set to notify team members of the build results and processes can be built around these results to ensure everyone is informed of issues before they become nightmares. There are several systems of this type, some open source and some that can be purchased. Most of them are flexible on the repository and unit testing flavor, though some are specific to the programming technology, i.e. .Net rather than Java and vice versa. The gain out of all of this is a level of control over changes in a project that weigh a team down, reduce productivity, and tighten timelines even further.

 


 

The site has been updated to v1.6.0.5, with Captcha integration and Disqus comment support. For now, I'll be using Disqus. Thanks to Ruslan Tur at BlogEngine.net for the update.


 

Welcome back to the first post of Bu$iness C0de. We had a bit of interruption due to a migration to WIn2008 and IIS7, but we should be squared away now.

The basic purpose of this blog is simply to examine how design and coding efforts affect, and are affected by, business direction. Plenty of developers (as well as business people) would be satisfied with the idea that developers should do their own thing and business can do their own thing, without giving thought about how this perspective is antiproductive. Everytime I hear about a failed software product or initiative, I wonder about how the developers and business owners communicated through the course of the effort. The same goes for each report of a company outsourcing their entire development staff (or entire IT for that matter) as this always amazes me how a business can look at development/IT as a commodity.

I'm not saying that parts of IT cannot be commoditized. I was part of a team back in the 90's that helped run Owens-Corning's IT resources (servers/email/etc) remotely. This effort was proof of just how easy it was to lump this kind of service like so much corn and orange juice. But this service had a personal aspect to it as I remember working with people at OC by name on a daily basis. That's a quality you don't normally get from a commodity.

I guess you could look at it more like an auto repair shop. It's a specialized service and there are plenty of them around. But when you find one that really provides you the level of service you expect, this auto shop becomes 'Your' auto shop. They know who you are by name when you come in and they have your best interest in mind constantly. Coming from a small town in Texas, my grand-dad owned an auto shop just off the town square. He started that business shortly after returning from WWII and the shop was still open when I was a little kid back in the 70s. For years after the shop had been sold off, when I would go back home, people would still ask "Aren't you J.E.'s grandson? You know, J.E. had that garage and he used to work on my Buick..." That's the kind of affect service can have on a business relationship. I have that relationship with my auto shop now here in Georgia. They have been working on my vehicles for the last 12 years or so and their service level is incredible by anyone's standard. I know the guys who work there by name and they know me. I would be hardpressed to call what they provide a commodity.

I have the same opinion about IT services, in general, and Development more specifically. But the maladies I find are on both sides of the coin. Businesses (not specifically in the Technology sector) often sell IT services short by saying "Well, we're not a technology company. We just use technology to get the job done." IT does something similar, but more from the angle that "Business doesn't get us." These kinds of mentalities prevent positive conversations. Hopefully by training a light on these perspectives, parties on both sides can find a better way to move forward.

Full disclosure: I am a software architect for a private corporate firm. My viewpoints will always begin from the Development side of the argument, but my job requires that I look at what is needed, strategically and tactically, and make recommendations about what is best for the business. I push my development group with the knowledge that as the group improves, the business will see the results in the bottom line.


Bu$iness C0de

Software Development in a Business World