Feb 16

I should add “versus backend features, especially for an enterprise software”.

Have a look at Ayende work around NHProf. In a recent post he describe a change he will have to implement. I’ve no doubt he already made this significant change quite rapidely, but such change is usually heavy. You can check the number of line of code in the client vs backend there. So, technical requirement/constraints may force you to take a radical approach for the UI which induce significant extra work…especially as (from a performance perspercitve):

UI operations are expensive, while backend operations tends to be cheap.

From a requirement perpective also, UI can be very expensive to develop. Usually, customers (internal or not) are suddenly very creative when the “see” the UI of a feature and add a lot of new requirements…or changes. That’s why products like Balsamiq Mockups are really useful, to avoid useless iterations.

In the context of an enterprise software the ROI of UI becomes terribly low. The first reason is that usually, there is a need for multiple clients that are totally different: business intelligence, RIA, outlook integration, RSS/ATOPM integration, fat client, web client. This makes the development on a single client a very small piece of the entire picture, which reduce the ROI. 

The second reason, is that UI technology and trends are evolving a lot (RIA, Web 2.0…etc). At the opposite, the business logic encompassed into your enterprise software is tighted to the “business” which evolve at a slower rate. In this context, adding a new “business feature” has touthands more value/ROI than a UI feature.

In my opinion:

  • UI technology should support rapide development to be able to follow trends and technology evolutions without exploding investments,
  • backend technology should be selected with a long term vision,
  • do not put any business logic in UI, simply allow projections of backend business logic in the front end.
Nov 11

G2One is the software company delivering open source projects Grails and Groovy. This company is made of 6 java experts. YOçu can find all the details in this article.

SpringSource expect to integrate Grails in dm server, the OSGi paltform.

Ruby on Rails has now a serioous competitor.

Oct 01

I’m currently reviving a mobile application that I started a long time a go.

Since that time, I downloaded lots of useless software on my mobile phone…no more space to deploy my application. I tried to deploy directly on the storage card but the way to do so did not pop immediately. I googlized around this topic to get the tip and did not find anything. 

The tip is simple: go in the properties of your .Net mobile project, in the “Device” tab, you click on the button on the right of “Output file folder” and select “Root folder”, then enter the full path “\Storage Card\Program Files\MyApp”.

Sep 25

legacy code black boxingToday, I received a mail referencing this post from Llewellyn Faco.

My first though is: “does adding unit test on legacy code makes sense?”. I beleive it does not. You would like to refactore your code and be sure not to break any feature? Refactoring makes sense only to make your code evolve to change design or add feature and so on. Legacy code that support features you are not aware of (no unit test) … does not need to evolve…does need only to be replaced by other code (with test around this time). So I found this simply useless. 

The second issue I see is the feasibility of the solution proposed by Llewellyn. One nice side effect of unit testing is the decoupling. And usually, legacy code without tests around has a lot of coupling between classes, thrid parties and databases. Even if the legacy code was well written, you always have a damned coupling somewhere deep inside. So there is no way to instanciate the class you would like only for test purpose.

To summarize: you have some legacy code which works (new code has 99% of the bugs) but you don’t know what it does exactly. Why would you like to add test around? I usually add test to describe what I want tmy code to do and reuse these test to ensure evolution (refactoring, redesign…etc). In the case of legacy code: isolate it as much as possible, consider it as a black box and the only possible evolution is replacement!

Sep 05

Communities, in general, are getting more and more traction.

O’Reilly is creating on line books that are “community centric” : dedicated to a community and community-authored”. Everyone can contribute to this books composed of articles that are rated by the community.

Having a look at the 97 Things Every Software Architect Should Know is worthy.

Jun 20


SpringSource will release sone (around july) the version 1.0 of its application platform: S2AP. I’m having a look at it, especially from a PaaS point of view. S2AP present lots of interest for different perspective, but PaaS is what I’m currently looking for.

First, S2AP makes a big jump in the notion of application server…it’s not an application server but an application platform which is different and open new horizons. The application servers stand for containing applications. These application can be web app, web services…etc, but they are monolothics. With JMX and ear, you can go further in decoupling by allowing multiple micro appplications to be delivered inside the same enveloppe: the ear. But this is not enough: you still deliver an entire ear, you do not handle multiple versions of the same application, you get worried by transitive depedencies for third parties, communication between ear are remote calls. S2AP takes a real new approach. It provide separation/decoupling and allow integration betweens components without remote call (yes, this can be discussed : RPC and AOP proxy vs web service and remote calls). IMHO, this is why we are talking about application platform and not application server as it provide support for multiple components tightly coupled which are all belonging to the same application.

Various technologies tried to hide (or abstract) the fact a method call was remote or not. this is clearly a mistake. Remote calls are integration points, local calls are not. Integration points are fragility and low performances points. Developers and architects must be aware of all of them to ensure reliability and good performances. More over, developping applications mostly based on remote calls is an error and should raise a red flag. With S2AP we get a new approach which keep capabilities of regular applciation server. From a PaaS point of view, it is a significant technolgy jump (we will see the Microsoft response with Oslo project), and an instance of S2AP will be used to deploy all the applications of the SaaS vendor.

Those who read a previous post on my vision of PaaS, could argue S2AP is far from the Software Factory approach. I agree, but S2AP present at least one interesting characteristic: the hot deployment. This is an essential piece of technology to allow deployment of components. The next step are to better project management and source control management capabilities (a kind of mavenization), and allow deployement from one S2AP to another. This way a developper could have it’s S2AP instance to develop (and test) applicitions, then automatique deployment on the S2AP production system. Of course, this last step requires far more than just a hot deployment capabilities…but at least we have the key technological piece. More over all this inetgrations (SCM, PM, Eclipse, test and deployment) can be developed out of S2AP…I hope a lot of satellite projects will appear in that area.

 To conclude, S2AP is a very interesting opportunity for PaaS as it allows a decoupling and componentization of applciations inside a platform and not inside an ear.

Apr 29

Every change in software code base is at risk. This risk is high or low depedending on the maintenability of your code, its simplicity and the knowledge of it by developers.
What about 3rd party?
Most of the development team are now reusing tones of open source 3rd parties. This is not a problem in itself, if you manage the impact on the software…but it’s at least more risky than on you own code base.
Usually, the source of the problem is a misunderstanding in the usage of an API or a class. Don’t blame on dev team, its really tricky in some cases to detect such problems. Trying to guess before the change if a new version will be compatible is simply unfeasable. That being said, there is only 1 choice: test your application. Of course if you have tons of automated tests…that will be much easier.
I defenitely think that automates test is getting more and more important. The usage of 3rd parties which is grown every year, is another clue.

Mar 28

I’ve read the post from Eric Lippert on Fabulous Adventures In Coding , describing what’s the “real work” behind 5 minute of development at Microsoft:

  • One dev to spend five minutes implementing ChangeLightBulbWindowHandleEx.
  • One program manager to write the specification.
  • One localization expert to review the specification for localizability issues.
  • One usability expert to review the specification for accessibility and usability issues.
  • At least one dev, tester and PM to brainstorm security vulnerabilities.
  • One PM to add the security model to the specification.
  • One tester to write the test plan.
  • One test lead to update the test schedule.
  • One tester to write the test cases and add them to the nightly automation.
  • Three or four testers to participate in an ad hoc bug bash.
  • One technical writer to write the documentation.
  • One technical reviewer to proofread the documentation.
  • One copy editor to proofread the documentation.
  • One documentation manager to integrate the new documentation into the existing body of text, update tables of contents, indexes, etc.
  • Twenty-five translators to translate the documentation and error messages into all the languages supported by Windows.The managers for the translators live in Ireland (European languages) and Japan (Asian languages), which are both severely time-shifted from Redmond, so dealing with them can be a fairly complex logistical problem.
  • A team of senior managers to coordinate all these people, write the cheques, and justify the costs to their Vice President.
  • And I garrantee this is not a joke…this is true. During my short carrier in software development, I’ve seen all size of software companies: from 6 to more than 7000. I’ve seen this only in large companies, so what startup (I guess we can also apply this to Open Source) companies are doing to handle this? They simply dont care and don’t do it.

    Jeff Atwood comment also on this in his post Is Eeyore Designing your software saying that startup and Open Source do not have all this development process.

    What is the rational for such heavy process? I guess at least 2 reasons: type of customer and sofware development vision.

    Some of the large companies are targeting large customer (Fortune 500 for example) to sign for large deals. These customers are world wide companies, so the localization is key to close a deal. The documentation is also important. They also emphasis standards in their selection criteria as 508 compliance for US governement. Thay also have technical schemas as for example allowed operating systems or supported application servers.

    The software development vision of large software companies is also an industrial view: be predictible through control and strong processes. It’s very common to hear people saying:

    • You can’t manage what you can’t measure.
    • You can manage quality into a software product.
    • Software needs more methodologies.

    These are part of the fallacies highlighted by Jeff Atwood (yes again) in his impressive post on Revisiting The Facts and Fallacies of Software Engineering.

    I had a boss who was questioning : “Why building software is no as simple as making a car?”. He was refering to the ability to deliver a product on time with good quality…which is very rare in software delivery. First, making a car is not so easy, but I agree from an external point of view, it seams more predictable et cars more robust than softwares. The main reason is that software development echosystem is evolving a lot and quicker than car making technologies. The tools are always changing, every month some new technologies appears, even languages, methodologies also are evolving a lot. To gain predictibility, large software company are enforcing processes that decrease drastically productivity.

    Mar 13

    turn-back.jpgXML had its buzz periode 8 years ago, everybody rush on it to store information. It followed the hype curve, some technologies as RDBMS based on XML simply crashed, other as DTD has been replaced and finaly had been adopted by all the community.

    Then it became the obvious solution to many problematics…maybe too much. I talked about this in a previous post on Why not coding in XML? (sorry about this one which in french). Coding in XML is simply a bad idea and BPEL is a good example of that overuse. I share the opinion of Jonas Fagundes when he sais in his post The misunderstood Maven:

    “The weakest point in ant IMHO is to use xml to define the targets, for me xml is for data, I never liked programming in xml”

    We start to see initiatives that try to readjust this.

    Ant is a very good example where I think XML is not accurate. Ant is a tool that replace our old make files. Its aim is to execute commands to build a software (and much more, as deploymeny, test…etc). It is a knid of language, you have commands (functions), properties (variables), and conditional for commands (a kinf of “if” statement). Even if writting ant xml file is quit simple, for complex project with multiple tiers of different kind, and tests…this start to become a mess and you feel the need for best-practices.

    I think the xml is not the right support to write code, and some open source projects goes into that direction as gant, Rake and Bake for example…this is the arrival of coding over XML…hence DSL.

    Feb 19

    images.jpgI’m having at look a GRails 1.0.1. I get a little problem after setup and here is a little trick to help you if you encounter the same kind of problem.

    So I installed version 1.0.1 that you can download here. I’ve set up the environment variables and launched “grails” on the command line.

    At that point I get some weird message as “Xxxx was unexpected at this time”. This was due to my JAVA_OPTS. To find the problem, just setup the DEBUG environment variable to anything you want.

    This way you will see the content of the batch command executed and will be able to find the root cause of your problem.