Montag, 31. Dezember 2007

Jahresrückblick 2007

Tja, was hat das Jahr 2007 gebracht? Viele, viele praktische Erfahrungen mit Scrum, an die 30 Sprints in 4 Projekten und damit verbunden ca. 30 mal Estimation und Retrospective. Zahlreiche User Stories, Features, Releases und viele neue Erkenntnisse, die nicht nur die Software Enwicklung betreffen. Rückblickend kann ich sagen, dass das gesamte Jahr mit agilem Arbeiten für mich persönlich eine absolute Bereicherung darstellt - job enrichment pur!
Meine Erfahrungen und Erkenntnisse, sowie einiges an Tool Know-How und sonstige gesammelte Werke habe ich auf meine Blog zusammengetragen - und so ist es angekommen ...

Hier die Top 10:
10: User Acceptance Testing, 73 Unique page views
9: iSBB - SBB Fahrplan auf dem iPod, 73 Unique page views
8: Stub vs. Mock, 76 Unique page views
7: Archiv von März 07,88 Unique page views
6: Label-Suche nach User Story, 100 Unique page views
5: Maven 2 Einführung, 111 Unique page views
4: Best practise: Daily Scrum mit Excel, 130 Unique page views
3: Scrum- Was ist Scrum? Wie funktioniert Scrum?, 169 Unique page views
2: 2-tier continuous integration testing, 196 Unique page views
1: Lotus Notes 8 auf Ubuntu installieren, 387 Unique page views

Mein Blog wird hautsächlich mit den Keywords: scrum, scrum user story, trac scrum, scrum excel, inside-scrum, scrum systemarchitektur und vielen mehr gesucht und gefunden.

Insgesamt gab es 4'784 Visits, 7'672 Pageviews, 1.6 Pages/Visit und 00:01:34h Avg. Time on Site.

Ganz besonders bemerkenswert fand ich allerdings, dass ich es mit meinem Gastbeitrag zum Thema Scrum auf dem Blog von Markus Tressl auf Platz 1 geschafft habe ...

Freitag, 7. Dezember 2007

Ajax in Action V

In meiner Serie "Ajax in Action" habe ich bereits beschrieben, wie man
  • modulare Seiten mit Spring MVC und DWR baut
  • mit DWR von einander abhängige GUI- Komponenten updated
  • locale spezfische Messages im JavaScript anzeigt.
In diesem Beitrag geht es um Validierung:

Wo wird valdiert? Beim Client, beim Server, bei beiden?

Klar ist, dass eine Hybrid-Lösung bei der Validierung nicht anzustreben ist, da man die Valdierungslogik auf Client und Server verteilt - nicht wartbar.

Auf dem Client mittels JavaScript valdieren hat viele Vorteile, aber auch Nachteile, wobei reine serverseitig Valdierung technisch zwar optimal, sich jedoch schlecht auf die user experience auswirkt.

Optimal wäre es, wenn man die Valdierung serverseitig erledigen könnte, diese allerdings mittels AJAX asynchron durchführen würde, um dem Benutzer lästige POSTBACK Szenarien zu ersparen.

Für Spring MVC gibt es hierfür eine sauber Lösung, basierend auf dem Validator Muster von Spring - der Artikel von Eric Spiegelberg "Ajax Form Validation Using Spring and DWR" erklärt, wie.

Ich möchte der Lösung allerdings eine Schwachstelle zugestehen - Locale Resolving! Der Ansatz von Eric Spiegelberg setzt voraus, dass bei der serverseitigen Validierung die Locale über den ThreadLocal geführt und mit LocaleContextHolder.getLocale() abgerufen wird, was in einem reinen Spring Container möglich ist.


Oft ist es allderings so, dass das Locale Resolving für Valdierungsfehler nicht am ThreadLocal aufgelöst werden kann, sondern nur im Client - der Server kennt die Locale des Clients nicht, beispielsweise bei folgendem DWR call:
./dwr/call/plaincall/cartManager.getCart.dwr

Ein mögliche Lösung wäre, das Locale Resovling nicht auf dem Server durchzuführen, sondern so wie meinen vorherigen Artikel per JavaScript.

Eine andere, vielleicht technisch optimaler Lösung wäre, das man beim DWR call die Language übermittelt um diese an den ThreadLocal zu heften.

Donnerstag, 6. Dezember 2007

SBB Fahrplan auf dem iPod als Kalendar

Ich habe vor gut einem halben Jahr hier auf meinem Blog eine Lösung präsentiert, wie man einen SBB Fahrplan auf einen iPod bringt.

Die SBB hat jetzt ein Feature auf der Online Fahrplansuche, mit dem man ein Kalendar File (iCal/ics) runterladen kann. Jetzt ist es demnach viel einfacher, als bei meiner umständlichen Lösung vom März, die sich bis heute bewährt hatte.

Jetzt kann man einen Verbindung suchen und mit als Kalendar runterladen und per iTunes auf den iPod synchronisieren. Nicht schlecht!

Und wenn man jetzt noch seinen persönlichen Fahrplan als Kalender runterladen könnte, dann wäre das grandios, denn als Pendler bin ich nicht an einer einzigen Verbindung interessiert, sondern an einem ganzen Verbindungsprogramm.

Noch ein persönlicher Tip: Wenn man den SBB Fahrplan Kalendar in Google Kalendar importiert, dann kann man sich per SMS (gratis) noch 5, 10, oder 15 min vorher benachrichtigen lassen - nie wieder einen Zug von hinten sehen!

Got a Mac!

Also gut, ich hab' mir einen Mac gekauft...

Vor ca. 3 Wochen hat Apple die MacBook 13" mit 2.2Ghz CPU's und Santa Rosa Chipsatz aufgerüstet, silent update - versteht sich. Dank diverser Blogs bekommt man das als potenzieller Mac Käufer dennoch mit ...

Naja, ich also schnell zu Letec, dem Apple Authorized Reseller in St.Gallen, und bestellen! Nach 7 Tagen war schon abholbereit und da ist er ...

Der Dell Latitude D620 auf meinen Tisch sieht ganz blass aus vor Neid und ist mal eben an die Tischkante verschwunden - er meldet sich auch nicht mehr. Ich glaub er ist bockig :-)

Was mach ich mit dem Mac: in erster Linie Software Entwicklung im Bereich von Webapplikationen, die mit Java, JavaScript, Ruby oder Groovy realisiert werden.

Tools, die ich verwende:
- Eclipse IDE for Java EE Developers (Europa Release) mit Subclipse Plug-in
- SVNClient/ Console
- CCMenu für Continuous Integration Server Status Info's
- Cisco VPN Client (4.9.01), wenn ich mal HomeOffice mache

und das war's auch schon. Bisher bin ich mehr als zufrieden -einfach eine andere Welt - einfach ein anderes Arbeiten, wobei Ubuntu (mein bisherigs OS auf dem Dell) nicht weit entfernt ist.

Ach ja, ich hab noch 4 GB Ram reingetan, denn mit 1 GB ist das Arbeiten mit Eclipse schon ziemlich mühsam.

Guten und günstigen RAM gibts hier.

CCMenu 1.0 released

Bevor ich vor ca. 2 Wochen von Ubuntu auf Mac umgestiegen bin, habe ich nach einem Tool gesucht, dass mir in irgend einer Form den Status des Continuous Integration Servers (CruiseControl) anzeigt, so wie bespielsweise CCTray für Windows.


Ich hatte bereits von CCMenu gehört und darüber geschrieben - jetzt ist CCMenu Release 1.0 raus und ist einfach empfehlenswert!

Der Entwicker ist übrigens Erik Doernenburg, den ich dieses Jahr auf TheServerSide Java Symposium Barcelona zum Thema "Test Driven Development" gehört habe.

Mittwoch, 5. Dezember 2007

namics Scrumbreakfast

Heute war das zweite Treffen der Scrum Community bei der namics in Zürich. Zu diesem Anlass habe ich auf meinem Blog zum Erstaunen festgestellt, dass das Timing von Goolge perfekt ist:


Diese Google Anzeige wurde heute auf mein Blog angezeigt!

Danke Google

Agiler Prozess

Gestern habe ich an einem Workshop teilgenommen, bei dem man der Frage nachgegangen ist, wie man den Designprozess agilier machen kann.

Hintergrund der Fragestellung ist die Annahme, dass der gesamte Entwicklungsprozess bei aller Agilität mitunter ein sequenzieller Prozess ist bezüglich der vor- und nachgelagerten Arbeiten.

Ein Beispiel aus der Automobile-Welt soll vernanschaulichen, welcher Problematik man auf den Grund gehen möchte: Jeder kennt die grossen Automobil Salons in Genf, Frankfurt, Japan und Chicago. Jeder weiss auch, dass dort die Hersteller um die Gunst der Kunden buhlen und daher mit ganz besonderen Exponaten ausstellen - ShowCar's oder ConceptCars.

Die Designer solcher Automobile möchten bewusst neue, andere Wege beschreiten, um ein Auto zu entwickeln, dass die Zukunftsvisionen abbildet und das Mögliche und Machbare aufzeigt und die Message einer Marke nachhaltig unterstreicht. Niemand würde ernsthaft annehmen, dass ein solches Show oder Concept Car so produziert wird, denn sie sind lange nicht produktionsreif.

Wie dem auch sei, der Zulauf am Stand X auf dem Genfer Autosalon der Marke Y ist so hoch, dass man sich bei der Marke Y doch entscheidet, den ausgestellten Wagen zu bauen, denn viele potenzielle Kunden haben danach gefragt: "Wow, der Wagen ist grandios - wann kann man ihn kaufen?"

Der Rest ist Geschichte: nach mindestens 7 Jahren Entwicklungsarbeit kommt am Ende ein Wagen auf den Markt, der technischen, gesetzlichen, ökonomischen und ökologischen Gesichtspunkten und vielem mehr Rechnung tragen muss.

"Das ist nicht der Wagen, denn ich kaufen wollte. Wo ist der tolle Wagen den man damals präsentiert hat?"

Was ist passiert? Wie bei der Automobilproduktion ist auch die Softwarentwicklung letztendlich ein sequentieller Prozess, bei dem die Experten erst in der jeweiligen Produktentwicklungsphase in Spiel kommen. Die Ingenieure der Marke Y werden zahlreiche Veränderungen am Design vornehmen müssen.

Der Prozess bei der Entwicklung einer Webapplikation ist oftmal dieser:
Usability-> Design-> HMTL-Produktion-> Software Entwicklung-> Consulting.
Ein Wasserfall eben, bei dem zwischen jeder Prozssphase Iterationen an der Tagesordnung stehen. Bei einigen Phasen ist der Kunde anwesend, bei anderen nicht. So kann es vorkommen, dass auch hier sehr spät in der Realisierung erkannt wird, dass die Vorgaben von Usability nicht umsetzbar sind. Beim Kunden wird sich häufig der selbe Effekt einstellen, wie bei den Automobil-Kunden aus dem geannten Beispiel.

Wie können wir der Lage Herr werden? Im Workshop wurde erarbeitet, dass man zunächst zu Begin eines agilen Projektes alle Prozessbeteiligten für einen Tag an einen Tisch bringt und dort auf die Vorgehensweise und Arbeitsinhalte der jeweiligen Kernkompetenz eingeht und an einem Muster durchspielt. Ziel ist es, so Verständins für vor- und nachgelagerte Prozesse zu erlangen und die Kommunkiation und damit die Zusammenarbeit zu fördern.

Dienstag, 4. Dezember 2007

Scrum - Agiles Projektmanagement von Kerstin Bücher

Frau Bücher hat auf der Seite gfwm - Gesellschaft für Wissensmanagement - den Artikel "Scrum - Agiles Projektmanagement" veröffentlicht, der auf die Geschichte von Scrum, Funktionsweise und Kursangebote eingeht.

Bei der Recherche hat Frau Bücher meinen Blog aufgesucht, bei del.icio.us getaggt und inside-scrum unter "Weitere Informationen" genannt.

Vielen Dank!

Ajax in Action IV

Im vorherigen Post in der Serie Ajax in Action habe ich beschrieben, wie man mit AJAX in GUI Komponenten nachladen kann.

In diesem Beitrag geht es darum, locale spezifische Messages im Client auszugeben. In vielen Büchern, z.B. Ajax in Action, findet man immer wieder ein Kapitel Exception Handling, was aber nur das Handling ansich aufzeigt, nicht aber, wie man lokalisierte Messages realisert.

Beispiel: Ajax in Action, Seite 464, Listing 1:

handleError: function(request) {
 if (this.options.messageSpanId) {
  document.getElementById(this.options.messageSpanId).innerHTML=
   "Opps! Server error. Please try again later.";

Soweit - so gut. Aber wie realisert man jetzt, dass die Message in DE/FR/IT/EN lokalisiert wird?

Ich persönlich schau immer gern was Microsoft so macht, denn die Lösungen sind meistens sehr gut durchdacht und funktionieren auch!

Gesagt - getan - gegoogled: Adding Localized Resources to a JavaScript File.

Ich hab die Idee ein bischen verändert und komme zu folgendem Lösungsansatz:

Die Seiten, die eine JavaScript Message lokalisieren müssen bekommen einen script include, z.B:

<script type='text/javascript' src='/myapp/js/resources.js'></script>

Im JavaScript wird folgendes definiert:

Error={
"InputNotValid":"Sie haben ein ungültigen Wert eingegeben.",
"ServerError": "Der Service ist momentan nicht verfügbar."
};
Message={
"Loading":"Bitte warten…"
};

Dieses resources.js steht die Default Locale bereit. Zusätzlich wird im HMTL Code weiter unten noch das sprachspezifische resource.js geladen. Da JavaScript überladen unterstützt, können im sprachspezifischen File die Werte neu definiert werden. Werden sie nicht definiert, greift die Default Language:

<script type='text/javascript' src='/myapp/js/resources.en-GB.js'></script>

Das JavaScript sieht dann so aus:

Error={
"InputNotValid":"Your entered value is not valid."
};

Message={
"Loading":"Loading…"
};

In diesem Fall würde das englische Resource File den Error.ServerError nicht definieren und somit den Default aus resources.js verwendet.

Wie wird das nun verwendet? Am Beispiel vom "Loading" wird die Message.Loading im div loadingMsg so verwendet:

<script type="text/javascript">
function addItemToCart() {
 document.getElementById('loadingMsg').style.display = 'block';
 document.getElementById('loadingMsg').innerHTML = Message.Loading;
 var id = dwr.util.getValue("id");
 var q = dwr.util.getValue("quantity");
 cartManager.addItemToCart(id,q);
 return;
}
</script>


Lokalisierte Messages im JavaScript - gelöst!

Ajax in Action III

Im vorherigen Post aus der Serie Ajax in Action habe ich verschiedene Lösungsalternativen für module Ansätze mit Spring MVC beschrieben und die Lösung favorisiert, die mittels AJAX a la DWR GUI-Komponenten nachlädt.

In diesem Artikel wird Lösungsalternative 3 genauer beschrieben und kritisch hinterfragt.

Wir möchten folgende GUI Komponente per DWR an den Server schicken:

Artikelnummer: 12-38872662

Artikelbeschreibung, Grösse, Farbe, Preis. etc.




Anschliessend soll sich der Warenkorb im GUI neu auszeichnen und den/die neuen Artikel anzeigen, alles ohne POSTBACK. Wir brauchen also einen DWR Bean, was den ASYNC Call abarbeitet: CartManagerAdapter.

public class CartManagerAdapter {
public void addItemToCart(String pk, int quantity) {
// call service to add the item
}
}

Und eine Spring-enabled DWR Konfiguration hierzu:

<dwr>
<allow>
<create creator="spring" javascript="cartManager">
<param name="beanName" value="cartManagerAdapter" />
</create>
</allow>
</dwr>

Dazu hängen wir eine eine JavaScript Methode an den submit Event:

<input type="button" name="submit" value='add to cart' onclick="addItemToCart()" />

und definieren folgende JS Funktionen:

<script type="text/javascript">
function addItemToCart() {
document.getElementById('loadingMsg').style.display = 'block';
var id = dwr.util.getValue("id");
var q = dwr.util.getValue("quantity");
cartManager.addItemToCart(id,q,addItemToCartCallback);
return;
}

var addItemToCartCallback = function() {
getCart();
document.getElementById('loadingMsg').style.display = 'none';
}
</script>

Damit unser Warenkorb sich nach dem callback neu auszeichnet, rufen wir getCart() auf um folgendes zu tun:

function getCart() {
cartManager.getCart(getCartCallback);
return;
}

var getCartCallback = function(cartBean) {
var text = '<ul>';
for(i = 0; i < cartBean.cartBeanEntries.length; i++) {
text += '<li>';
text += cartBean.cartBeanEntries[i].quantity;
text += 'x ';
text += cartBean.cartBeanEntries[i].name;
text += '</li>';
}
text += '</ul>';
document.getElementById('cart').innerHTML = text;
}

Die CartManagerAdatper Klasse wurde dafür um die Methode getCart() erweitert:

public class CartManagerAdapter {
...
public CartBean getCart() {
return getCartService().getCart();
}
}

Wenn man diesen Prototyp nun kritisch hinterfragt kommt man zu folgenden Punkten:

  • Man umgeht Spring MVC durch den Einsatz von DWR

  • Es gibt kein Binding + Validation durch Spring -> man muss das selbst veranlassen

  • Viel JS Scripting

  • Validation und sonstiges Error-Handling muss gescripted werden

  • Serverseitige Zustandsinformationen müssen bei jedem Roundtrip über die AJAX Engine geliefert werden, z.B. authentiated principal

  • MVC besteht nicht mehr - Paradigmawechsel!


Man muss ich sich sehr gut überlegen, wo und in welchem Umfang man AJAX einsetzen möchte. In diesem Prototyp kommen wir zur Erkenntnis, dass man MVC aushebelt und damit Kernfunktionen, die Spring MVC mitbringt nicht nutzen kann, d.h. man muss diese selbst implementieren. Am Ende baut man viel um Infrastukturprobleme zu lösen, nicht aber das Business Problem.

Trotzdem soll der Prototyp weiter untersucht werden, denn es ist noch nicht klar, wie ein Exception Handling abgebildet werden soll. Dazu mehr im kommenden Post.

Ajax in Action II

In Ajax in Action Teil I habe ich die Problematik des Seitenaufbaus mit Spring MVC + JSP's angesprochen.

Hier soll das Problem und der Lösungsansatz genauer aufgezeigt werden.

Problem:

Mit JSP 1.2 gib es kein Komponenten-Model im GUI, was sich auch mit Spring MVC nicht lösen lässt. Grundsätzlich besteht ein Seite immer aus mehreren, logisch unabhängigen, Modulen.
Beispiele: User-Informationen, Navigation, Warenkorb und ein Produktdetail mit Add to cart Funktion.














Natürlich kann man eine solche Seite in Fragmenten zerlegen, z.B. mit Apache Tiles. Das löst jedoch nicht das Problem, sondern schaft lediglich eine Möglichkeit der Wiederverwendung auf HTML Ebene. Problematisch ist nämlich, wie man das Model (JavaBean) baut und wann und wie man es an die View bindet.

Nehmen wir an, es gibt ein UserBean:

public class UserBean implements Serializable {
private String name,lastname,email;
...
}

und ein CartBean:

public class CartBean implements Serializable {
private long subTotal;
private Collection cartItems;
...
}

und ein ProductDetailBean:

public class ProductBean implements Serializable {
private String id, name, code, description;
...

Dazu gibt es eine Tiles2 View-Defintion:

<definition name="productDetail" extends="publicPage/template">
<put-attribute name="content" value="/WEB-INF/views/productdetail.jsp" />
<put-attribute name="pagetitle" value="Product Detail" type="string" />
</definition>

Nun die eigentliche Frage: Wie sieht der Controller aus und wie das ViewBean?
Da wir kein submit nach MVC auslösen wollen gibt es einen simplen AbstractController:

public class ProductDetailController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception
Map refData = new HashMap();
// call service to get the model object
refData.put("command", service.getProductDetail());
return new ModelAndView(getFormView()).addAllObjects(refData);
}

Bisher haben wir folgendes: Ein Controller, der ein Model lädt und an die View "productDetail" übergibt. Die View wird per Tiles zusammengebaut. Jedes Tile in Form einer JSP hat nun Zugriff auf unser Model unter dem Namen "command". Demnach muss unser Controller ein Model liefern, dass allen Tiles Fragementen gerecht wird.

Wie sieht nun das Model aus?

1. Lösung:

Man baut ein Model pro View in Verbindung mit einem Controller - ProductDetailViewBean + ProductDetailController für "productDetail" View. Das ProductDetailViewBean ist ein Composite aus folgenden Objekten: UserBean, ProductDetailBean und CartBean. In den jeweiligen Tiles wird wie folgt zugriffen:

Guten Tag ${command.userBean.name} + ${command.userBean.lastname}!
Sie haben ${command.cartBean.items.count} Produkte im Warenkorb.

Nachteile:
  • Der Controller muss unter Umständen mehrere Serviceaufrufe tätigen, bis er das ViewBean korrekt erzeugt hat.
  • Der Controller + ViewBean kennen den Context ihrer Existenz in der View.
  • Der GUI Entwickler kann auf jedem Tile in jedem JSP direkt alle Attribute des command Objects zugreifen.
  • Eingeschränkt wiederverwendbar.

2. Lösung:

Man gibt der View "productDetail" nur das ProductDetailBean als command Object zurück und alle anderen referencing data unter einem anderen Key, z.B.

refData.put("user",userBean).


Nachteile:
  • Der Controller ebenso mehrere Serviceaufrufe tätigen.
  • Der Controller kennt den Context und muss alle notwendigen Beans als referencing data bereitstellen.

3. Lösung:

Der Controller liefert nur das command Object ProductDetailBean an die View zurück. Die anderen Komponenten, z.B. User-Informationen, Warenkorb etc. laden sich selbst mittels AJAX/DWR nach.

Diese Lösung entkoppelt den ProductDetailController, sodass dieser keine contextspezifischen Beans in die View reichen muss.

In diesem Fall ist Lösung 3 zu empfehlen.

Montag, 3. Dezember 2007

Ajax in Action

Ich arbeitet gerade in einem Projekt, wo man noch nicht genau weiss, mit welcher Technologie man die Anforderungen implementieren wird.

Es geht darum einen Web-Shop zu implementieren, der sich anfühlt und aussieht wie eine Desktop-Applikation. Man möchte Funktionen des Shops weitestgehend ohne klassischem POSTBACK abbilden. Bisher gehen wir von folgendem Technology-Stack aus:
  • Backend: Springbasiert Java Applikation (Services und Datenbankanbindung in 2 Schichten: Service und DAO Layer)
  • Frontend: Spring MVC (RESTful) mit JSP's, DWR
Um sicherzustellen, dass der Technlogy-Stack so zusammengesetzt werden kann, haben wir ein Feature ausgewählt und in einem Prototyp implementiert:

"Der Benutzer kann ein Produkt in den Warenkorb legen." (Constraint: Anzahl muss angeben werden.)

Da wir in erster Linie eine desktopähnliche Oberfläche gestalten wollen, haben wir diese Funktion per asynchroner Kommunikation vorgesehen. Die Seite soll sich so verhalten: Beim Klick auf den "In den Warenkorb" Button wird asynchron ein Submit ausgelöst und anschliessend der Warenkorb neu ausgezeichnet - alles ohne POSTBACK.

Nach kurzer Überlegung wurden schnell folgende Punkte als Probleme erkannt:
  • Mit Spring MVC + JSP gibt es kein GUI Komponentenmodell, also wie wird eine Seite zusammengebaut?
  • Kann und wird uns Spring MVC bei Validierung, Binding, ResourceResolving und Exception Handling in Verbindung mit DWR behilflich sein?
  • Spring MVC + DWR + RESTful ??? Wiederspricht sich das nicht grundsätzlich?
In den kommenden Tagen werde ich die Ansätze dokumentieren und kritisch hinterfragen. Input ist gern willkommen ...

Scrumbreakfast: Projektverwaltung mit Target Process

Der Scrumbreakfast ist ein regelmässiges Treffen für CIOs, strategischen und operativen Projektleitern, die entweder Scrum einsezten oder Scrum einsetzen wollen.

Der erster Scrum Breakfast fand in November bei namics in Zürich statt. Wir waren 10 Teilnehmer, etwa 50/50 geteilt zwischen aktuellen Scrumnutzer und möchte gern Scrumnutzer. Nach einem (mehr oder minder kurzem) Vortrag haben wir dann auch untereinander Erfahrungen und Informationen rund um Scrum und Softwareentwicklungs-Projekte austauschen können.

Nächster Anlass:
Jean-Pierre König, Senior Software Engineer bei namics ag und Verfasser von Inside Scrum gibt uns eine Hands-On Einblick in Target Process. TP wird seit etwa 3/4 Jahr bei namics für die Verwaltung von agilen Projekte eingesetzt. Damit kann der Scrum-Master sämtliche Aufgaben rund um ein Scrumprojekt verwalten und Team-Mitglieder können ebenfalls ihre eigene Aufgaben im Projekt pflegen.

Themen:
  • Estimation
  • Planning
  • Daily Scrum
Anschliessend gibt es Fragen, Diskussion und Erfahrungsaustausch.

  • Wann: 05 Dec 2007, 08:00 am -- 10:00 am (Vortrag 8.35 bis 9.00)
  • Wo: City/Location Konradstrasse 12, 8005 Zürich
    2 minutes from Zürich HB near Tram stop Sihlquai/HB

Anmeldung per E-mail an peter.stevens@namics.com oder per Xing Event.

Project Zero Videos

ProjectZero bringt Video's auf YouTube!



* Installing Project Zero for Eclipse
* Installing Project Zero For Command Line Usage
* Hello World: Building a Simple Application
* Getting started with Zero Assemble Flow
* Creating a simple RSS Aggregation flow
* Assemble Store Demo