Monthly Archive for november, 2007

SpecGen Tool – ny smart applikation til Axure

Faster Generation, More Options, and Easier Formatting! For en gangs skyld en salgsoverskrift, der ikke lover mere end den kan holde.

SpecGen Tool er en af de første applikationer jeg har set efter udgivelsen af et API til designværktøjet Axure. Det handler i korte træk om muligheden for at generere en skriftlig specifikation af en dynamisk prototype. Axure har en indbygget funktion, der kan spytte samtlige sider over i Word inkl. screendump, feltannoteringer, noter samt beskrivelse af interaktion (såfremt man har været en dygtig interaktionsdesigner og udfyldt felterne). Det ærgerlige er, at den indbygge funktion er laaaaangsom og at det færdige resultat langt fra er kønt.

Det nye program giver, som overskriften indikerer, mulighed for hurtigere generering, flere designmuligheder og nemmere formattering… og det kan vi jo godt lide! Derudover er programmet gratis og således et godt eksempel på, hvad man kan få ud af at stille et API til rådighed.

Videoen nedenfor er nuppet fra Axure-sitet og viser SpecGen Tool’et “in action”:

Extending the native behavior of HTML elements in Internet Explorer

Extending HTML elements with custom methods using prototyping have long been supported by FireFox. Although it’s not a particularly common feature to use it can be very useful in a variety of situations.

Say we want to provide a single method for expanding and/or collapsing items in a list. In IE we can do something like

var collection = document.getElementsByTagName(‘ul’);
for(var i=0; i<collection.length; i++)
  collection[i].expandCollapse = someFunction;

In Firefox however you can achieve the same effect simply by extending the HTMLUListElement object as in
HTMLUlistElement.prototype.expandCollapse = someFunction;

In this instance all UL objects will have the same event handler. This is true for all UL objects created prior to the declaration and any subsequent created UL objects. If we change the function at runtime it changes for all UL objects, not just the ones created after the change. The first part is really pretty simple to mimic while the second is much harder.

Part 1

We want to have a mechanism for extending an element with custom methods. The mechanism should be transparent to the programmer as to not require any special syntax or semantics. In short it should be unobtrusive. The element inheritance hierarchy for documents is as follow

A specific element, say a DIV element inherits from the generic HTMLElement. This in turn inherits from the Element object which inherits from the Node object which finally inherits from the Object object.

We do not need to replicate the entire inheritance chain in order to achieve what we want. It might be useful for more complicated task to extend the inheritance but for now I’ll just work with the HTMLElement and HTMLDivElement objects. First we define a HTMLElement object

function HTMLElement() {
}

It’s not meant to be instantiated but we need a prototype object to inherit from. Second we define a specific object

function HTMLDivElement() {
}

which inherits from HTMLElement as

HTMLDivElement.prototype = new HTMLElement();
HTMLDivElement.prototype.constructor = HTMLDivElement;

Now we can extend any HTML element by defining functions in the HTMLElement.prototype object as

HTMLElement.prototype.forAll = function(){alert(‘This function is defined for all elements’);};

or we can extend solely a specific element as in

HTMLDivElement.prototype.forDiv = function(){alert(‘This function is only defined for DIV elements’);};

or we can define both.

While this just defines our inheritance chain it does not extend the elements in a document. To do this we must first redefine the native document.createElement method. We do this simply be saving a reference to the original one and defining our own

// Our namespace
var EPE = {}
// Save reference to native method
EPE.IECreateElement = document.createElement;
// Declare our own
EPE.createElement =
  function(tag) {
    var el = EPE.IECreateElement(tag);
    EPE.extendElement(el);
    return el;
  };
// Must be assigned after the declaration of EPE.createElement
document.createElement = EPE.createElement;

Although we usually don’t have to care about when we define objects this approach will not work if the native function is replaced by a custom function before the custom function have been declared. I can’t find an explanation for this so if you know the answer please share the information :)

When the user executes the statement

var el = document.createElement(‘div’);

the EPE.createElement method is invoked. This will call the native createElement which actually creates the element and then call the function EPE.extendElement which looks like this.

EPE.extendElement =
  function(el) {
    var htmlConstructor = EPE.getConstructor(el.tagName);
    // If a constructor could be found
    if (htmlConstructor) {
      for(var p in htmlConstructor.prototype)
        el[p] = htmlConstructor.prototype[p];
    }
  };

The EPE.getConstructor method is merely a method for translating whatever tag is provided into a suitable constructor function. For instance if you want to create a TD element you have to create a HTMLTableCellElement. In our case we simply need to translate the Div tag and EPE.getConstructor returns a reference to the HTMLDivElement function.

Finally the for loop will copy any functions defined in the prototype chain of the HTMLDivElement to our newly created Div element.

In this way, by a transparent use of document.createElement, the user can extend any HTML element as much as he like. Creating a Div element will create an element with both the forAll and the forDiv methods while creating a Table element will provide the forAll method and any methods defined on the HTMLTableElement prototype object.

Any elements created prior to the loading of the document can be extended using the document.all collection like this

window.onload =
  function() {
    var l = document.all.length;
    for (var i=0; i<l; i++)
      EPE.extendElement(document.all[i]);
  };

Getting the prototype functions to the DOM elements is thus pretty straight forward, but changing the prototype objects at runtime and reflecting those changes proves to be quite a challenge.

Part 2

We want to reflect any changes in the HTMLElement prototype objects to the instantiated objects at runtime.
For this we need a mechanism for monitoring changes in the prototype object or a way for the DOM node to look up the method in an associated prototype object on error.

I tried accomplishing this using various approaches but to no prevail.
IE does not have the very useful Mozilla watch/unwatch methods. The similar onpropertychange event only applies to DOM nodes and not custom created objects.

That leaves us with the setExpression method for dynamic properties for monitoring.
The setExpression method however is not designed for this purpose and from preliminary testing looks rather futile.

It might be possible using IE behaviors (i.e. htc files). If one of you intelligent readers can come up with a solution please let us know.

Summary

You can argue whether it is a good idea or not to change prototype objects at runtime. It seems a bad design decision yet it might prove very flexible in other situations.

Never the less it is still very useful to have a mechanism for extending the HTML elements in a document. The solution presented is easy, simple and completely unobtrusive.

Som vand på min mølle…

Sad sammen med en kunde i går, der udtalte flg.: “Jeg vil hellere bruge 30-40 timer ekstra på analysefasen, for at være sikker på at vi rammer rigtigt. Selv det mindste udviklingsprojekt ligger på ca. 100+ timer, så jeg vil hellere bruge lidt ekstra timer på at få konceptet på plads, fremfor at skulle kaste mange penge efter det forkerte udviklingsprojekt” (frit citeret efter hukommelse)

…jeg kan kun sige én ting: “Hørt!”

God weekend!

The Norman Nielsen Group User Experience conference 2007

Er Barcelona en cool by? Ja, ganske bestemt. Er NN Groups konference en cool konference? Nej, bestemt ikke.
Til gengæld er den seriøs, gennemarbejdet og solid. Der er bestemt insights at tage med, fx at fokus User Experience er den rigtige vej at gå, hvis vi vi virkelig gerne vil gøre en forskel for vores kunder. Og at fokus på brugere og deres behov er essentielt at have med fra begyndelsen af processen. Det havde vi jo nok på fornemmelsen, men her på konferencen er vi blevet præsenteret for så mange gode cases, der viser hvor stor en forskel det rent faktisk gør at begynde med brugerne.

Fokus på brugerne i alle dele af udviklingsteamet
Der er en lang række metoder til at få brugerne og deres behov ind i hele processen, og personas er et meget stærkt værktøj i den forbindelse. At arbejde med personas som udgangspunkt for designprocessen (og her taler jeg ikke om farver på en wireframe…), kan:
- Hjælpe til at udtænke features der rent faktisk vil appellere til rigtige brugere
- Hjælpe til at prioritere features
- Mappe features op mod forretningsmål, så det bliver tydeligt hvilke features der rent faktisk vil understøtte forretningsmål
- Fjerne fokus fra teammedlemmers egne idiosynkrasier og holde fokus på brugere
- Holde fokus på brugere gennem hele design- og udviklingsprocessen. (Hvem har ikke oplevet fuldkommen at tabe brugeren af syne i en “Feature Mania”…)

Ved at fokusere på User Experience, bruge personas i udviklingsprocessen og involvere alle i denne proces, kan vi altså minimere indflydelsen fra folks personlige idiosynkrasier og holde fokus på hvad der er centralt for brugeren. Vi kan også (og ikke mindst) mindske frustrationen i i teamet, da de forskellige værktøjer til at aktivere personas i designprocessen, giver teammedlemmer et datadrevet argument (“Persona Paul ville aldrig gøre sådan her…) i diskussioner. Det er med andre ord en metode, der stiller alle der er involveret i projektet mere lige. Ideer, ændringer og prioriteringer kan baseres på reelle brugere, som er forankret i data, så diskussioner bliver muligvis mindre personlige teammedlemmerne imellem.


Den ideelle verden

Personas og cross functional teams der alle fokuserer på personas er selvfølgelig den ideelle verden. Det er sjældent vi har mulighed for at begynde processen for en kunde allerede der hvor de blot står med de rå data og ingen ideer har til deres projekt endnu. Men når det er sagt, så må vi også som konsulenthus have en vision for vores dialog med kunden, og der var fokus på user experience gennem hele processen – fra salg til leverance – måske et godt bud.

Pump My Website

Respekt til Ghisler&Gustafsen for at vinde en overbevisende sejr på Pump My Website i dag på Content Management Forum 2007 i Århus. Opgaven var at pitche en strategi eller et koncept til en fiktiv medicinalvarevirksomhed – på tid og overfor et stort publikum.

Selvom vores pitch var med et glimt i øjet var budskabet seriøst nok: “Provide real value to get real value”. Og ikke et ord om Content Management… Du kan se præsentationen her – du må tænke dig til de to superkonsulenters stepdans og forklaringer.

Vi håber på at skaffe billeder af vores pitchers in action.

TechEd Developers 2007 – SharePoint 2007 best practices og performance testing

Jeg har på TechEd deltaget i en del session relateret til mit arbejde med SharePoint 2007. Det tilbagevendende tema i disse sessions handler om at finde den rigtige måde at gribe udvikling an på, og best-practices i forhold til deployment af det udviklede til produktion.

Dette har netop i de sidste par måneder været et fokusområde i Århus afdelingen, hvor vi har arbejdet en del med at strømline udviklingsprocessen af Microsoft Office SharePoint Server (MOSS) løsninger. Målet er at automatisere de trivielle og tidskrævende opgaver, for dermed sikre en ensartet tilgang til tingene for udviklere og frontendere og dermed sikre kvaliteten af de udviklede løsninger.

Heldigvis har de metoder der blev vist som best-practices på TechEd faldet godt i tråd med de interne practices vi arbejder på at formalisere. :)

Et par andre interessante sessions handlede om performance test og performance optimering af internet baserede løsninger i MOSS. I en session demonstrerede Chris Patterson, Senior Program Manager i Visual Studio Team System Test group, de nye features i Visual Studio 2008 Team Test i forhold til Ajax og SharePoint. Vi så hvordan web test recorders nu optager Ajax requests så man ikke længere behøver at bruge Fiddler til dette, vi så desuden hvordan Correlation Helper muliggør dynamiske parametre i web tests og fik derudover et par gode links til loadtests af MOSS via SharePoint 2007 Test Data Population Tool, et projekt Microsoft har startet op på CodePlex (ref http://www.codeplex.com/sptdatapop). Helt sikkert noget jeg skal hjem og udforske nærmere!

I en anden session viste Conor Morrison, Senior Program Manager for Code Analysis i Team System Developmer team og Marc Popkin-Paine, test lead for Visual Studio Team System profiler, hvordan man kan anvende Microsoft Visual Studio 2008 Team System profiler til at benchmarke sin kode fx. før og efter builds, så man hurtigt kan finde fejl, performance flaskehalse og lignende i sin kode. Der blev endvidere vist eksempler på hvordan man via frameworket og konsollen kan automatisere flere af disse tests. Også her var der stof til eftertanke: det ville give god mening at implementere en automatisk analyse af benchmarks der fx. i forbindelse med testing mere eller mindre automatisk kan advare om degraderet performance efter et build, fx. på grund af en memory leak eller uhensigtsmæssig instantiering af objekter i loops eller tilsvarende.

I morgen går det hjemad til kolde Danmark igen, med masser af nye idéer i tasken. :)

Hvad er enkelhed?

Alle er enige om at simplicity eller enkelhed er et mål i sig selv, når vi skal designe et velfungerende website, hvor målet er at lade brugerne gennemføre en opgave nemt og effektivt.

Vi forstår normalt enkelhed ved at tænke på, at flere features mindsker enkelheden. Derfor skal man også altid nå frem til en kompromis-løsning: Der skal være tilpas mange muligheder til at brugerne kan nå målet, og tilpas få til at de let kan betjene websitet.

Enkelheden afgøres udenfor produktet

Enkelhed kan med fordel betragtes som noget, der ligger udenfor selve produktet: Enkelhed afhænger nemlig fuldstændigt af den bruger, der skal anvende websitet og den sammenhæng, som det skal anvendes i. Forestil dig hvor let en teenager f.eks. synes det er at sende en sms fra sin mobiltelefon, når hun sidder i bussen. Teenageren oplever teknologien som meget enkel – men det skyldes, at hun er vant til at sms’e, at hun har god tid og at hun har opbygget en stor rutine i at sende beskeder. Forestil dig nu hvor kompliceret præcist samme handling vil være for f.eks. pensionisten i den anden side af bussen (indrømmet, mange mormødre sms’er faktisk i dag) – situationen er en anden, idet pensionisten måske tænker på snart at skulle af bussen, og personen er en anden: Det er måske svært at se displayet og tasternes påskrift, og det er ikke en handling, han har prøvet før.

Mobiltelefonen er den samme – men brugeren og situationen betyder, at graden af enkelhed opleves vidt forskelligt.

Hvad afgør så brugerens opfattelse af enkelhed?

Forståelsen af brugerne kan nuanceres ved at tænke på de forskellige ressourcer de nogle gange råder over – og andre gange ikke:

  • Tid – Hvis du designer en online buskøreplan, som brugerne anvender lige før de hopper på bussen, kan en betjening med varighed på 30 sekunder synes som evigheder og dermed meget kompleks. Men 30 sekunders betjening kan også virke helt rimelig for en bruger, som tjekker afgangstider for den næste dag. Brugerens situation afgør opfattelsen af enkelheden.
  • Penge – Er afgørende for nogle brugeres oplevelse og for andre er det af mindste betydning. Forestil dig et ejendomsmæglersite, hvor priserne er rigtigt godt skjult – det vil opleves som et brud på enkelheden. Omvendt er prisen ikke så vigtig, hvis man sælger liebhaverejendomme – så nedtoner du i dette tilfælde prisen, vil det faktisk øge oplevelsen af enkelhed.
  • Villighed til fysisk indsats – Skal jeg hente varen på posthuset når jeg har købt den på nettet? Eller kommer fragtmanden til min dør på et tidspunkt som jeg bestemmer? Den fysiske indsats kan være afgørende for, om brugerne oplever dit website som enkelt. Tænk på at netbanker bl.a. har stor succes, fordi folk ikke har lyst til at bevæge sig hen til den fysiske bank.
  • Rationel tankevirksomhed – hvor meget skal man tænke for at betjene websitet? Er man ved at købe et nyt tastatur til computeren via nettet, vil man nok ikke bruge megen tankevirksomhed på at udregne hvad fragtomkostningerne bliver – det skal bare fremgå tydeligt. Er man derimod ved at låne 500.000 kr. til en bil, vil man omvendt være mere villig til at investere lidt flere tankekræfter – men omvendt er det oplagt at levere informationerne på en tilgængelig måde, da ikke alle brugere formår at gennemgå den anstrengende tankevirksomhed der ellers kan være forbundet med at sætte sig ind i et lån.
  • Evne til at handle socialt afvigende – lægger websitet op til noget, som normalt er socialt acceptabelt i brugerens verden eller er der barrierer, der skal overvindes? Noget så simpelt som offentlige brugerkommentarer virker f.eks. meget naturlige for nogle brugere, hvor andre skræmmes ved tanken om at få publiceret sin mening.
  • Evne til at handle udover rutinen – er brugerne vant til den handling, som websitet lægger op til? I så fald kan noget tilsyneladende komplekst opleves som ekstremt simpelt. Men det kan også være omvendt – det vil du f.eks. vide, hvis du ser en person betjene en iPod for første gang. Indtil han fanger de grundlæggende betjeningsformer synes den ellers stilrene og enkle iPod meget kompleks.

Ovenstående indlæg er inspireret af et et oplæg som B.J.Fogg holdt på konferencen cmf2007 i Århus. Han har ikke udgivet noget om sin forståelse af enkelhed endnu. Han er derimod at betragte som grundlæggeren af persuasive design, som jeg på dansk kalder motiverende design.

Halvvejs igennem TechEd Developers 2007

Så er vi nået halvvejs igennem TechEd 2007. Personligt syntes jeg der har været masser af spændende sessions. Specielt sammenlignet med Campus Days som Microsoft afholdte på DTU sidste år, så er niveauet væsenligt højere til TechEd.
Udover Kevin Kelly som jeg omtalte i et tidligere indlæg, så har Stephen Forte, Brian Randell og Stefan Schackow leveret nogle rigtige gode sessions.

Stephen Forte Jeg var inde og høre Stephen Forte i “Database Design Patterns: Architecting the Right Data Model for the Right Application”. Det eneste nye for mig, var at der var blevet sat navn på nogle af de database optimeringer som vi tidligere har udarbejdet i forbindelse med vores shops og CCM løsninger.
Det vigtigste, og ikke mindst meget relevante budskab, som Stephen leverede var at man skulle huske at designe sine denormaliserede tabeller fra start af. Hvis du har en oversigtsside eller rapportside, som har rigtig mange joins, så bør du allerede i udviklingsfasen begynde at overveje om du ikke kan få et stort performance boost, ved at denormalisere nogle af dine data.
Stephen leverede en rigtig god sammenligning med de problemer som myspace.com har haft i forbindelse med deres user tabeller, som ca. har 150 millioner aktive brugere, og ca. omkring 235 millioner brugere ialt (træk selv de to tal fra hinanden for at få antallet af inaktive brugere).

Brian Randell

Brian Randell leverede en masse inspiration i sin “Advanced Version Control with Visual Studio 2005 and 2008 Team System” session.
Vi har en masse udfordringer i forhold til at strømline vores versionsstyring, og jeg skal personligt gøre hvad jeg kan for at få udrullet nogle af hans tanker og arbejdsmetoder i Creuna.
Brian sluttede af med en gennemgang af hvordan man bør gribe branching i TFS ad. Han har så mange informationer at dele ud af at det var umuligt at føge med i, grundet min mangel på auditiv indlæring, så jeg var så heldig at fange ham ved en af “Ask the Experts” båsene som står i exhibition området. Det jeg i virkeligheden var ude efter, var at få en be- eller afkræftet var, om hvordan hans holdning til vores source control metoder i vores gamle TCL projekter holdt vand. Og et skulderklap til os selv; for der var en stor lighed imellem vores metode og dem Brian fremviste. Forskellen på igår og i dag er – at jeg nu har fået vist hvordan man gør i TFS ! Og det skal jeg nok sørge for ikke går til spilde…

Stefan Schackow

Hele to events med Stefan Schackow er det blevet til – “Hidden Gems in ASP.NET 2.0″ og “Building Highly Scalable ASP.NET Web Sites by Exploiting Asynchronous Programming Models”.
Jeg så den første session alene, og har derfor svært ved at vurdere hvor meget nyt der var at tilføje til alle jer som har kodet .Net i lang tid. Men givet at sessionen hed “Hidden Gems”, så vil jeg gå udfra at de fleste emner ikke er common knowledge blandt .Net udviklere.
Af de emner han berørte var disse dem jeg fandt mest interessante: “Custom Expression Builders”, “Encryption of web.config sections”, “Control Adapters; Decreasing the view state”, “Customer Cache Dependencies”, “Post Cache Substitution”, “Virtual Path Provider”.

Nikolaj og jeg var begge inde og se sessionen omkring asynkron programmering, og vi blev hurtigt enige om at det primære fokusområde for næste Tich Toch Tech Talk kommer til at ligge her. Det var en af de få level 400 sessioner som der er ved TechEd, og den levede helt klart op til dette. Det var “nørderi” når det er bedst.
Først gennemgik Stefan teorien omkring thread modellen i ASP.NET, og gav samtidig et klart billede af hvorfor der nemt kan opstå performance problemer på ASP.NET sites. Sessionen bestod af en masse teori, samt load tests på forskellige C# implementationer.

Ask the experts Som standard er IIS sat op til at give .Net 100 threads per CPU, hvoraf 12 af dem er dedikeret til CLR. Microsoft har analyseret en masse forskellige website scenarier er kommet frem til at disse tal er de mest optimale. Som systemadminstrator har man selvfølgelig mulighed for at justere på tallene, men hvis du har dårlig performance i din kode, så er dette en kortsigtet løsning.
Hvis du har operationer som afhænger kraftigt af IO (og IKKE CPU), så har du sandsynligvis muligheden for at forbedre din performance med asynkrone kald til de IO tunge operationer. Af IO tunge operationer, kan jeg hurtigt videregive Stefans eksempler: SQL queries og webservices. I dagligdagen vil det ofte også være dem vi støder på.
Som du måske allerede har gættet, så er konceptet i asynkron programmering, at du ændrer din kode til at køre den tidskrævende del i en adskilt tråd. Microsoft har i .Net frameworket stillet nogle metoder til rådighed som kan anvendes til dette formål. Den vigtigste pointe der lå i Stefans foredrag var at ved at bruge asynkron programmering af IO tunge operationer, så frigives ASP.NET tråden, og den næste HTTP request i køen kan blive behandlet. Dermed forbedres responstid og serverload væsenligt!
Vil du vide mere om den tekniske implementering af dette, så gå ikke glip af Tich Toch Tech Talk November Edition.

TechEd Developers 2007 – Stemningsrapport og et par key learnings

Som det fremgår af overskriften er vi pt. et par Creuna-drenge der boltre os i tekniske indlæg på dette års TechEd i Barcelona. Fantastisk by, kæmpe stort og meget imponerende arrangement, spændende emner og et meget ambitiøst program! PowerPoints og demoer fra 09.00-18.15 hver dag. Og så selvfølgelig hjem på hotelværelset og renskrive noterne så vi kan tage al vores viden med hjem til kontoret.

TechEd-Overblik

Grundlæggende er der ikke så meget revolutionerende nyt (som det f.eks. var tilfældet på Office Developers Conference op til release af MOSS og Office 2007 sidste år!). De fleste indlæg handler om teknologier som har eksisteret i noget tid, så som MOSS, Team Foundation Server, Windows Workflow Foundation etc. Der er kommet forbedringer og nye produktversioner her og der, men koncepterne er de samme. Dette betyder at indlæg bliver knap så revolutionerende, men til gengæld går lidt mere i dybden, med udgangspunkt i mere realistiske demoer og erfaringer fra det virkelige liv.

Microsoft Solution Framework og Visual Studio Team Edition
Det der fylder meget i mit hoved for tiden er forbedring og ensretning af metode. I alt hvad vi laver. Lige fra salg til test og deploy. Og det er her jeg ville ønske at jeg havde taget et par sælgere, projektledere, frontendere, UX’ere mm. med i kufferten, for der er meget inspiration at hente for alle faggrupper i forhold til vores fælles mål: At lave gode løsninger til vores kunder.
Som Microsoft selv udtrykker det: Vi levere ikke kun udviklingsværktøjer med en brugervejledning. Vi levere også mere abstrakt vejledning i hvordan værktøjerne skal bruges i fremstilling af IT-løsninger. Nogle af de mest spændende sessioner jeg har overværet indtil nu har handlet om Microsoft Solution Framework (MSF) og understøttelsen af disse principper og modeller i Visual Studio 2008 Team edition og Team Foundation Server. Det kribler i fingrene efter at få flere af disse metoder og teknologier indarbejdet i Creunas metodeapparat.

Build an Office Business Application (OBA) in an Hour
Nej.. det er ikke csc.exe der er blevet ekstremt langsom. Han kodede faktisk løsningen på en time (og buildede den på et par sekunder).
Endnu en session som jeg gerne ville dele med Creuna-sælgere og konsulenter (og i sidste ende vores eksisterende og potentielle kunde)!
Hovedkonklusionen i forhold til OBA er nemlig at der ligger utrolig meget ekstra værdi og gemmer sig i de Office installationer som mange er vores kunder eventuelt allerede har kørende i deres firma.
I en session af Eric Carter blev vi præsenteret for de værktøjer der nu er indbygget i Visual Studio 2008 som muliggør udvidelse af Office klienterne, så som Word, Excel, Outlook mm. Til Visual Studio 2005 findes Visual Studio Tools for Office som en add-in der installeres separat. Tools for Office er i 2008 integreret og forbedret og det var imponerende demoer vi blev præsenteret for. Og han holdt sig inden for den time han havde lovet…

Eat your own dog food!

TechEd Developers 2007 i Barcelona er godt igang, og vi (Creunas tre udsendte: Nikolaj Kaplan, Anders Rask og undertegnede) har allerede været til mange spændende foredrag.
TechEd startede mandag eftermiddag med en keynote af Microsoft CVP Somasegar, hvor det primære budskab var “Eat your own dog food” – anvend de systemer du selv leverer til kunderne, for det er der du oplever om du leverer et godt produkt.
TechEd er meget præget af Microsoft kommende release af Visual Studio 2008 (VS) (også kendt som Orcas), samt .Net framework 3.5 og dermed også LINQ. Somasegar lovede at alt dette bliver released i slutningen af November.

Somasegar - Building Great Applications

Eat your own dog food again!
Microsoft er selv begyndt at anvende Team Foundation Server (TFS) til at styre deres projekter. De nye versioner af Team Foundation Server og Visual Studio har en masse forbedrede funktionaliteter, specielt omkring bug tracking (work items). Og mange af disse forbedringer skyldes primært at Microsoft selv er begyndt at anvende deres produkter internt.
Nikolaj og jeg var til to opdelte sessions med Kevin Kelly, som er Senior Product Manager for Team Foundation Server.

Kevin Kelly

Først og fremmest lå fokus på præsentation af de nye features som stilles til rådighed i VS2008, men det mest interessante var at præsentationen handlede om hvordan de i Microsoft havde valgt at bygge deres VS2008 udviklingsprojekt op omkring TFS.
Kevin tilgik ikke mindre end live data fra deres udviklingsmiljø i Redmond, så man undgik bagfter at sidde og tænke over om det nu var rigtigt at de virkelig selv brugte det.

Det fede ved TFS er at man har en stor fleksibilitet i forhold til at bygge sine egne work items til de typer projekter man kører i sin egen virksomhed, og hvis man har tid til det (skulle efter sigende ikke være helt så nemt), så kan man også bygge sine egne rapporter til TFS.
Kevin viste her nogle af de “trend reports” , som de havde bygget op. Det var virkelig imponerende at se hvordan de havde muligheden for at tracke hvordan projektet havde udviklet sig over tid.

TFS Bugs

Sessions som disse er med til at øge lysten for at vi kan gøre tingene endnu bedre end vi allerede gør, og vi vil helt klart arbejde videre med at tilegne os nogle af disse metoder i vores udviklingsprojekter.

Now what ?

“Eat your own dog food” – hvad kan vi selv lære af det ? Microsoft har formået at udvikle deres produkter baseret ikke kun på feedback fra deres kunder og deres innovationsafdeling, men også deres egne medarbejdere.
TFS (og VS) har direkte integration til Project (og Project Server). Her kan projektlederen lave en ganske almindelig projektplan for hvornår work items skal udføres, og selvfølgelig se hvordan status er på projektet eller projekterne.
Vi leverer selv Microsoft Project løsninger til vores kunder, og ville vi ikke kunne rådgive og levere bedre løsninger til vores kunder, hvis vi begyndte at arbejde med projektplanlægning igennem TFS og Project Server – og åbner det ikke samtidig op for at kunne strukture og overskue vores arbejde mere end vi gør i dag ? Det er ihvertfald lykkedes for Microsoft.