luni, noiembrie 21, 2005

Third party versus in house

In primul rand sa lamurim notiunile:
third party - insemana un produs care este folosit de cineva dar el este realizat de catre altcineva
in house - insemna un produs realizat local si folosit pe plan local

Explicatii

Prin produs in acest caz vom intelege o librarie, un framework, o componenta, etc. Trebuie facuta o distinctie intre produse ca atare pe care le folosesti ca utilizator final, si produse pe care le folosesti drept cod pe care il integrezi in aplicatia ta (mai explicit, integrare la nivel de surse). Anterior ma refeream la a doua categorie. Spre exemplu e una sa folosesti OpenOfice si alta sa folosesti Struts. Struts este un framework (nu ii vom spune API prin faptul ca framework-ul are controlul fluxului aplicatiei si difera prina sta de un API - librarie) care este folosit de aplicatii la nivel de cod. OpenOfice e un produs care se adreseaza utilizatorilor finali.

Drept exemplu, o firma poate realiza in house un framework Web de tip MVC in loc sa foloseasca Struts care este un framework third party care are acelasi scop.

Drept alt exemplu clasic vor face referire la Spring. Spring este un framework de middleware. E un container usor bazat pe pattern-ul dependicy injection care permite J2EE without EJB. De asemena, serviciile sunt oferite componetelor gestionate de container prin AOP. Pentru a realiza J2EE without EJB, multe firme au dezvoltat propriile lor librarii care sa-i ajute in dezvoltare. In general librarii de servicii generice: pentru securitate, gestiunea tranzactiilor, etc.

Diferente
E mai greu sa intelegi ceva ce au facut altii. Este asa zisa curba a invatarii care in de la caz la caz poate fi extrem de abrupta. Ai destul timp sa intelegi ce au facut altii? Dar ceea ce au facut altii poate fi mai bun decat poti face tu. Ei au facut asta inainte ca tu sa te gandesti cum se face. Si poate s-au specializat chiar, in asta!?

Ce au facut altii poate sa se suprapuna doar peartial peste ceea ce vrei tu. Cea ce au facut altii se poate personaliza pe nevoile tale? sau e mai usor sa consstruiesti totul de la inceput, doar inspirandu-te din ce au facut altii?

Tu ar trebui sa te abati de la lucrul tau pentru a implementa asta. In general un produs este o generalizare a unor experiente. Spre exemplu tu dezvolti un framework de autentificare care e o incercare de a standardizare si fixare a problemelor de securitate intalnite. Cand implementezi prima oara securitatea tu nu ai avut astfel de experiente. A implementa acest aspect poate reprezenta un lucru in sine. Esti dispus sa pierzi acest timp?

Daca produsul este unul third party si open source in acelasi timp, in jurul lui se va aduna o comunitate de dezvoltatori, care vor contribui la cresterea lui. Produsul va avea o lista de discutii, o arhiva de email-uri, un forum, un inssue tracker, un site de prezentare, un wiki, etc. Deci si o documentatie bogata, bazata pe experientele celor care il folosesc.

Un exemplu fericit de firma (australiana) care a avut succes folosind doar produse open source third party este Attlasian care a dezvoltat si inca mai dezvolta doua produse JIRA si CONFLUENCE, folosite de gigantii IT gen IBM, etc. Jira este un bug tracker, poate cel mai complex realizat in Java. Confluence este un sistem de lucru distribuit bazat pe wiki pages. Aceste produse sunt realizate exclusiv cu librarii, componente, framework-uri open source. Atlassian ofera Jira si Confluence free pentru comunitatile open source. Un astfel de exemplu este OpenSymphony .