Trond-Eirik is rambling on about stuff

General stuff about system architecture and development

Thursday, November 27, 2008

SOA does not belong in a system architecture

It seems as the words of the SOA hype is starting to fade off, and people is getting more realistic expectations to what SOA actually is and what it can do for them.

From my point of view there seems as if a good number of architects have done a number of pretty bad design choices involving SOA. Often SOA is understood as something that should be used within a single system as a mechanism to separate the different layers of the system.

SOA = Service Oriented Architecture.

That doesn’t sound too bad, does it? Orienting our architecture around services? How can that be bad?

Actually, it might be that bad. The problem might as well be how people understand the realization of a service. Many consider the following statement as true:

A Service in SOA is the same as a WebService.

The other definition that is a bit less extreme is to look at a service as a contract and layer boundary.

Anyway, the practical result of this is that what goes in or out of a service is data. By data I mean dumb data. It might be formed as a Xml document, as string, as classes or other structural information. The point is that it is data structures that do not contain any business logic. Actually, that’s one of the main purposes of SOA: To separate the logic from the data as well as separate the technology dependency from the data, enabling different system to communicate between them.

So, on one side we have a method that is able to transfer dumb data and that is suited to communicate between systems built on different technology and different times.
On the other side we have architects trying to use this as a communication pattern between different layer of systems using the same technology, written at the same time and running in the same environment.

Why is this bad? This is bad because at the second you introduce a service (especially if it is realized as a web service) in a system you end up with a flow of logic and data that goes like the following:
- Service read data from datastorage
- Service internally structures data in a good way, probably in a model
- Service internally verifies data structures
- Service converts data to a suited dumb external format
- Service passes data on to the client
- Client receives dumb data
- Client internally structures data in a good way, probably in a model
- Client internally verifies data structures
- Client changes some data
- Client verifies business logic (some of it)
- Client structures data in the format wanted by the Service
- Client sends data to the Service
- Service internally structures data in a good way, probably in a model
- Service internally verifies data structures
- Service internally verifies business rules and logic
- Service saves data to data storage

This seems bad. And it is! It’s actually awful. The added cost of this type of logic is extreme. The cost is both in pure code realization time, bug tracking, runtime speed and the agility and ability for the system to change.

However, in some cases this is actually needed. But that is when you want to have interaction between systems that is very de-coupled and not actually related. It might for example be that you are communicating with a system in a different company. That company must be able to change it’s internal code without affect other companies. It might also, in some cases, be a suited way of communicating between systems in a large company.
But it IS NOT for communication within a single system, not even if that system is big. If you want to archive separation in your system, use other patterns.

SOA is a good idea, but it has to be used at the right places, and IMO that is not within a system architecture.


Tuesday, June 17, 2008

Completed the certification, ready for the next round

A while back, when I started working for Fundator, I started a certification run. The purpose of this was mainly to document my current knowledge and at the same time broaden the knowledge area a bit.

I have now completed this, by taking 6 MS exams, and I do currently have the following MS certifications:

Microsoft Certified Professional Developer
  Enterprise Application Developer

Microsoft Certified Technology Specialist
  .Net Framework 2.0: Web Applications
  .Net Framework 2.0: Distributed Applications
  .Net Framework 2.0: Windows Applications
  SQL Server 2005

As you of course will notice, these certifications are already a bit outdated. The hot new stuff now is .Net 3.5, WPF and those certifications. I have also noticed that MS have just introduced their new Master series of certifications.

However, the area of knowledge needed for the new MS certifications is mostly extensions of these certifications, so I do absolutely think that these certifications will be good to have.

Now it will soon be summer holyday. For now I will stay low and relax, but after the summer I'll probably continue my certification run, but then it will be a lot more learning of new stuff...

Labels: , , , ,

Monday, June 16, 2008

Early prototyping

It haven’t been a lot of coding for me lately. 

I’m currently working on extending an existing product with a new area of functionality. This involves a lot of studying and learning new stuff.

Some of the most exiting parts of this process is to notice how you gain more knowledge and understanding about the problem area as you go ahead and learn new stuff. I have been through this process several time before, but this time is a bit different as we are using some more time on the learning process. We are working in a broader area and there is no expert or customer that has full knowledge of the problem area.

The task at hand is to carve the product into shape, figure out what it should do and how it should do it. Kind of creating a product vision.

As a part of this I have done some very early prototyping. Earlier, when working with more concrete solutions, I have found that using Visual Studio in combination with bitmaps have worked relatively well. 

In this project that did not work at all. The outcome felt "to concrete", it did not leave enough room for the next phase and it quickly become too close to a real solution while at the same time being difficult to use.

Based on that experience and some more testing I’m currently using several tools to create GUI prototyping.
- I’m using paper/drawing to test out initial ideas and thoughts
- I’m using excel/word to test out special situations and presentation
- I’m using paint to steel small pictures/figures/symbols and ideas from other products
- I’m using power point to put together all elements, as well as adding simple animations to show transitions and illustrate the most important navigations

I’m sure that there is a lot of other GUI prototyping tools out there. However, to practically solve raising issue, I have found this method, using simple and available tools to work quite well as a way of sharing ideas and possible solutions with others.

Labels: , ,

Tuesday, February 12, 2008

What's happening with the portable devices

One of the issues that have been on my mind lately is the last large change in the hardware technology. There is a switch from single core processors to multi core processors.
This is already very noticeable in how software programs is developed, at least if you are using the .Net Framework. It's not an obvious and huge change, but it's all those small pieces that is being added with each new version of the Framework.
From the BackgroundWorker GUI component to all those more sever directed Async wrapper methods that are found in almost any server based call.

It seems to me as we are going to see a lot more of these small adaptations in the .Net Framework. The latest I heard was that there was going to be added multi-thread support to for each loops so that the pre-compiler automatically should be able to split a for each loop into parallel tasks that was to be executed on different threads.

However, all of that is old news. I think that is a trend we will se a lot of in the future, and we will se adaptation of both languages and framework to add better multithreading support.

However, a different trend that I'm interested in is what seems to be a rapid change in portable devices as mobile phones and other portal devices.
From being very limited devices with slow processors, very limited memory and display that is unable to produce any reasonable graphics, these devices are now very rapidly getting more CPU, memory, processing power and high-res displays. At the same time laptop PC's is getting smaller and smaller. This makes the gap between laptops and portable devices to get smaller and smaller all the time. The latest technology to really close the gap between these technologies is the SSD's (Solid State Drivers). The last, missing piece is the long promised super batteries. If those were actually hitting the marked I imagine that some real changes would be seen very fast.

I think that it is very possible that we within few years from now will see a major shift in how these devices is used. I don’t expect any revolutionary, but a huge increase in the current trend of smart-phones and applications for these devices. And as this shift in how hardware is used, we will again see that the software industry will have to adapt and adjust the software solutions accordingly. Still, the change does not have to be that dramatically. All the current changes with Smart Clients, online-offline support for almost every application and other changes is all very adaptable and directed to this change.
So, I think we’re on the right track… at least until something totally different happens instead ;-)


Labels: , ,

Thursday, October 04, 2007

Microsoft is releasing the source code for .Net

It seems as Microsoft is planning on releasing the source code for the .Net Framework.

According to this blog:

This is very interesting news, and it might possible be of huge help for developers. Especially those working with the more “not so well documented” parts of the .Net Framework.

At the same time I’m also a bit skeptical as this will enable the developers to look at the .Net framework more as a white box then a black box, and unintended writing code that is dependent on the inner parts of the .Net Framework to work as intendet.

Maybe you find out that some return value only may be two out of tree values, and you then code for that. In the next release the third value is supported as well but our code is not supporting it.

All over I think this is an advantage, and I assume that it is only in very special troubleshooting scenarios you will be interested in doing this.



Friday, September 07, 2007

Visual Studio 2008

I was at MSDN Live in Trondheim yesterday. One of the sessions was about Visual Studio 2008 Team Systems.

It seems like MS is putting some quite nice stuff into this product. They have for example started to add support for code metrics in to the Team edition of VS 2008.

Metrics is a well known method of analyzing code and code complexity based on statistics extracted from the code. Typical information gathered is reference counters, lines of codes, number of ifs, loops and so on. Based on this information it's possible to start making some theoretical guesses about the quality of the code.
VS 2008 Team System now has added a client tool that does this and displays this information to the developer. This can then be used to evaluate the complexity of the code and give some ideas about areas where refactoring might be wise.

I do absolutely not think that this is a golden bullet for application architecture or code quality. However I do believe that it might help to put focus on limiting complexity in code and coupling between modules.

I'm quite excited about getting VS 2008 Team System installed and do some more evaluation of this and how it might work in real life.

Labels: , , ,

I have started working at Fundator AS

I have recently changed my work location from Norconsult Informationssystemer AS to Fundator AS.

Fundator is small, emploee-owned, consultant company. We are currently 20 employees with deep knowledge within the fields as business development, enterprice architecture, .Net and Java system development. This company has a lot of very skilled people, and I hope to learn a lot here. I'm looking forward to see what the future will bring.

Wednesday, June 06, 2007

There is not enough time

In the last couple of months I have done some attempt to stay on top of stuff and get new inputs from sources as IT-related newspapers, blogs, MSDN and reading some books.

I really wonder if I’m a totally slow reader, using way to little time on stuff or what. It’s just so much stuff out there that I should have loved to read, understood, tested and commented upon. However, there is really-really not time in my life to keep on track with all of it.

And that’s even if I’m just sleeping 5 hours a night and drop all social life.

Maybe that also some part of the problem, I’m actually trying to see my two children (and my wife) a couple of hours every day instead of sit down in my office and staring into my computer screen. And yes, it was that damn thing called “work”. What was that again? Ah, yeah. That was the reason for why I wanted to stay on top of stuff. And to get the basic stuff there done takes of course 8-12 hours a day…

I see that my RSS feed on “Recent Blog Postings (MS Architecture)” currently has 249 unread posts, and I’m pretty sure that at least 80 of those are really interesting stuff!

But hey, after one week away from the computer I’m actually up to date on several of the other RSS feed’s I’m monitoring…

I think I’ll get some more jogging/swimming/sporting/mounting walking under my feet the next couple of months and start studying speed reading or something like that J


For everyone out there contributing with all this great blogs and discussion/stuff, thanks!
Yes, I really mean it. There is so much great reading material out that there is right to the core of important issues that it’s really, really cool! If there was only some more time… What about introduction 48 hours days?