What are greenfield and brownfield applications? - language-agnostic

I read the following sentence in the Fluent NHibernate wiki:
...; however, for most greenfield applications (and quite a few brownfield ones too) auto mapping will be more than capable.
What are greenfield and brownfield applications?

Greenfield
in other disciplines like software engineering, a greenfield is also a project which lacks any constraints imposed by prior work. The analogy is to that of construction on greenfield land where there is no need to remodel or demolish an existing structure.
(from http://en.wikipedia.org/wiki/Greenfield_project)
Brownfield
Brownfield development is a term commonly used in the IT industry to describe problem spaces needing the development and deployment of new software systems in the immediate presence of existing (legacy) software applications/systems. This implies that any new software architecture must take into account and coexist with live software already in situ.
(from http://en.wikipedia.org/wiki/Brownfield_(software_development))

I think it might be related to the urban planning terms "greenfield land" and "brownfield land". Greenfield land is undeveloped land - agricultural, landscaping, or natural. Brownfield land is developed land.
A brownfield application is an existing application, while a greenfield application is one that is not yet made or is in very early stages of development.

Greenfield apps: new development, no prior work done that poses constraints on your solution. I think the term comes from un "unplowed, green" field.
Brownfield: existing application, lots of existing stuff to consider, etc.
See this post.

I would guess it's an analogy to building
a greenfield site is virgin ground - i.e. a new project, starting a new software project from scratch
a brownfield site is one where existing structures need to dismantled first, i.e. building within an existing software project

Based on what I know of James Gregory (the guy behind Fluent NHibernate), I think the Wikipedia entry for brownfield is a little on the theoretical side. In Brownfield Application Development, we define it as:
a project, or codebase, that was
previously created and may be
contaminated by poor practices,
structure, and design but has the
potential to be revived through
comprehensive and directed refactoring
Short version: An existing project that needs work but is still actively developed (unlike most legacy systems).

There is much debate surrounding a company's decision to 'greenfield' or 'brownfield' or refactor legacy code.
The decision needs to be made in consideration of many factors - not the least being the available funds to develop a greenfield application. In many cases the legacy app is the company's current cash cow and any greenfield replacement of that legacy code won't make a single red dollar until it is has been fully developed and in the hands of the first paying customer.
While the preference for most software engineers is START NEW GREENFIELD PROJECT because they usually hate OPC (Other People's Code) it may not always be in the long term financial of the company.
I wrote an article that analyses the risks involved with greenfield projects basing it on a very real experience at a company I worked for 20+ years ago (showing my age now ;). You can read it here:
http://stepaheadsoftware.blogspot.com.au/2012/09/greenfield-or-refactor-legacy-code-base.html

Related

Language-independent tutorial or book on web-apps

Is there any language-independent tutorial or book for developing web applications?
For example implementation of login procedures, photo-gallery making etc, not focused on any particular language?
I'd suggest a book like Web Application Architecture: Principles, Protocols and Practices. It provides a high level overview of the pieces of developing a web application, with some real examples when they are called for.
I'd like to suggest - Coding Horror: Recommended Reading for Developers
Patterns of Enterprise Application Architecture by Martin Fowler is a good start.
The example code is in Java and .Net but the patterns transcend any specific programming language. It deals with subjects such as how to implement server side sessions, patterns used to create a Model-View-Controller framework, patterns used to create an object relational mapping framework, and a little bit on how to string it all together.
A few other paradigms have entered into the fray since it was written, which are not covered such as dependency injection. There is no coverage of NoSql databases and when to use them. It also lacks coverage of more retro topics such as CGI, and older frameworks/languages that used this standard (ie webapps written in Small talk). The book also predates the widespread use of "convention over configuration" frameworks such as Rails. Transactions are dealt with adequately but the coverage is not complete, referring the reader to Principles of Transaction Processing by Bernstein and Newcomer, for in depth information.
It might be worthwhile to complement reading PEAA with a good understanding of Unix sockets, and how this ties up with the threading and shared memory facilities offered by the language you are programming your web application in. The concurrency features of the run-time environment your application is deployed in will influence how you process requests and implement server-side sessions. If you need to remind yourself about sockets read chapter 12 of "The Illustrated Network" by Goralski. If you really want to geek out read the chapters on networking and threading in "Computer Systems: A Programmer's Perspective" by Bryant and O'Hallaron, though this might be overkill. Just know the concurrency capabilities of your chosen programming language and how it talks to the network layer.
A good understanding of the HTTP protocol is essential. This will lay a solid foundation for learning other important standards based on HTTP such as REST and AJAX. For in depth information on HTTP there is "HTTP: The Definitive Guide" by Gourley and Totty. There is also W3C. For an introduction to REST have a look at
http://www.infoq.com/articles/rest-introduction
For a broad brush overview of HTTP and sockets have a look at Wikipedia.
Concerning usability I would recommend the following two books from the Pragmatic bookshelf:
http://pragprog.com/titles/bhgwad/web-design-for-developers
http://pragprog.com/titles/jsaccess/design-accessible-web-sites
Finally concerning security a good place to start might be "24 Deadly Sins of Software Security" by Howard, LeBlanc and Viega. Part 1 deals specifically with web applications and Part 4 deals with network security in general. Part 3 on cryptography is also good, if you are generating "remember-me" tokens stored in a cookie, so that a user does not have to log in each time they use your app.
I am not aware of any one "cookbook" that will provide a solution for every problem you are likely to come across developing a web app but if you read all of the above you will be fairly well positioned.

When to upgrade to a new version of a language or framework?

When a new version of a framework or language appears (e.g. .NET 3.5, SQL2008), what approach do people take to when to adopt/upgrade?
Generally developers will say as soon as possible (they want it on their CV and from a management perspective giving them what they want provides a motivation boost) but commercially there is often little incentive (few clients demand the latest version) and from a cost perspective (retest, training) there is often a disincentive.
I'm particularly thinking of "on-going" systems and projects (such as in a software house) which exist and evolve over years where taking the "new projects use the new technology" approach doesn't work.
Are people driven by specific requirements (the need to use a new feature, a potential or existing client demanding support for it), do they formally assess it (in which case what are the criteria) or do they upgrade as a matter of routine (in which case when - leading edge vs. bleeding edge)?
Do people think that not being on the latest version of something should be considered technical debt and managed as such?
Or is "if it ain't broke don't fix it" a valid approach?
Read up on Technical Debt. This is a simple cost-benefit decision.
The "if it ain't broke don't fix it" is a common management policy that says "tomorrow's dollars aren't worth as much as today's, so don't plan for future improvements." Eventually technical debt accumulates to the point where the product can no longer limp along.
The most common breaking point is when some piece of the infrastructure is no longer supported. By then, incremental change is impossible.
Reinventing from scratch is a new capital investment. Fixing existing code is an expense. The accounts force management to make technically crazy decisions.
In the case of open source software, it requires careful technical management since there's no official "support sunset" announcement from Oracle/Sun. Bad technical management, of course, leads to technical bankruptcy.
We look at the support lifecycle costs. For how long are the older versions supported, and at what costs? Platforms like Windows and Java tend to move fast as compared to mainframe environments, and part of the cost of doing business on those platforms is to perform periodic upgrades. In a rational world, that is!
New versions can have killer features we need -- but that is rare in enterprise development. The main positive selling points of new versions (as opposed to negative ones such as expired support) tends to be greater developer efficiency, which is hard to measure. Against that, as you indicate, the cost of retraining must be considered, not only for the initial developers, but, crucially, for maintenance. In each upgrade, some applications tend to be left behind as too critical to retire, and too expensive/fragile to upgrade. Over time, the number of platforms and versions you have to support increases overall technical debt (no matter their age).
Another criterion for upgrading to new versions (which you note) is the ability to attract and retain staff. With the current economic phase, that's playing second fiddle, but still cannot be ignored completely. You want to have at least a seasoning of enthusiastic and knowledgeable developers.
I think the killer question is whether your app will survive long term if you NEVER upgrade the platform/language version. If you think it can't, you may as well upgrade sooner rather than later, as it will only become harder.
Think about how long your app should be actively developed until you need a full rewrite. If you never plan to rewrite it, I would upgrade continually. Consider how difficult it will become to find the best developers if you are working in an outdated technology. Consider how new framework/language features could speed up your development process in the long term, for a bit of short term pain.
When you really need to. .NET 1.0 was crappy, 1.1 was a nice upgrade, but Web development with VS2003 was not so smooth. Things improved with VS2005 and .NET 2.0 – and I see still many developers and companies are stick to .NET 2.0. Previous versions were so fresh, version 2.0 was mature tech. So, if you were happy with 1.1, why would you upgrade? If you are happy now with 2.0, why upgrade to 3.5 or 4.0?
When the benefits of upgrading (more features, or a bugfix you need) outweigh the risks/costs involved (new issues, breaking existing code).
When you develop for Microsoft based platforms, like a Windows Forms App for Windows or ASP.NET webapp for Windows Server, the nice time to migrate is for every two major versions of OS.For example, if your app has been developed for Windows 2000, you ought to migrate to Vista though XP can be neglected. Similarly, if it were designed for XP SP2, you can safely ignore Vista and target Win 7. Usually Microsoft never breaks (or rarely breaks) incremental OS updates. So an app running on today's OS will definitely run on the next. But never on the one following it. (It if runs how can M$ make money???)
Source: Self... Windows Developer for over 5 yrs)
I'm in the upgrade as soon as possible camp (though I might wait a month after a new version come out just in case for uncaught issues). There are a few things you need to think about:
1. Security Releases
Many of the people who tell me if it isn't broke don't fix it are also the same people who would close their 2 eyes when security patches get released. Think Equifax.
To me it is an ethical responsibility to at least be on security supported versions of a framework. We owe it to our customers to safeguard their data.
2. Attracting & Retaining Talents
There are lots of talk about how the programming language or framework used doesn't matter. But in my experience, the cleanest code and design for a web app are usually written by the people who are passionate about the framework & programming language used because of their experience & expertise with it.
These people are unlikely to stay around for long or join your company if you stick to a very old version. Please think about your developers' happiness.
3. Newer, simpler ways offered by the newer version
Very often newer versions of a framework make something hard in the past much easier. If we do not upgrade, we miss out on the good new packages/features and we write our code in the old frustrating way knowing there is a much simpler way to achieve the same feature. And when it comes time to upgrade, we may end up having to change again to the new way. So why not upgrade and use the new better way and waste less time?

4D - is it any good? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Recently I found out that the company a friend of mine co-owns uses 4D, which I've never heard of before. They swear by it, but they're non-technical and what they say about it sounds like memorized marketing blurb. Unfortunately the 4D website also seems devoid of any actual information and is filled with words like "comprehensive", "solution", "platform" and "integrated" instead.
Since that thing is rather expensive and uses a custom language that I don't have much inclination to learn just for one project, I'm cautious about it and I'm wondering if anyone had any experience with it? Would you recommend it? What is it good for? What competitive advantage would I gain by learning it as a programmer, or using it as a company?
4D has been around for a long time (~25 years), so it's much older than e.g. MySQL. Think of it as a professional version of Microsoft Access: It has its own Pascal-inspired host language, its own relational database engine, a very mature IDE for rapid GUI development and a custom runtime which allows for true "write once, run anywhere" (anywhere being Mac OS (X) and Windows, that is). Nowadays, it also understands SQL, there's a server version and even an integrated web server. It's fairly powerful, so the comparison to Access probably does not do it justice.
Today, I believe it's mostly used for legacy apps which are as old as 4D is. I don't think I would learn it again today, much less start new projects with it, since you can get the same functionality and then some by stacking up open source components.
I used to do some very serious 4D work, one of the systems I wrote is still in use as an enterprise system about 16 years later. I got frustrated because they were taking years to come out with the new object-oriented version of the language and I was writing thousands of lines of code to use a third-party table control.
4D delivers cross-platform, very high-performance client-server systems using a proprietary server. The database model is much more set-oriented than SQL and pulls the sets all the way into the core language. It does a nice job of delivering code to the clients because it compiles all procedures to native code which is cached locally and updated on-demand when it is out of date.
The language and GUI environment have their quirks but the flip-side is that there will probably be a good living to be made from supporting it as a legacy platform. if you can get someone else to pick up the tab for the tools, it may be a useful addition to your consulting toolbox. You have to consider how much business-specific code is gonna be out there for a unique product with that long a history!
An engineer for whom I have huge respect was recently hired by 4D which says a lot about their commitment to the future, hiring this kind of guy.
I've been working a lot with legacy systems recently, doing a port from old Mac stuff to WPF and the contrast between the mostly-unused complexity of Visual Studio and old Mac tools reminded me of 4D. I'm also porting my OOFILE C++ database and reporting frameworks to REALbasic - the OOFILE set-oriented operations came directly from what I loved about 4D and this too made me think I was too harsh in this answer originally.
The thing to remember about 4D is that it was set-oriented from the beginning (written by a mathematician) and much easier to use for many things than SQL. The deployment model of 4D Server is a superb combination of desktop app and network provision - compiled components are cached on the server and automatically sent to a client when needed. There's no need to shutdown or actively push or deploy updates. The GUI model of 4D was frustrating but looking at the site today, they have solved most of the issues that I had to use third party solutions for years ago.
Avoid it like the plague. My company uses it and it's just a constant exercise in frustration. It performs no where near as well as the sales pitch would have you believe, and documentation is either non-existent or not helpful.
In my opinion, there is no reason to begin learning 4D unless you want a simple database app and are unable or unwilling to learn how to create GUIs in a bigger language. The main advantage that 4D has is that the built in functionality between the UI and the database can handle most of what is needed. If you want something quick, small, and inhouse, you can get by with 4D but if you need to develop a powerful commercial application you will run into a few walls. If you need something that 4D doesn't provide automatically it will be very difficult to get it working.
I consider the language completely archaic. It works for what it does but our product has become limited by the language and database itself. We keep running into weird quirks and have to code our way around them.
I have experience in 4D 2003 and 2004 but we haven't upgraded to the latest version because of the costs. It is extremely expensive. Each customer needs to buy licenses for each computer that needs to run the software. Our product costs over $1000 for a new office because of the licenses. When a new version of 4D is released every single customer has to pay to upgrade their licenses.
After looking at https://www.4duk.com/products/ataglance.html, I'd recommend you stay clear - it looks like one of those products that's going nowhere.
It reminds me of the time I was made use a development platform called Witango - absolute nightmare to use, and all apps had to be rewritten in .NET very shortly afterwards.
Invest your time learning something more mainstream/employable.
Avoid at all cost. 4D used to be a good Mac database twenty years ago but is obsolete today. Extremely expensive to deploy and poorly supported. I have used it for many years and have since moved to Real Studio for cross-platform database development, which has a more modern language and a far more active developer community.
I'll be wary of investing too much into something like this. On the good side, if that's what your company uses learning it will pay dividends. But the skills you learn will be hard to use in other places.
I think more than half the replies over here are inaccurate. I know of more than 20 companies with over 1000 users. And I believe there are a lot more.
With 4D v12.1 (www.4d.com) you can easily deploy at the click of a button for single-user, client server, Mac, Win. And there are easy to setup plugins for integration with Flex, iPhone and Android OS. Their KB and documentation is very neat and comprehensive.
They have a great engineering team and the support from 4D and the online community is just fabulous. I have been using 4D for several years and I have no complaints.
4D as someone else pointed out gives you a fully integrated backend database and frontend. The client server connections are stateful so you dont need to worry about record handling and client server session handling.
At less than $1000 per year it is not expensive and you can deploy unlimited single user apps. Which other propreitory development platform gives you that?
I am sure Real Software has its Pros and Cons too. There are many choices nowadays and there are many ways to skin a cat.

Is there a decent open-source gaming console [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I've got a young nephew who aspires to grow up to be a game programmer and i'd like to introduce him to the world of open-source as well as get him a sweet gift.
Anything like that out there?
Well, this is a tricky question because we don't know the level your nephew is at, nevermind the fact that it's difficult to produce a very nice showy game without a lot more work than a beginner might put forth.
X Game Station
Nevertheless, André LaMothe's X Game Station is meant to be exactly the system you're asking for - a beginner's guide and system on how to develop complex programs with interactive elements and gameplay on resource limited hardware. Which is pretty much what a game designer is called on to do.
GP32
The GP32 was also meant to fill this gap, but with a much more powerful processor. The successor was never released, and the company went bankrupt shortly after, but you may still be able to find one on ebay or within the communities that developed around the original machine.
Google Android
You might also consider looking toward the Google Android platform. Cell phone gaming is now and will be one of the biggest platforms in the future. The android isn't set up perfectly for gaming, but it's a good first approximation, isn't horribly expensive and includes a robust development toolset for a high-end mobile processor. Several big name game development companies have already pledged support for this platform, so it will also look good on a resume.
But a cheap computer and a VGA graphics book is surprisingly fun as a kid...
-Adam
There are a number of Open Source platforms out their for game development, if you go to here there are a large number of game engines and development platforms. For a beginner with little programming experience I would suggest a game engine like Game Maker or RPG Maker, which are drag and drop game engines. Both of these are free open source game engines. The other problem with these two game engines is that they are limited to 2D games only, even though Game Maker allows you to make and FPS that is like Doom style graphics.
For a more intermediate or beginning programmer I would honestly suggest Torque, which has both a 2D and 3D game engine. This engine is licensed as open source, but you still have to pay for the compiled version from their site. I have had much success with Torque in the past, especially Torque Game Builder (2D Game Engine). It is very simple to pickup and begin making good looking/functional games. In fact, a number of XBOX live games have been built using Torque game engines, like Marble Blast.
Another open source game engine I have heard good things about, but have not had a chance to try, is Multiverse. Multiverse is actually aimed at MMOG creation. The nice thing about Multiverse is that it provides for the creation of a 3D game environment, but also allows for the integration of Flash content into the game world.
For a more advanced programmer I would suggest looking into the SDL, OpenGL, and OpenAL. These are not game engines but graphics and sound libraries for game programmers. These are completely open source and are free to use. Most game technologies will have some implementation of one or all of these libraries in their software.
Even though XNA is not open source, it is also a good place to start for more advanced programmers. Not only does it allow for the creation of XBOX games, but you can also develop for the PC and Zune also.
Another thing you may want to suggest to your nephew is to modify existing games he owns. Most PC games and many console games allow for game modification of some form or another (level design, rescripting, etc). Some of the more popular game engines that I have seen mods for are the Source Engine and Unreal Engine. There are a number of tutorials at MODDB and 3DBuzz (which also has great tutorials on other aspects of game programming and design).
In addition to what I have listed, I have also heard good things about Ogre3D and Havok (a physics engine used in many many games). He can also go to such sites as IGDA, Gamasutra, GameDev,Game Career Guie, 3D Buzz for additional information on game development.
Hope this information helps.
I saw a question earlier about programming on a Nintendo DS. That sounds like it might be what you're looking for.
Also, I recently read about the BUG which looks like a really cool platform for building any number of handheld devices.
You might be interested in the XGameStation. It's a hardware console designed to teach programming a game console. It was created by Andre LaMothe who has written several books on game programming.
http://devmaster.net/devdb/engines/sylphis-3d#general-overview looks pretty nice, c/c++ oriented, GPL license, and Free.
I'd third the Nintendo DS recommendation - grab a R4 "homebrew" cartridge and you're pretty much set.
Another idea is one of the independent handhelds - something like the GP32, though there's certainly newer devices on the market.
I believe this is somewhat like Basketball, start from close to the basket and work your way out and you'll be hitting 3's with practice.
In my opinion, game programming is 3pt, without learning to shoot the basketball properly, you will probably cheat and start slinging it or just chucking the ball at the backboard hoping it's going to go in.
If you have a youngster without the ability to shoot a mid-range basket properly, do you think he will be able to motivate himself to keep trying, rather then trying something closer to the goal and working himself outside when he is confident?
If your nephew is serious about learning programming, get him a python book or vb.net/c# book. Maybe he will become more interested in application development because of these languages (it was the case with me, I'm 14). :)
Edit: This is assuming he doesn't have much programming experience.
well, this is not completely open source (the editor isn't, the engine is), but I recommend RPG Maker VX (if he likes role playing games):
http://tkool.jp/products/rpgvx/eng/index.html
I have used this (and the earlier versions) for some time. It is nice because there is a great editor and event system which can teach basic programming concepts without writing any code. Once your nephew wants to write some real code, there is an entire API (RGSS2) written in ruby that they he is free to manipulate and extend. This API makes up most of the game engine, hiding only low level implementation stuff.
There are other programs out there like GameMaker, but RPG Maker is the most user friendly, while still providing a way to get at the more advanced stuff.
EDIT: I forgot to mention one of the best parts; there is a large and active community around RPG Maker. There are many forums completely dedicated to the program where people will be happy to help on even the most basic tasks, not to mention the great resources that are avilable.
Well programming on the NintendoDS is possible, however you'll be breaking and stretching quite a few laws there.
However, I should say that I learned most of what I did about hardware doing stuff just like that while I was back in school. I learned a LOT from doing that sort of stuff ;)
But I wouldn't recommend it to youngsters or newcomers because you'll be totally out of support (lots of frustration), might break your game console, and unless you already know about programming the learning curve is WAY to high.
Might I recommend starting out with flash or PC games before console programming?
Edit: When I mean breaking/stretching laws, I don't mean writing code for your hardware, that's up to you. But it is illegal to buy pirate memory cards and card writers (that infringe on patent laws). Also funding hardware piracy will unlikely be something to proud of.
Edit:#Mike F did you read my post? I said, I HAVE done this while I was a student, and I learned a lot. But it's still piracy, and yes I did my fair share of piracy when I was a poor student, but it's not something I'd want to teach someone just getting into programming. Would you?
Besides there are plenty of perfectly great ways to learn game programming without needing to hack stuff like RPGMaker, XNA, etc...
#Mike F: Once more just for the sake of it NDS flash-roms are produced through patent piracy(/infringement), not software piracy, as in it is illegal to produce such hardware because it goes against patent laws. And the companies that make such flash rom hardware are piracy companies that traffic their goods in the grey market, Its as simple as that. I'm not talking about "software piracy" at all here. Thats why I mentioned twice already that anyone is free to run whatever software on their hardware, be homebrew or whatever.
Ars Technica just came out w/ an article about open-source gaming consoles. They are hand-helds, so I don't know if that's an issue but they seem to be pretty nice, with lots of features to tinker with.

What are some viable alternatives to BizTalk Server? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
In evaluating different systems integration strategies, I've come across some words of encouragement, but also some words of frustration over BizTalk Server.
What are some pros and cons to using BizTalk Server (both from a developer standpoint and a business user), and should companies also consider open source alternatives? What viable alternatives are out there?
EDIT: Jitterbit seems like an interesting choice. Open Source and seems to be nicely engineered. Anyone on here have any experience working with it?
BizTalk Server's key benefit is that it provides a lot of 'plumbing' around deployment, management, performance, and scalability. Through Visual Studio, it also provides a comprehensive framework for developing solutions, often with relatively little code.
The frustration and steep learning curve that others mention often comes from using BizTalk for the wrong purpose and from a misunderstanding about how to work with BizTalk and message-oriented systems in general. The learning curve is not as steep as most people suggest - the essential part of the underlying learning actually focuses on changing thinking from a procedural approach to a stateless message-based approach.
A drawback people often cite is cost. The sticker price can seem to be quite high; however, this is cheap in comparison to the amount you'd spend on developing and supporting features on your own.
Before you consider alternatives, or even consider BizTalk server, you should consider your organization's approach to integration and it's long term goals. BizTalk Server is great in cases where you want to integrate systems using a hub and spoke model where BizTalk orchestrates the activities of many applications.
There are other integration models too - one of the more popular ones is a distributed bus (don't confuse this with the term "Enterprise Service Bus" or ESB). You can also get BizTalk to work as a distributed bus and there are alternative solutions that provide more direct support. One of the alternate solutions is an open source solution called nServiceBus.
When considering whether to use a commercial product like BizTalk, verses something else (open source or developed in house), also consider maintenance and enhancements and the availability of the necessary skill-set in the marketplace.
I wrote some articles that go into more detail about the points I discussed here - here are the links:
Why BizTalk?
Top 10 BizTalk Mistakes
Extensibility Features in BizTalk Server
Open Source Integration with nServiceBus
My experience with BizTalk was basically a frustrating waste of time.
There are so many edge cases and weird little business logic tweaks you have to make when you are doing B2B data integration (which is probably the hardest part of any enterprise application) that you just need to roll your own solution.
How hard is it to parse data files and convert them to a different format? Not that hard. Unless you're trying to inject a bloated middleware system like Biztalk into the middle of it.
As a BizTalk consultant I have to agree at least partly with Eric Z Beard, there are a lot of edge cases that take up alot of time. But quite a few scenarios are handled extremly smooth as well, so it all depends IMO. But when you (Eric) call BizTalk bloated I have to disagree! We've found that the performance and reliability is excellent, it's flexible and comes with a lot of good adapters out of the box.
BizTalk needs to be used correctly,
I am a BizTalk developer and my experience with BizTalk is quite good.
Its reliable, performant, scalable, contains a lot of built in architectural patterns and build in components to make integration easy and fast, you get security, retries, secondary transports, validation, transformation etc... and what ever you dont have build in with BizTalk you can easily customized with .NET code, its basically a hard earned integration system and you get all this in one box.
BUT you need to know how to implement BizTalk correctly, not once I came across solutions that where implemented and often also architected incorrectly.
but the real benefit of BizTalk is that you can implement small solutions and scale up whilst most other integration systems from big vendors will only sell a whole integration pack which can cost much more.
BizTalk is considered the most complicated server from the house of Microsoft.
So any body saying BizTalk is not good dosent know BizTalk period.
We evaluated BizTalk at our company and were really disappointed.
We are using IBM WebSphere Transformation Extender (which has lots of (other) problems, too) and the mapping tool of BizTalk is a joke in comparison to WTX.
The graphical tool is not really usable for complex mappings (we have schemas with a few hundred fields in repeating groups) and if you do more than the usual "concat first name and last name to name" mappings, you will be tired of the graphical approach (for example the arguments of the functoids in the graphical mapper are not labeled and the order in which you connect fields to these arguments is important).
The XSLT-Mapper was usable but not really convincing, and even the microsoft rep told us to use a tool like XMLSpy for XSLT and load the resulting XSL file into BizTalk.
A third approach to mapping is to use C#-Code for the mapping, which was not acceptable for us as a general approach (we don't want to teach everyone C#).
In addition to the mapping tool we did not like the deployment in BizTalk. In order to deploy your process, you need to make lots of settings in different tools and places. We had hoped to find a mechanism like a WAR file for Java Web Applications in BizTalk, so that you can give one archive for your whole process solution to your administrator and he can deploy it.
We've been using BizTalk since version 2004, and now have a mix of versions 2006 R2 and 2004 running. I found that the learning curve was quite severe, and development time for solutions is not always quick. Those are definitely shortcomings. Where BizTalk really excels is in its fault tolerance, gauranteed delivery, and performance. You can rest assured that data will not get lost. Retry functionality and fault tolerance robustness is baked in so generally speaking if systems are down BizTalk will handle that and successful delivery will occur once systems come back on line. All these issues such as downtime, etc that are important in an integration scenario are handled by BizTalk.
Further, generally speaking when developing solutions BizTalk abstracts the communication protocols and data formats of the native systems by dealing with everything as xml, so when developing solutions, you typically don't have to wrote code specific to those systems, you use the BizTalk xml framework.
In the last year, we've implemented a java open source engine called Mirth for our HL7 routing. I found that for HL7 purposes, the HL7 adaptor for BizTalk is a challange to work with. Management dicated that we use Mirth for HL7 routing. Where BizTalk falls down in terms of learning curve, Mirth makes up. It is far easier to develop a solution. The problem with mirth is that it doesn't really have any gauranteed delivery. Most of the adaptors (except for hl7) have no retry functionality so if you wanted that you'd have to write your own. Second, Mirth can lose date if it goes down. I would call it very easy to use (although there is no documentation) but I'd be hard pressed to call it an enterprise solution. I'm going to check out jitterbit which was mentioned by someone else.
We used BizTalk for a couple of years, but gave it up for our own custom framework that allowed more flexibility.
There is always Sun's (now Oracle) OpenESB framework. Its generally speaking a smaller, lighter version of Biztalk but with roughly all the same features.
You do get to write more code with it, though.
Its Open Source as well.
In the OSS space (though I've never used them as a BizTalk replacement personally - this is anecdotal) you can use one of the Java/J2EE Messaging engines such as OpenMQ (which is the Sun enterprise one rebadged and without support). If you need Orchestration / Choreography (i.e. SOA/ESB pieces) on top of this, you could look into something like Apache Mule
My experience with BizTalk and doing B2B integrations is that most organizations do not truly do schema first design or fully understand xml standards for that matter. Most tend to weave objects and hope they materialize into meaninful schemas. In an enterprise environment, this is backwards.
BizTalk does have a learning curve, but once you get it you are rewarded with durability, performance, true scalability, and extensibility. Like most have said though, it best to make sure it meets your needs and contort your needs to BizTalk.
In the past I have worked with BizTalk 2004 through 2009, and another product called webMethods.
I have no direct experience with JitterBit, but I have heard very good things from coworkers.
I came across Apatar (unable to post url, but Google finds it) while looking for a solution cheaper than BizTalk. I have yet to try this out.
My last company had many problems with BizTalk being too complex and ridged, but I can’t help but think this was mainly down to the implementation the consultant did.