developer_No1_2013_final
Transcription
developer_No1_2013_final
No 1/2013 Mobile ng marketi P osition Survey The DeveloPer Returadresse: ProgramUtvikling AS. Postboks 1, 1330 Fornebu S Confi Voting rmation d Passwor HLR Love SM ers Remind N E W S A N D I N F O R M AT I O N F O R D E V E L O P E R S A N D L E A D E R S ing gs Warnin word g Verifyin n Donatio SMS Billing MMS Loyalty Club SCroLLInG BotH WAyS Voting Merge SMS Winrt for the ioS developer ing Market By Iris Classon Page 8 g Orderin SMS - simply the world’s most effective communication method 15 years’ experience 13 APIs for easy integration SMS wholesale worldwide Dispatch of about 700,000 SMS per day Online monitoring of all events worldwide 24/7 Business customers in more than 100 countries Direct third-line support to our developers Single point of contact for worldwide SMS distribution D g Verifyin HLR ers wor-dNorway Rabekkgata Pa9,ssMoss Voting tion onfirma Remind sales@vianett.no l +47 69 20 69 20 ing Market For more information: www.vianett.com Survey ng Booking onation SMS Billing i Position word We love SMS! t Paymen MMS Mobile ng marketi Loyalty Voting Club Merge SMS coffeeScriPt By Jøran Lillesand and Eirik Lied Page 4 tranSitioning SucceSSfully from the it SiDe to BuSineSS By Howard Podeswa Page 20 1 The DeveloPer N 1 2013 Curiosity Contents the forgotten motivational factor in development ARTICLES o From the time of birth, curiosity drives a child’s learning and development. From realizing that you cannot eat stones, that a Barbie’s hair won’t grow out if cut, that tiny bits of Legos can create houses, and that things will burn if set on fire. Oh wait, the last one maybe was just me. We were unaware of comfort zones, not yet as affected by social inertia and with dissonance reducing skills not yet drilled in. Curiosity, if allowed to, was a strong driving factor behind our development then. CoffeeScript ......................................................................................................................... p. 4 Writing ambitious webapps with Ember.js ...................... p. 36 Scrolling both ways ...................................................................................................... p.8 Geo-spatial searches with RavenDB ........................................ p. 34 But at some point we decide that we are grown-ups. And for the record that is a myth – growing up – I’ve never seen any proof. And when in that fictive state we have decided that we know it all, and questions and curiosity is not that welcome anymore- it’s rather an annoying and childish trait. Children ask, grown-ups answer. Unfortunately, as a new developer, I see this every day. Questions are often considered as a result of lacking knowledge, and lacking knowledge as a result of being an unskilled programmer. For both sides the immediate solution to reduce those feelings of uneasiness (dissonance) would be not to ask, and not to reply. Both asking and replying ads a risk, and risks are unwelcome in comfort zones. Transitioning successfully from the IT side Course descriptions to business ........................................................................................................................... p. 20 A unique course provider! Be a driven product owner ......................................................................... p. 26 Course overview Oslo ........................................................................................ p. 56 Stop declaring victory too soon ....................................................... p. 30 Course overview London .............................................................................. p. 58 ........................................................................................... ......................................................................... p. 41 p. 54 “We run the company by questions, not by answers “ Questions, even when poorly formulated, are still rather good indications that a person is seeking knowledge, does not make assumptions and is willingly running the risk of being unfairly judged by that action because he or she sees the benefit of learning something new. Innovators do ask questions. And our job, by nature, is all about innovation, and all about questions, and asking the right ones. Publisher: Norwegian Developers Conference AS By Programutvikling AS and DeveloperFocus Ltd Organisation no.: 996 162 060 Editor: Kjersti Sandberg Address: Martin Linges vei 17-25, 1367 Snarøya, Norway Phone: +47 67 10 65 65 E-mail: info@programutvikling.no As Euripides said so wisely in one of his famous plays 480-406 BC “Question everything. Learn something. Answer nothing.” now often translated to “Question everything, assume nothing” Publication schedule 2013: 19. April, 15. August, 15. November Cover photo: Anna Sigvardsson Uncredited photos are from Shutterstock, except portraits. Print run: 13,000 Print: Merkur Trykk AS Member of Den Norske Fagpresses Forening No 3/2012 yoU’ReDoIngweb applIcaTIonswRong bybodilstokke page14 Mobile payment in Scandinavia 100 % number portability Business customers in more than 100 countries ing Posisjoner g Orderin Password ation Confirm SMS Billing Verifying n Donatio Password Survey Payment HLR Booking Full online statistics on all SMS deliveries Merge and send personal SMS to thousands of recipients instantly Mar Merge SMS byJonasFollesøandgøranhansen page36 SMS - the world´s most effective communication method Trondarve wasskog eivindbarstad waaler anderskarlsen brendanmcadams 67 2 ny For more information about advertisement, please contact Henriette Holmen at 976 07 456 or henriette.holmen@programutvikling.no In our world, it´s about getting lessonsleaRneD poRTIngwoRDFeUD important things to happen faster! TowInDows8 For a demo account send “demo” to 1963 or send us an email: sales@vianett.com g compa and meet your target group! N Club E W S A N D I N F O R M AT I O N F O R D E V E L O P E R S A N D L E A D E R S By Venkat Subramaniam Page 16 15 years experience ViaNett AS Rabekkgata 9 - 1523 Moss For mer informasjon: 13 APIs for easy integration www.vianett.no Timothyperrett DEMONS MAY FLY OUT OF YOUR NOSE SMS wholesale worldwide Dispatch of about 700.000 SMS per day Developer_3_JavaZone_2012.indd 1 Online monitoring of all events worldwide 24/7 g Orderin Password ation Confirm Verifying n Donatio ord Rabekkgata 9, Moss - Norway Passw sales@vianett.no l +47 69 20 69 20 g Orderin SMS Billing Payment HLR Booking ng Marketi www.vianett.no For more information: By Olve Mauldal ile Mob Page 10 ng marketi ing Pos isjonering Survey Position Business customers in more than 100 countries Iris Daniela Classon The DEVELOPER Loyalty Voting Ord 13 different APIs for simple integration of SMS solutions SMS with reply to mail groups No 4/2012 Mobile ng marketi EXPLORING FUNCTIONAL PROGRAMMING MMS keting ering Talk to us about SMS! The question is, are we following our own advice? aDapTIve webDesIgn: thekeytoamoreflexiblefrontend bychrismills page40 SMS wholesale worldwide int in Advertise in The Developer The DEvElOPER ing Position Don’t be afraid to ask IC ECOLAB EL Pr jAvAZONE SPECiAl EDiTiONFOR DEVELOPERS AND LEADERS The number one advice I was given, and when asking thousands of developers the number one advice you all gave to new developers, was RD 24 1 Somehow it makes sense, with all the benefits proven in regards to curiosity, to embrace that childish trait and let it, as it did for so many years so well, continue to drive our learning and development. You see it so well in students and new programmers, let’s never put a stop to that by shutting down a question. Voting The motivational factor I find that we ignore the most, and the one that nurtured our development as children so amazingly well, is curiosity. It has a lot to do with comfort zones and perceived risk and as a result anticipated feelings of unease. COURSES Voting Because there is no denial that motivation is what gets us moving, and when you stop moving you die. Not a lot, but little, by little, each day. Until you’ve stood still for so long the world has forgotten you, even you. Motivation starts and stops behavior – starts and stops personal development. It’s what drives you. You might want a challenge, or control, explore, or interact with others. Or you want answers. And for development lack of motivation is the number one reason for failure for projects. Just as inner motivational factors such as curiosity are the new emerging motivational factors among developers- a sense of meaning, belonging and personal development. But innovators ask questions. During an interview with Time CEO of Google Eric Schmidt explained the company philosophy very well in this one sentence: Social architecture for Managers................................................... p. 16 NO But wait – hold on. Why should we even care? Programming: from to hard to too easy ................................. p. 14 MMS Loyalty Voting CYNEFIN FOR DEVELOPERS By Liz Keogh Page 6 Club Merge SMS WHY YOU SHOULD CARE ABOUT FUNCTIONAL PROGRAMMING By Neal Ford Page 4 1 3 At the time of Javascript's creation, there was quite a lot of hype surrounding Java in the browser (really!). JavaScript's designer, Brendan Eich of Netscape, was ordered to create a scripting language adapted for the browser based on LiveScript – and to make it "Javaish." And that's how we ended up with a language intended for simple webscripting, which today is used in large mission-critical applications. It kinda looks like Java. At the same time, it is nothing like Java. and lles By n Li Jøra a ed k Li iri nd E Enter CoffeeScript. CoffeeScript is one of several languages to emerge the recent years that compile into JavaScript. CoffeeScript lends features and syntax from popular languages such as Python and Ruby, giving programmers the opportunity to write more concise and expressive code. WHy uSE CoffEESCrIPt? The prime benefit when choosing CoffeeScript over JavaScript is the expressive syntax. CoffeeScript provides a large collection of neat features that allows us to write code focusing on what we want to achieve, rather than how we want to achieve it. The result is code that is easier to both read and write. CoffeeScript compiles to plain old JavaScript. This means that it seamlessly works with jQuery, Backbone.js, Underscore.js, as well as the existing JavaScript code in your project. Introducing CoffeeScript to an existing JavaScript codebase is completely viable. The CoffeeScript compiler produce pretty-printed JavaScript that pass through the JavaScript lint syntax checker and validator. This means that the output produced by CoffeeScript is likely to behave identically across different browsers and browser versions. This again helps avoiding those annoying bugs caused by misplaced semicolons, array iteration, accidental global scoping and so on. readability Like Java, JavaScript is a verbose language with all its parentheses and curly braces. This tends to affect the conciseness and readability of the code. CoffeeScript uses significant indentation, which removes a lot of unnecessary characters. Just look at the following JavaScript code: In CoffeeScript the same can be written as: The CoffeeScript code has less noise and makes it easier to see what's going – at least once you get used to the syntax. Automatic scoping of variables One thing that new JavaScript developers often struggle with is scoping. Consider the code below: WHAt'S GrEAt ABout CoffEESCrIPt? Finally, time for some code! The following sections show a few of the features CoffeeScript brings to the table. It's JavaScript Since CoffeeScript compiles down to fully readable JavaScript, calling other JavaScript code is easy. Here's an example using jQuery: JavaScript is gaining ever more popularity. New frameworks are popping up right and left and single page apps are emerging as a standard on the web. However, a lot of developers still struggle to do The Right Thing in JavaScript. So much so, that the book JavaScript: The Good Parts, on how to use (or more importantly how not to use) JavaScript, is regarded as a must-read for developers getting acquainted with the language. When running the function myFunc , the variable name is modified in the global scope as it was not declared using the var keyword. The CoffeeScript compiler makes sure that all your variables are properly declared within lexical scope. This way, you never have to write var yourself. So, what happened? How did we end up with a "language of the web" which is widely regarded to be, plainly put, a rather quirky language? 4 5 If you want to assign variables to the global scope in CoffeeScript, you will have to do so explicitly. Suffixable operators CoffeeScript lets you suffix if and unless operators so that logical expressions can be read much like regular sentences. Comprehensions Looping over an array or an object's properties is fundamental in almost any language, and enhancing it really improves expressiveness. In regular JavaScript you would typically use an old fashioned for-loop. Underscore.js and jQuery offer functions that can improve the syntax quite a bit, but you still end up with parentheses and curly braces all over the place. CoffeeScript has looping with comprehensions built into the language. Block strings Most programmers who have tried putting HTML templates inside their JavaScript files know how tedious this can be. Block strings allow you to easily create large, multiline strings that preserve line breaks and formatting. Classes Using object orientation based on prototypes in JavaScript can be cumbersome. CoffeeScript makes it way easier. Using the class keyword we can easily create classes and inheritance. (Almost) everything is an expression Almost everything you write in CoffeeScript can return something. This is true for loops, if statements, switch case statements – and almost anything else. Consider, for example, the following. The use of a debugger is more difficult when developing with a compiled language, as you will be debugging the compiled code. There are ongoing initiatives to develop a source mapper for CoffeeScript, which will allow debugging CoffeeScripts directly, but to date, nothing has been released. Lastly, you will need to find a way to fit CoffeeScript into your build process. Depending on your platform, there are several tools available for this. For Java, this can be solved quite easily using tools such as wro4j and JAWR. For .NET SquishIt.CoffeeScript and Mindscape Web Workbench are both good choices. ConCLuSIon CoffeeScript is not a revolution. It is not a unique, groundbreaking language. Instead it adds a bunch of incremental improvements over JavaScript which, in sum, makes it more pleasant to work with. Experienced JavaScript developers should have no problems familiarizing themselves with CoffeeScript and the enhancements it offers. For new developers, it will allow them to focus on getting the job done, rather than learning the quirks and pitfalls of JavaScript. Consider the JavaScript code below, where we loop through an array and extract the names of cars with a high rating. This is one of the places CoffeeScript really shines. Note how the concise code allows us to focus on what we want to achieve, instead of array semantics. team will need to maintain over time. In this case, the cost should not be too bad. CoffeeScript is similar to JavaScript, and in any case, you have the option of compiling it to JavaScript and maintaining it as such. MAturIty Over the last few years, CoffeeScript has gained a strong momentum. 25% of more than 2700 respondents in the annual JavaScript Developer Survey claim to use CoffeeScript. As with any new technology there are trade-offs to consider. While it can be argued that CoffeeScript is simple, it will be another tool that your developers will have to master. We feel that this is an investment that pays off over time. In the long run you will have more expressive code that will be easier to understand and maintain – and a lot of fun to write! Jøran Vagnby Lillesand is a developer and the practice lead for Web Architecture at Bekk Consulting. He has worked on large applications at Posten Norge for almost five years. The last few years he has been focusing on building maintainable JavaScript for large enterprise applications. Jøran holds an MSc in communication technology from NTNU. Eirik Lied is a developer at Bekk Consulting and have worked on projects at Posten Norge the last four years. He is passionate about web development and Ruby code. In his spare time, your can find Eirik in the mountain skiing or coding Rails apps. He holds an MSc in computer science from the University of Oslo. The Ruby on Rails community has embraced CoffeeScript as the way forward for client side code, where it has been integrated as a part of the framework for over a year. Furthermore, high traffic sites such as GitHub uses CoffeeScript for all new JavaScript development. In Norway, both of our projects in different parts of Posten Norge allow and encourage CoffeeScript as client code language. In terms of adoption and maturity, you will not be alone in using CoffeeScript for your production code. Many others also rely heavily on it! DrAWBACkS There are always some drawbacks when introducing a new language in your project. First, there is the cost of knowledge. Every time you introduce a new technology, it represents another skill your 6 7 SCroLLInG BotH WAyS Winrt for the ioS developer By Iris Classon With Microsoft’s strong history in the enterprise space the new Windows 8 features has gotten many developers excited, and most of them revolve around the new set of libraries called Windows runtime, or Winrt. This API collection is used for Windows Store Apps, the apps that will run on both Windows RT (Windows 8 on ARM) and Windows 8. Language projections allow the developer to code in JavaScript, C#, VB or C++ and call the same native API’s. The lock screen lets us developers have our apps display notifications even before the user has signed in and the live tiles are updated without apps even running, same goes for the app-specific popup – toast notifications. The charms bar search function lets the user search the computer or apps for the term entered and share allows you to share content with other apps, between those that have implemented the share contract by being a share target and/or source. Apps can be run side by side in snapped or filled mode allowing multitasking. The very best feature is still that it is a platform that is very easy to develop for. From start to publish, no matter what you are used with, WinRT is a developer friendly platform. This is that girl in your class that just wouldn’t stop talking. She is also known as Iris Classon, a hyperactive and very passionate developer, long distance runner and mountain biker with a love for weightlifting and fitness. Iris recently caught the attention of the developer community with her tremendous passion for programming and unique career path. She’s a licensed and registered clinical dietitian who recently discovered she loves writing software. Within her first year, she earned MCPD and MCTS certifications and was invited to join MEET – Microsoft Extended Experts Team, in addition to landing a fulltime developer job after just six months. She’s been interviewed on Hanselminutes, the Code Project, Pluralsight and made headline news in several newspapers. Today she is a Technical Evangelist for Telerik, works as a software developer for Dotnet Mentor and is the organizer of the Swedish Pluralsight Study Group and is a frequent speaker at user groups and conferences and blogs passionately about programming. 8 tHE WInDoWS StorE This is where most of the apps will be downloaded and there are a few differences between Windows Store and the App Store. Trial period is allowed, - with limited or full functionality. Enterprise apps can be side loaded, this is not the same as In-house App deployment in iOS. As with the new iOS6 meta tags for websites directing a user to the store the Windows Store has also meta tags that can be used. Instead of displaying a banner with the app information the user can select the setup or go to the app from within the browser menu. GEttInG SEt uP / tooLInG Setting up is really easy- you just need three things and they are all free. Download an evaluation of Windows 8 and install either by running Windows 8 on your Mac natively using Boot Camp, or use VM software such as VMWare Fusion Parallels or Virtual Box. Download and install Visual Studio Express 2012 for Windows 8 (free). When you create your first Windows Store App it will prompt you for a license- just create a Microsoft account (also free) and sign in. Let’s have a quick looks at the tools. The IDE you will be working in is Visual Studio, this would be the equivalent of Xcode. DIffErEnCES In DESIGn A big difference between the two platforms is design, and the use of the design language now referred to as Modern UI (previously known as Metro). The design is typography based, clean and it’s all about content before chrome. The layout of an app and its content is based on a grid system with a set of recommended margins and paddings. Make sure the app always remains responsive and that animations are only used to give feedback to the user, be authentically digital and the remove all the chrome and let the content shine instead. In contrast to iOS applications there should be sharp clean corners, little if any gradients, only use images and animations if they serve a purpose, and there should be a clear content and typography hierarchy. The interface can be created using Blend, which is equivalent to Interface Builder. But just as with Xcode and Interface Builder Blend is well integrated into the IDE,- and most interface work can be done directly from Visual Studio. A quick note here that Blend is an extremely powerful tool well worth learning, and you can literally visual states and animations in just a few seconds. As for Xcode and VS2012, they are quite similar, just fewer buttons and icons to click on, and less information to fill in. 9 The simulator for Windows Store Apps works by remote desktop to your own computer and it is not run in an isolated environment so take care. You won’t find any TV-out, shake gestures or phone call/video time as you may be familiar with in the iOS Simulator. XAML is very stable and easy to work with, and it allows you to do some pretty cool stuff. Basically you can have any control look and behave exactly as you want, without investing much time or energy. It is a declarative markup language that is extensible, and we’ll have a look at the extensibility part in the DataTemplates and DataBindings section. XAML is a language for building objects, and everything you do there can be done in code, but the beauty is that it allows you for perfectly separation of concerns by keeping UI related things in the UI. The syntax is similar to that of XML and HTML, and properties of an element are declared as attributes, and so are events. An element can hold a child or children, and they can basically be nested in infinity. Why not add a grid to a button, and a textbox and an image to the grid? You now have a text and image button. You will be able to test the app using touch and some common gestures, mouse, simulate geolocation, test the different modes for apps have for allowing multitasking (snapped and filled mode). You can also change device orientation, take screenshots and change screen size and resolution (as an app must work well in all except the smallest resolution). Just as with iOS apps you have to handle the different states of the app, such as suspend, resume, suspend and shutdown as well as background tasks (tasks that run in the background when your app is suspended or not running). XAML In Windows Store Apps most of the UI work is done in a language called XAML. XAML is kind the equivalent of a XIB file- but then again not. The resemblance stops at what it represents and the XML-factor. Each XAML fileis paired with a .cs file referred to as the code behind file. Two popular design patterns are used with XAML technologies, the code-behind pattern where you write code in the cs file that belongs to the View, or MVVM, which is a pattern that resembles MVC. 10 ControLS Explaining each and one of the controls is outside the scope of this article. But a few points: DAtAtEMPLAtES AnD DAtABInDInGS In XAML we have a concept called DataTemplates. These are templates written in XAML that decide how data should be presented. These can be defined in the control itself, or defined in a resource dictionary, page level or app level, and be reused. The same can be done for styles. Styles resemble amore powerful CSS. They can be defined to apply to all the controls of a certain type, or given a name that the control then has to bind its style property to. Here is an example also using some built in animations from WinRT: There are many ways you can define a style, either you write it up manually, or you select the control in the designer and select Edit template after right clicking. This will create the full style template for that control, and you can modify everything from animations on different states (such as pressed state), to shape, form and so much more. By removing the identifier name the style will apply to all controls of that type if the style is set at app level. Here is an example of a data template: A few controls will be missing, such as navigation controls, date and time pickers and a few more. To understand how the controls should be used have look at the guidelines for each control. Usercontrols are extremely easy to create, a user control will work as a partial but reusable view. But if that doesn’t fit your needs you can create custom controls, this will give you full control, but you will get very far by customizing existing controls by using data templates and styles. By adding a name to a control with the x:name syntax you can access the control in the code-behind, the other way would be using MVVM is by using DataBindings. There is a great tool that helps you map, to about 80-90% iOS controls to their WinRT equivalent (also possible for Android). The site is called API mapping index and is found here: http://apimappingsite.cloudapp.net/library There are different types of bindings, for example when binding to static resources such as styles you use the StaticResource binding. To bind to a property you need to set a DataContext (default code behind), which can be done in XAML or in the code behind. The runtime will propagate values from the DataContext to the View, instead of you doing a push when accessing a control directly in the code-behind. You can use converters on bindings declared in separate classes, for example converting a True False property to Visibility or color. This keeps View logic in the View. 11 ASynCHronouS ProGrAMMInG WItH ASynC AnD AWAIt The new async API’s makes it easy to create snappy apps and you can get most things done by just using the new keywords async and await. The async modifier is added to the method declaration and tells us that this method contains code that will run async. Await is used before a task that we expect to take more than a few milliseconds, and it basically tells the compiler that if the task is not finished, it should sign up for the result of the task and return to the caller only invoking continuation when it has completes. Here is an example: tILES AnD toAStS Tiles and toasts are easy to implement, here is a basic example: When working with a custom type the type and it’s members need to be marked with the DataContract and DataMember attribute like this: StorAGE You have quite a few storage options, and you might recognize some of them. While the use of databases in the app is not recommended, you can use SQLite or similar lightweight options, you can also serialize data locally (remember that the apps are sandboxed), settings can also easily be saved locally. You also can roam data. Here are some very simple examples. board and fill out information about the app. Make sure you provide screenshots and so on, just as with iOS apps. Upload the packages and click publish. That’s it. No keys or certificates to handle (apart from the first dev license which is a certificate). Just a click of the button. It should not take more than a week, often less, and all apps are manually tested and tested with the WACK tool. Writing to local file and folder: WHAt WE DIDn’t Go tHrouGH (But you SHouLD) • Navigation • Background tasks • More on live tiles and notifications • Windows Phone and Windows Store APPS • More async programming with async and await And so much more Saving a simple setting GrEAt rESourCES: Channel 9 two day event http://channel9.msdn.com/Events/Windows-Camp/Windows-Store-App-Development-for-iOS-Developers Saving settings using a container: Guidelines http://www.irisclasson.com/2012/08/24/free-bookuser-experience-guidelines-for-metrowindows-8-styleapps-winrt-apps/ Controls ioS => Winrt http://msdn.microsoft.com/en-us/library/windows/apps/ jj729868.aspx WEB SErvICES Working with Web Services is extremely simple, even more so than in iOS. Here is a basic example: Read string: Windows Phone and ioS side by side coding http://msdn.microsoft.com/en-us/magazine/jj658972. aspx You can also allow the user to use a file picker to save to a file, this can also be done without the user selecting a file but then you will need to declare that in the app manifest and the user will have to agree to that. PuBLISHInG It is very easy to publish to the Store. First you need to sign up for a developer account, the current cost is 49USD for individuals and 99USD for companies. After you have done that you need to run something called a Windows Application Certification Kit (WACK) tool, this is a tool that will run a script and test your app. During this time the app will be started, suspended and shutdown a few times. You must pass the WACK tool to publish an app. The tool is most easily accessed through the IDE itself (but can be launched from PowerShell or the desktop). Right click on you project and select store and select publish, just follow the steps there, it should only take a few minutes. Create your app packages, sign in to your developer dash- 12 Hands on labs General resources for ioS devs for Windows Store development http://msdn.microsoft.com/en-us/library/windows/apps/ jj680134 C# for obj.C devs http://windowsphone.interoperabilitybridges.com/articles/chapter-4-c-programming-introduced-to-objectivec-programmers virtual training Design assets http://msdn.microsoft.com/en-us/library/windows/apps/ hh700403.aspx App samples collection http://code.msdn.microsoft.com/windowsapps/Windows8-Modern-Style-App-Samples 13 By Bertrand Besnard At that time, we had to understand low level languages that young folks can not even name today. We had no debug tool and the only way to understand why our application crashed was to try to reproduce the case… on paper. Later on, I studied in the only university in France that was teaching both Cobol and Java. Their philosophy was that however important Java was becoming (it was the beginning of the two thousands), it was still important to understand the main concepts of IT. They also forced their students to learn the language theory but that was just for the fun. In my last year there, only 6 years after programming my first pong game, we had to produce an OpenGL 3D first person shooter game. It was nothing that we would ever use later on in our lives, but understanding the key concepts of 3D and being able to use complex math was more important than filling up a CV. The whole project took us a couple of weeks. With today’s technologies, you can build up a playable level of a single game with the latest lighting and texturing technologies in just a couple of hours, thanks to the power, the diversity and the flexibility of the available tools. The same concept applies to pretty much everything that requires coding. We went from writing eighty characters per line with no objects, to defining a variable name and a method call represented by a box. Nowadays, most people learn IT the “fast way” that is, with tools that enable auto-completion, give coding advices and have integrated GUI builders based on drags and drops. Creating an application has never been that easy. A couple of clicks here and there, a Google search or two and voila! But is time sparing worth sacrificing knowledge? What is the big picture on a long term perspective? What will happen to hardcore experts? If programming is that easy, debugging becomes harder. With all that generated code and programming conventions not always being respected, if someone else than the original developer has to read and fix the code, things can become quite hard and costly. How many of us had to fix a code which contained variable names like txtBox1, txtBox2…, or even worse, ex girlfriends’ names? How many hours are spent yearly debugging simple mathematics operations because precedence rules are Programming: from too hard to too easy not respected? Those are just the easy ones, the most common and harder coding mistakes include, but are not limited to: global variables accessed and modified randomly, methods of tens of lines, exceptions being caught but discarded… There are tons of resources out there for developers to learn from and many acronyms to discover or to deeper investigate like TDD or BDD (test driven deployment), which is an often mentioned key to high quality softwares, SOLID (Single responsibility, Openclosed, Liskov substitution, Interface segregation and Dependency inversion) which describes the “first five principles” of object-oriented programming and design and so many more. Thanks to the internet, knowledge is only a click away, motivation however, has to be found somewhere else. On a long term perspective, without proper training, programmers won’t learn much more about the fundamentals and might become somewhat limited. Their errors’ becoming someone else’s to fix and their lack of knowledge becoming time consuming for others. Most companies understand that principle and have found an easy solution, encouraging through different 14 © Cmgirl / Shutterstock.com I can still remember how happy I was the first time my friends and I managed to program a Pong alike game on our Texas Instrument calculators. It took us weeks before figuring out the algorithm and months before being able to render something decent, almost playable, with zeros and ones on the screen. means, their employees to develop their skills through seminars, conferences, classes and basically everything that can potentially make one become better. This tendency has started in most countries that understand that programming can be a career path and not only another step on a stair that leads to management. Unfortunately, training individuals can be costly and not everyone can afford it. That is where dedication and thrive to learn kick in, buying a book and reading it is affordable by most. The other problem implied is that as time goes by, experts will become rarer and busier, leaving new programmers to themselves, in charge of their own fixing, eventually leading to chaos and destruction of the world as we know it. Already in 1995, Niklaus Wirth stated that “software is getting slower more rapidly than hardware becomes faster”. A variant by David May is even more explicit by doing a corollary with Gordon Moore’s law: “Software efficiency halves every 18 months, compensating Moore’s law”. This proves that knowledge is the key to a good programmer and IT, as every single science, always evolves and so should the people working with it. Bertrand Besnard is a French Software Engineer who migrated to Oslo. He has since then been working on some of the biggest Norwegian projects as environment administrator such as NAV and Autosys. He is currently employed by Steria. He is interested in process analysis and human interactions and travels the world to discover different cultures, and food. All kind of food. 15 Social Architecture for Managers In my work in non-governmental organizations and open source, I've learned how to build large virtual organizations using a variety of strategies that together I call "Social Architecture". By analogy with conventional architecture, this is the process, and the product, of planning, designing, and growing an online community. By Pieter Hintjens Now, I'm going to make a fairly radical proposal, which is based on two arguments. First, that open source communities represent the leading edge of project management. That is, given difficult challenges, a well organized open source project can beat any conventional project in terms of time taken, accuracy of the results, and overall cost. I based this on three decades of working in software projects of every conceivable scale and type. My second argument is that the tricks that successful open source teams have developed (by random variation combined with heavy natural selection) can also work in conventional closed-source teams. I've developed the science of Social Architecture in some detail, in my 16 book in-progress "Software and Silicon", but in this article I'll give you a short set of 20 principles that will, if you can apply them, give your teams something of the competitive edge that the best open source projects enjoy: • Create very explicit, somewhat crazy missions that people respond to. Make it challenging, but also fun. Missions are the problems your group has to solve. Make the missions just impossible enough, but valuable for the organization. Keep inventing new ones when the group has solved the existing ones. • When it makes sense, define a Bad Guy. Usually I don't like emotional drivers, but anger and fear can be powerful motivators. Be careful to not take this too far, it can be exhausting. If you're in a business setting, competitors make excellent Bad Guys. ucts. Big mistakes tend to happen in environments without diversity. anyone to propose improvements and changes to the rules. • Make it clear that you are there for the work, not the money. If there are rewards for success, make sure they're shared by all. Reward successful collaboration, not individual strengths. You want to avoid people competing simply for financial reward, because you'll encourage the sociopaths and discourage the better people. • Encourage your people to think of themselves as free agents who choose the problems they want to work on, and who can recruit other people to help them. Try to mix in some consultants with the employees. Teach people to hunt for profitable problems rather than wait for work to be pushed their way. Use tools like issue trackers to collect problems so they're easy to find. • Enforce the rules consistently, and use your authority mainly to enforce the rules. Leadership should be about identifying the main problems, securing resources to solve them, and enforcing the rules that allow people to work together without too many assumptions. • Create as much diversity as you can: ethnic, gender, education, culture, age, personality. Mix laymen with experts. It's not about political correctness but about making sure orthodoxy gets challenged. Diversity is the fire that turns raw ideas into edible prod- • Invest in rules and group contracts that help people divide the work and share knowledge. For example, adapt the PC3 process spec from http:// hintjens.com/blog:23. Try to reduce the need for meetings. Open source does this using clear licenses. Allow • Create competition between individuals and projects to turn conflict into healthy competition. Encourage individuals to challenge others, make this technically easy and low-risk. Open source lets anyone fork a project and then improve it. • Let people choose their own work and measure people on the value of the problems they solve. Don't allow any individual or team to own a problem, only a particular solution. Otherwise you reduce the scope for competition. Accept that some problems may end up with multiple solutions. • Don't assign people to teams. Allow teams to recruit freely, allow people to belong to as many teams as they like, start new teams, and so on. This reduces tribalism and fights over turf. Also, when team leads aren't competent, they don't do much harm, as their team just walks away. • Allow your teams to work from home, the local coffee shop, or anywhere else they want. Assume that they will do their utmost to succeed, especially if they have competition. Make the office space flexible, plas- 17 tic, with desks that can move around, WiFi, and absolutely no cubicles. • Enforce immediate sharing of knowledge: everyone publishes their work as it develops. The rules should allow others to copy and reuse that, but under reciprocal conditions. Even internally in a company, code should be remixable to ensure that there is full competition. • Allow anyone to start a new project, at no cost and no risk. Make sure the technical infrastructure allows this. Starting a project means being responsible for it. Most projects will fail, which is fine if the cost of failure is very low. • Ensure that projects are structured in a clear overall architecture that can be learned quickly. Slice your architecture into two or three layers, and group projects into layers. Define the contracts between layers (APIs and protocols) ruthlessly but don't try to define how particular implementations work, as long as they respect those contracts. • Define good criteria for success, and apply these to projects so that it's clear which projects are winning. It could be number of downloads, number of dependent projects, etc. Make winning this a primary and fun "goal" for teams, so that it becomes more important than financial reward. • Make it easy for newcomers to start contributing to projects, and make sure there are always more challenging projects they can move on to. Smart people enjoy learning, so make work a continuous learning experience. • Be prepared to drop individuals who are unable to build or join successful teams. It doesn't really matter how smart an individual is, the unit of success is a team, and it's better to have three ordinary people who work well together than one super-smart guy who can't work with anyone. • Enjoy yourself at work, and infect your staff with the same sense of enjoyment. Laugh at yourself often, it makes others feel at ease. To conclude, many of these lessons may be obvious, but put together, the changes can be radical. We've done this in several projects now, and turned exhausted, unfocused teams into little powerhouses producing brilliant products. It's dogmatic in Social Architecture: the same people, organized differently, can be 100 times more effective. MovInG froM C++98 to C++11 effective c++11 Programming Scott Meyers 2 DAyS trAInInG Pieter Hintjens is the author of "Code Connected" (Volume 1), the new O'Reilly book on ZeroMQ, and the founder of the ZeroMQ community. He's lead developer on the Zyre and CZMQ projects. His in-progress book on the digital revolution is on SoftwareandSilicon. com. In 2005 he designed the original AMQP (Advanced Message Queuing Protocol) specification. From 2005 to 2007 he helped organize the fight against software patents in Europe. He's been CEO of iMatix since 1996. He drums with a West African group in Brussels, is a certified pistol instructor, and has three lovely kids. The one religion he invented (Stallmanism. org) died when the beer ran out. rvALuE rEfErEnCES, MovE SEMAntICS, AnD PErfECt forWArDInG 10 JunE, oSLo 17 JunE, LonDon SMArt PoIntErS LAMBDA EXPrESSIonS SECrEtS of tHE C++11 tHrEADInG API Software developers familiar with the fundamentals of C++11 are ready to advance from knowing what’s in C++11 to understanding how to apply it effectively. This seminar, based on information in Scott Meyers’ forthcoming Effective C++11, highlights the insights and best practices of the most accomplished C++11 programmers: the things they almost always do (or almost always avoid doing) to produce clear, correct, efficient code. The seminar is based on lecture presentations, with ample time for questions and discussion by attendees. There are no hands–on exercises, but participants are welcome – encouraged! – to use their C++ development environments to experiment with the ideas in the seminar as they are presented. 10 JunE. Venue: Radisson Blu Plaza, Oslo 17 JunE. Venue: Holborn Bars, London © Ollyy / Shutterstock.com SCOTT MEYERS Scott Meyers is one of the worlds foremost experts on C++ software development. He offers training and consulting services to clients worldwide. Scott wrote the best–selling Effective C++ series (Effective C++, More Effective C++, and Effective STL) and orchestrated their initial electronic publication (originally as Effective C++ CD, subsequently as DRM–free PDFs). Hes also author of Overview of the New C++ (C++11) and Effective C++ in an Embedded Environment. Scott founded and is Consulting Editor for Addison Wesleys Effective Software Development Series, and he conceived the boutique conferences The C++ Seminar and C++ and Beyond. He received the 2009 Dr. Dobbs Excellence in Programming Award. A programmer since 1972, he holds an M.S. in Computer Science from Stanford University and a Ph.D. from Brown University. 18 OSLO - www.programutvikling.no LONDON - www.developerfocus.com Transitioning successfully from the IT side to business: 5 questions every developer should ask before embarking on a BA career By Howard Podeswa Benefits of a transition from IT to business analysis The Business Analyst (BA) function is to facilitate communication between the business and the solution provider; it may be a formal, dedicated role or a function played at times by a team member. In my work with my company, Noble Inc., I‘ve met many developers around the world who are making the transition to business analysis - and heard many explanations for why they were motivated to take that route. As someone who has successfully navigated the transition, I have also shared many of these motivations: I went from being a programmer who chose the profession because I was being paid to ‘play’-- and who couldn’t care less about business -- to being a BA who now runs a business as CEO of Noble Inc., and who is comfortable sitting with CEOs and VPs of large corporations, negotiating deals and helping them improve the BA practice in their organizations. From these perspectives, I’ve seen the following reasons for making the transition from IT development to business analysis: © Ollyy / Shutterstock.com • Ability to leverage experience: Experience comes as a blessing and a curse if you are an IT developer. As you build your experience, coming up behind you are programmers who are more up-to-date on the latest technologies, who work faster and are willing to work longer. A BA role gives you a chance to leverage the skills you’ve accumulated over the years in a profession that highly values experience and maturity over technical wizardry. I recently had a conversation with my son, who is just entering into the field of Big Data analytics with an up-and-coming startup and it brought me back to my early days as a programmer/analyst in a scrappy software development company. It got me thinking about the direction my career has taken since those times and the many paths his career might follow. I’ve gotten to know one of those possible paths quite well - the route from IT to Business Analysis - due to my role as CEO of Noble Inc., a Business Analysis training and consulting company – and because I have walked that path myself. This article is for anyone who is personally contemplating that transition, or is in the midst of it. I want to explore why someone would seek this path, what the impediments are and offer some suggestions for how to transition successfully. 20 • Burnout: You spend years getting paid to ‘play’ and enjoy ever-novel technical challenges --- when one day you just don’t feel the love anymore. Most developers experience this –- as did I. Business Analysis begins to look inviting, in particular because of the next point. • Business Analysis is less technically taxing than programming: I expect this to raise hackles, but I have done both and the simple truth is that it is not as technically difficult to write a user story or use case as it is to write the code that implements it. There is still novelty, complexity and creativity – but you find it more in the new business areas you are exposed to rather than in technical challenges. • Natural evolution: As you work your way up a career on the IT side, you naturally evolve towards a focus on higher levels of abstraction that move you further from the technical perspective and closer towards the business. The next logical step is Business Analysis – the function that bridges those two worlds. • Desire to be in a new/growing profession: When I entered the profession, there were few BAs out there, no BA organization, and no formally recognized role. Like many people in IT development, I was naturally drawn towards areas that were new, where there was a green field to be innovative – and Business Analysis fit the bill. While that is not as much the case now as it was then, the field is still young and growing – and even still in its infancy in many countries. • The financial motivator (i.e., money): As you get closer to the side that generates wealth, your pay rate rises accordingly. Generally speaking, ‘business’ BAs make more than ‘IT’ BAs, who make more than technical analysts and programmers. The argument is particularly compelling if you are a programmer working offshore, and the BA jobs you are seeking are located in North America or Europe. (See Job Security below.) • Job Security: Programming is increasingly being seen as a commodity service that can be outsourced to the lowest bidder – thanks, in part, to globalization, and to the easy ability through the Internet to source programming resources from across the globe. Business Analysis, on the other hand, requires close contact between the BA and business stakeholders; this typically means that the BA function must be performed locally, and that it will probably remain resistant to off-shoring for the foreseeable future. (The fear of having your job outsourced is not exclusive to North America and Europe, by the way; I’ve heard developers in India express the same fears. There always seems to be a cheaper source of programmers somewhere.) • Path to Emigration: I’ve met and trained many developers offshore, whose prime motivation was the opportunity the BA profession provided to work onshore. And it’s worked out well for many of those I’ve met who have made the move. The reasons vary not only by the individual person but by where they sit within the organization. For example, when I speak with the CEOs and VPs of IT service and development companies, about developing a BA competency using their existing programmers, the prime motivator I hear is the opportunity it provides to increase revenue from their existing client base by broadening and deepening the services they provide them. On the other hand, I hear a different motivation when speaking with the VPs of IT departments within large organizations: Their expressed goal is to better serve their business customers by doing a better job of going from a business problem to an IT solution. What are the challenges? Here comes the bad news for anyone considering the transition. A great programmer does not necessarily make a great BA. To be excellent at business analysis, you need a package of personality traits that don’t often come together in a single individual: a strong analytical side, coupled with highly advanced interpersonal skills. If you don’t have those ‘soft skills’, no amount of training in business analysis tools will make you a great BA. (The good news, though, is that there are things you can do to develop those areas of your personality that are currently weak, as I’ll describe at the end of this article.) So before you set out to become a BA, ask yourself these questions: 5 questions you should ask yourself, before you start transitioning from IT development into Business Analysis 1. Do I have a sincere interest in business (or, can I at least put myself in the shoes of someone who does)? The transition from IT developer to Business Analyst requires a change in mindset. To be an effective BA, you either have to genuinely care about business issues, or be able to put yourself in the heads of someone who does. It can be a challenge for someone who originally got into IT because of a passion for the abstract logic of programming. Some programmers are 21 2. Am I a great communicator/ listener? To be a successful BA you have to be able to put complex thoughts into terms your audience can understand. It means ditching the technical jargon and learning to use the business vocabulary of your stakeholders. And it means being a receptive listener – able to pick up on both verbal and nonverbal cues. If you are the type of person who loves to hear yourself talk – or whose thoughts tend to wander when others are speaking, the BA profession is not a good fit for you (unless you are prepared to change). 3. Am I a good synthesizer? Am I good at seeing the big picture? Often, being a BA means being able to absorb a lot of information coming in from many sources and put it all together into a consolidated view. You have to be able to see the big picture – and not be a ‘details only’ person who “can’t see the forest for the trees.” 4. Am I a natural leader/ self-starter? As a BA, you will be expected to facilitate and conduct interviews and feedback sessions with stakeholders and developers. It requires someone who is able to get others to follow an agenda, who is able to manage conflict, and who is able to help people move towards a consensus. The BA may not be the ‘team leader’, but the function does require leadership skills and self-motivation. 5. Am I a People Person? This the most important of the 5 questions. To be good at Business Analysis, you have to have a good rapport with people and be genuinely interested in them and their problems; in other words, you have to be a ‘people person’. Many IT developers whom I’ve met are not. Although agile practices are placing greater emphasis on teamwork and communication, programming is, at its heart, a solitary job: Once the meetings are over and the coding begins - it’s you against the 22 machine. It is not surprising, then, that IT tends to attract people who like to spend a lot of time in their own heads. On the flip side, if you do happen to be an IT professional who has strong interpersonal skills, you possess a combination of personality traits that are not that easy to find - and that, consequently, are highly valued. One of the services my company provides is pre-evaluation of potential BAs from a pool of candidates. As part of the process, we put a select group through team exercises , where we can observe them interacting with each other. We are looking for people who demonstrate the traits described above. The following is a direct quote from an evaluation we gave one of these candidates: “a natural team leader, projecting confidence (without displaying arrogance), strong knowledge base and a person whom I would feel very comfortable putting in front of a client.” That pretty well sums up the ideal candidate for a BA role. Transferable skills If you have the right soft skills, you will find that many of the technical skills you bring over from your IT background are transferable to the BA function – if you can learn to reorient them towards the business. The truth is that many of the techniques used by BAs began as IT techniques. The difference is in timing and context. Whereas you may be familiar with a technique that you’ve used after the requirements have been captured, to design an aspect of the IT system, as a BA, you’ll often use that same technique where it is more useful – during conversations with stakeholders at the front end of a sprint or phase, where you’ll use it for requirements discovery. Skills transferable from IT include: Deep understanding of the IT perspective The essence of the BA function is to facilitate communication between the business and IT. Your background in IT will make it easier for you to understand how developers think, the language they use and the problems they face – as well as communicate these to the business side. Procedural thinking/ analytical mind Programming requires procedural © SVLuma / Shutterstock.com lucky enough to be born with both a feel for abstraction and a feel for the practical world of business. Others have to develop it. (I’m of the latter type, but I learned to think like a businessperson when I became one – a suggestion I’ll return to later.) thinking – the ability to break down a complex action into atomic steps (or conversely, to build a complex action from them). The same talent for analytical thinking is invaluable in the BA role as long as it can be oriented towards the analysis of the business. a great opportunity for the former developer to spread best practices, such as agile, that have originated from the development side into the broader business environment where they can have a larger and more effective impact. Tools Related to this last issue are the actual tools used in both roles. As a BA, I use many of the tools I used to use as a developer – but I use them in a different context. For example, I first encountered decision tables in a development context as input to an automatic code generator. As a BA, I use them upfront during meetings with stakeholders to tease out the operative business rules that lie behind the decisions they know how to make but have difficulty explaining. Similarly, on the IT side, I’ve used Entity Relationship Diagrams (ERDs) and class diagrams to design databases and software classes. I now use them during stakeholder meetings to discover structural business rules and understand business concepts. Final words and suggestions If you feel you have the personality traits to become an excellent BA, and have made the decision to make the transition, where do you go next? If you’re currently working as a developer, make your intention known to Human Resources and to management. If you’re working for a large enterprise, the best and most intensive BA training can usually be found on-site – in corporate BA training classes paid Broader application of IT Best Practices Beyond these specific tools, there is for by your employer – or off-site in public classes. You should also begin reading. I’d recommend Software Requirements by Karl Wiegers and anything by Alistair Cockburn. From my own books, I’d recommend working through the case study in UML for the IT Business Analyst (Cengage), as you’ll learn to re-purpose techniques from your technical background in a BA context. As well, become part of the BA community by joining groups such as Modern Analyst’s BA Community Group and other such groups on LinkedIn as well as your local chapter of the IIBA (International Institute of Business Analysis). Seek out a mentor and begin thinking and acting like a BA – by being the one on your team to ask the business questions and volunteer for BA duties. You’ll have an especially open opportunity to do this if you work on a self-organizing agile team. If you are weak on soft skills such as facilitation and communication, let your manager know that you want to gain experience in those areas by facilitating internal team meetings. It’s a low-risk way to improve your skills and gain confidence. And if you are not naturally a ‘business-oriented person’ consider becoming one – by running your own business. There is no better way for a budding BA to learn to empathize with business stakeholders than to literally walk in their shoes. Howard Podeswa is a leader in Business Analysis, having contributed to the formalization of the profession as SME for CompTIA’s NITAS BA apprenticeship program, as a member of the BABOK review team, respected author and practitioner. A highly sought-after speaker, he has over 30 years experience in many aspects of the I.T. industry, beginning as a developer for Atomic Energy of Canada, Ltd., continuing as Systems Analyst and BA, and currently, as CEO and Director of Course Development at Noble Inc. He is the author of The Business Analyst’s Handbook and UML for the IT Business Analyst, a practical guide to requirements gathering and documentation for the BA, now in its 2nd edition, published in 3 languages. Through his company, Noble Inc., Howard has provided BA consulting and training services to a broad range of industry sectors, including health care, defense, energy, government, banking and finance with a diverse client base that includes the Mayo Clinic, the ISO, Canadian Air Force, the South African Community Peace Program (CPP), Deloitte, UST Global (U.S, and India) and BMO/ Harris Bank. In addition, Howard has designed BA training programs for numerous corporate education and academic institutions. In his ‘spare time’ he also runs a parallel life as a professional artist. His most recent exhibition was Sole of A Shoe: Three Generations of Painting. 23 Get a preview of our amazing speaker line-up: NDC is one of the World’s largest conferences dedicated to .NET and Agile development. Become a Partner and present your business to more than 1600 developers! Book your tickets now! • 2-day workshop • 3-day conference Get your Early Bird tickets before March 15th ndcoslo.com For more information about partnership deals, contact Henriette Holmen at: henriette@ndcoslo.com / tel.: +47 976 07 456 BE A DrIvEn ProDuCt oWnEr So WHAt DoES A ProDuCt oWnEr Do? According to the official Scrum Guide, the Product Owner “is responsible for maximizing the value of the product and the work of the Development Team” – which seems quite clear – but it then goes on to add “How this is done may vary widely across organizations, Scrum Teams, and individuals”. Ah! So basically then…it depends! Julie Lucht / Shutterstock.com I find it helps sometimes to aggregate and simplify and so I like to think that a Product Owner’s responsibilities can be roughly summed up in the familiar racing phrase of “Ready, Steady, Go” By Geoff Watts the Product owner remains one of the most important, yet hardest, roles to fill on a Scrum team. It is also still widely misunderstood in the teams that I start working with and I therefore see many teams struggling to find the right person to do the job. In this article I will briefly explain the responsibilities of the role and then share with you what I believe to be the key skills to look for in a Product owner. 26 GEt rEADy One thing that most people agree on is that the Product Owner has primary responsibility for managing the Product Backlog and thus determining what needs to be done in order to continually maximise value. This is rarely as simple as someone sitting down on their own and creating a list however; as they will often have to represent and consult a wide range of stakeholders in order to do this effectively. One of the first aspects of managing the Product Backlog is getting it ready for the initial planning session – in most projects this is the Release Planning Meeting. This involves creating a clear, compelling vision for the project and ensuring that enough of the higher priority Product Backlog items are understandable enough for the Development Team to plan into a Sprint. Once the initial Product Backlog is ready, that doesn’t mean this responsibility has been fulfilled and can be forgotten; getting ready is an ongoing responsibility for a Product Owner as they must ensure that the Product Backlog is continually “good enough” for the next level of planning. This will involve what is known as Backlog Grooming – adding detail, updating priorities, removing unnecessary items and adding in previous unknown requirements. kEEP It StEADy Agile approaches such as Scrum espouse the value of customer collaboration over contract negotiation thus Product Owners are not expected to write down their requirements at the start of a project (or even at the start of a Sprint) and then hand them over to the Development Team and disappear. Instead they are expected to work with the team during the Sprint, helping them clarify the requirements as they emerge through design and implementation. The Product Owner will also need to verify that they are done during the Sprint – or at the very least – in the Sprint Review, as well as keep stakeholders up to date with progress, and also help groom the Product Backlog in advance of the next Sprint. Go One of the most important aspects of the Product Owner role is to decide when to release the product. It needs to be early enough to gather critical feedback before it’s too late but not too early that confidence and expectations are dashed. It needs to be early enough to beat your competition to the market place but not too early that the product is missing key features. It is a difficult balance to strike but, at the end of every Sprint, the Product Owner will need to decide whether the potentially releasable increment that the Development Team has delivered should actually be released. Whether or not the increment is released, the Development team will always need to know what is next on the list of things to deliver and so the Product Owner must be ready to provide that information. One possible answer to this question is: “nothing”. This could either be because the Product Backlog is empty or, more likely, that the value in delivering the remaining items on the Product Backlog does not justify the cost of another Sprint. In this case, cancelling the project is the right thing to be done next. 27 A good Product Owner is A DRIVEN Product Owner: A vailable In order for Product Owners to be able to collaborate effectively with the Development team, they need to have the time to make themselves available. It’s no use if, when the team have a question, they have to wait until next week before they get to speak to the Product Owner again. D ecisive Product Owners need to make many decisions, often with incomplete information. Usually this is around priorities or design decisions. The most competent and successful Product Owners I have seen are comfortable with this facet of the role and realise that the best way to enable better decisions is to make a few bad ones. I often say that any decision is better than no decision and a quick, bad decision is often infinitely better than a drawnout, bad decision. R ealistic “You can’t get a quart into a pint pot” and “You can’t have your cake and eat it” are two old English sayings about attempting or expecting the impossible. The best Product Owners realise this and so, while they will inevitably push for as much value as possible, they won’t push for the impossible. The best Product Owners know that this leads to demotivation and, usually, compromised quality. I nformed Being knowledgeable about the product and the market you are (or intending to be) operating in is tremendously valuable to people in the Product V isionary Because product development is largely empirical in its nature, Product Owners who can envisage a future rather than describe requirements are more likely to be successful. While the requirements can, and probably will, Photo: Shutterstock Owner role so immerse yourself in that world. Spending time with users and stakeholders is usually a valuable investment. with less knowledge is more effective than a more knowledgeable, disempowered Product Owner as the agile approach allows the Product Owner to discover knowledge quickly. N egotiable Because of the number of stakeholders that a typical Product Owner will need to work with, negotiation skills are very important to succeeding in the role. One aspect of negotiation that often goes unnoticed is the ability for a Product Owner to be able to negotiate with themselves. There is almost always a conflict in the Product Owner between following their head and their heart when it comes to prioritising the Product Backlog and deciding when “potentially releasable” can become “released”. Julie Lucht / Shutterstock.com Being A DRIVEN Product Owner I regularly run workshops with Product Owners and whole Scrum teams to explore the Product Owner role and what skills or characteristics are useful to the role. In one workshop, the group and I came up with a catchy acronym: change over the course of the project, if the Product Owner has a clear understanding of the vision for the product – and can get this across successfully to the Development Team – then the power of agile can be harnessed. Studies show that teams with a clear and concise vision are much more productive than teams without one. This is partly because they have a greater understanding and can thus make better, more educated decisions and partly because working on a project with a clear and compelling vision is more inspiring and engaging. E mpowered Agile teams operate at a fast pace and a lot happens almost every day during a Sprint. This means that the Product Owner will need to make decisions and give answers to questions on a very regular and frequent basis. If the Product Owner needs to defer to a higher power whenever they are asked a question or they need formal authorisation to make a decision, this will hamper the team and the product development effort considerably. Often an empowered Product Owner There are other skills or characteristics that can be useful as a Product Owner and you don’t necessarily need to be highly proficient in all of the above to be successful in the role. However, I have found this to be a useful starting point both for those looking to find someone for the role of Product Owner and for Product Owners themselves who are looking to improve the results of their teams. Training for developers and leaders in Oslo, London or wherever you like ProgramUtvikling offers the best courses and most flexible training to the developer community wherever you want us to. Our philosophy is to provide “practical, applicable knowledge” by providing the highest quality training with the best instructors. Geoff Watts is a trainer and coach who regularly runs highly-regarded Certified ScrumMaster and Certified Scrum Product Owner as well as advanced classes in London and Oslo on a public and private, in-house basis. Check out his next courses in the course schedule OSLO - www.programutvikling.no In addition to our permanent staff we have a number of exciting and well-known instructors such as Herb Sutter, Craig Larman, Billy Hollis, Mike Cohn, Geoff Watts, Gill Cleeren, Sahil Malik and a great staff of excellent Scandinavian instructors. London - www.developerfocus.com NDC has become one of the largest conferences dedicated to .NET and Agile development and is hosted by ProgramUtvikling AS. HTML5 • Javascript • Mobile • Agile • Scrum • Design .NET • Java • Architecture • TDD • SharePoint • C++ 28 Stop declaring victory too soon My assumption, not based on any serious industry research but just on experience working with many different teams in different markets, is that as an industry we waste a huge amount of time and money testing and maintaining the wrong things. And at the core of the problem is that software teams declare victory too soon. By Gojko Adzic With the pressure of shorter delivery phases, ubiquitous for the IT industry at the moment, teams that make better decisions about investing time and money in delivery and quality related activities, will be able to gain a significant competitive advantage. But we will first have to change our understanding of quality, and stop declaring victory too early. Gojko Adzic is a strategic software delivery consultant who works with ambitious teams to improve the quality of their products and processes. Gojko won the Jolt Award for the best book of 2012. In 2011, he was voted by peers as the most influential agile testing professional, and his blog won the UK agile award for the best online publication in 2010. Gojko’s new book Impact Mapping: Making a Big Impact with Software Products and Projects is now available from all major retailers and from http:// www.impactmapping.org 30 In 2007, Nokia was on the top of the world, one of the most recognisable and valuable brands. Wanting to move into the internet services space, where it had to face established players on their home turf, the company bet big on an innovative service offering called Ovi. According to Tim Brown, author of the seminal book on Design Thinking, Change by Design: How Design Thinking Transforms Organizations and Inspires Innovation (http://amzn.to/WlvNGV), Ovi was a key success story to showcase design thinking. The book was published in 2009, and Brown declared Ovi a huge victory: “Design thinking had enabled Nokia not only to explore new possibilities but also to convince itself that these possibilities were sufficiently compelling to move away from its strongly entrenched and previously successful approach… Today Ovi is one of the operating business divisions of the company, and Nokia – a technology leader – has reinvented itself as a service provider.” Yet history will remember Ovi completely differently, or most likely not remember it at all. If ever there was a IT equivalent of harakiri, this was it. Nokia – a technology leader – has “reinvented itself as a service provider” but the service was struggling to find enough customers to gain a serious foothold in the market. Meanwhile, Apple and Google took over the mobile world. Not giving up, Nokia almost bet the company on this in 2010, and started rebranding other services to push the Ovi brand. This led to ridicule in media, such as an article by Andrew Orlowski in The Register (http://bit.ly/ Y5RtMw): “People often ask, ‘What's a Nokia? - is it some new kind of yoga or a fashionable new diet?’ ” Then you remind them - it's the platform for the Ovi mobile services experience - and the fog of confusion quickly clears”. In 2011, the feedback loop finally closed and someone decided, to quote another Orlowski’s article from The Register, to give Ovi a mercy bullet. Once a leader in the market, Nokia is now a follower in a pack led by iPhone and Android device manufacturers. © JungHyun Lee / Shutterstock.com As tests pass on a continuous integration environment, hopefully after some exploratory testing as well, we move stickies to a “Done” column and that's it. A small percentage of teams will hold off declaring victory until the software is live in production, but this is where the journey ends. It shouldn't be. 31 This story shows how dangerous it is to declare victory too early and ignore the feedback from the market. The key thing missing from the Nokia Ovi story is the fulfilment of the potential. When it comes to software quality, most teams I worked with would focus on proving that functionality is present, performant enough, usable and so on, but that all proves potential for someone to actually use our products, not the fulfilment of the potential. If nobody is using our stuff, should we really care that all tests passed? We declare victory when our unit tests, acceptance tests and exploratory tests pass. But those things are just telling us that we did what was asked for, not that the results actually deliver quality. Even usability testing with real users shows that they can use our stuff, not that they are actually using it in the market. If all the tests for a software feature pass but not enough people use it, can we really claim that quality was assured? Is it justified to keep investing in testing and maintaining features that are not used enough? I’ve seen far too many teams that suffer from huge maintenance costs of their legacy software, but never ask if the features tested by those suites are still actually useful to anyone. Even proving that something is used in the field is still too early to declare victory. End-users might love something dearly and use frequently, but it might be for the wrong reasons or not in line with overall business goals. The early 1990s marketing campaign of vacuum cleaner manufacturer Hoover (http://bbc.in/UUHDH7) is one of the 32 most famous cases that illustrates that point. As a way to clear up old products from warehouses, Hoover offered anyone who spent more than £100 two free return flights, initially only to Europe. With an overwhelming response from customers and travel agents unable to keep up with the demand, the promotion was extended to US flights. It doesn’t take a math genius to figure out that people were soon buying Hoover products only to get a surreal discount on intercontinental flights, and the whole thing imploded. The campaign left Hoover with a costing of roughly £50 million and resulted in six years of court proceedings with disgruntled customers, remembered in history as one of the worst marketing disasters. Hoover’s promotion was used, but was a business failure. A potential solution for this conundrum is in the work of Robert Brinkerhoff, in particular his book The Learning Alliance, on applying system thinking to HR development (http:// amzn.to/T6PSQu). Trying to answer why large organisations waste a huge amount of money and time on training programmes that do not make a big difference at the end, Brinkerhoff suggested in 1994 that the way companies measure training programmes was wrong. This message should have been translated to software two decades ago, but it was completely ignored. Much in the same way, many companies waste a huge amount of money on IT programmes that do not really make a big difference at the end. For example, according to a research published by the BCS (http:// bit.ly/TZSxfE) commercial organisations across the European Union lost 142 billion EUR on failed IT projects in 2004 alone, mostly because of poor alignment with business objectives or business strategies becoming obsolete during delivery. We measure the wrong things. Brinkerhoff suggests measuring success of training programmes against a change that the training was intended to create in someone’s work or behaviour, an impact on someone’s way of working. Translated to software, this would mean by measuring quality against an intended impact on the behaviour or work of our users and stakeholders. The problem many readers will no doubt spot with this is that very few organisations actually define those impacts upfront. The knowledge about this exists in some senior stakeholders’ heads but is rarely communicated and almost never evaluated. At the same time, having this information up front would enable us to take the test-driven concepts much further - not just to software but to actual business impacts. ceptance and exploratory tests, usability studies and all the other types of checking, inspections and testing done today, are important. But I also think that they are insufficient to assure quality, without considering if something is really useful and if that usage leads to business success. If we really want to assure quality, we should look for ways to close those two additional feedback loops and inform decisions on where to invest our time in the future, both from design, delivery and quality assurance perspectives. For example, instead of declaring the role and purpose in a user story (“As a settlement team member, in order to process important exceptions, I want…”) I started asking people to declare the change in someone’s behaviour. Don’t tell me just “in order to process important exceptions”, tell me how would the processing differ from the current situation. From my experience, this opens up a fantastic discussion on measuring those impacts. Say that the difference is “process important exceptions faster”, we can start discussing how much faster, over what period, and what slows down the process at the moment. Then we can test for those impacts once a user story is delivered, and see if it actually ended up leading to the expected impacts. Another Brinkerhoff’s suggestion is linking those impacts to actual company business goals, and measuring the contribution of individual impacts. Why do we want to help settlement team members to process exceptions faster? How does that contribute to the vision of our product? Discussing those things up front also allows us to measure such higher-level impacts and decide if the software change is actually successful from a business perspective. Just to ensure that there is no misunderstanding, I think that unit, ac- © JungHyun Lee / Shutterstock.com I can’t really speak about the quality of their production process, as I was never an insider, but as a former occasional user of their devices I have the utmost respect for the technical quality of Nokia’s products. I’m sure that design thinking brought in customer engagement and usability, but what good is all that if customers don’t end up using it? 33 NDC is one of the World’s largest conferences dedicated to .NET and Agile development. Here are some of our workshop speakers: Pre-conference workshops Get your Early Bird tickets before March 15th June 10-11th on top of Plaza! Plaza Panorama Claims-based identity MonoTouch TDD R# Accelerated Agile Win8 F# Book your hotel room today! Radisson Blu Plaza / Thon Opera / Thon Spektrum / Thon Astoria / Thon Terminus Embracing Uncertainty BDD JavaScript I + II Clean Architecture Please visit ndcoslo.com for more information! ndcoslo.com WrItInG AMBItIouS WEBAPPS WItH EMBEr.JS © Tyler Olson / Shutterstock.com By Joachim Haagen Skeie Ember.js positions itself as a framework to help you build truly ambitious web applications. Summarized Ember.js is a framework for developing web applications with a rich user interface, firmly rooted in the technologies that shape our web experience (HTML, CSS and JavaScript), while helping the developers maintain structure and control of their code through a rich object model, automatically updating templates, powerful and consistent bindings and support for rich interactive views. In order to deliver on these promises Ember.js uses a strict Model-View-Controller (MVC) pattern that lets your organize your code in a clear and concise manner. Additionally, it relies heavily on naming conventions and standardized patterns, while it is nice enough to get out of your way and let you override these conventions and patterns when you would rather make your own choices. Enough talk. Lets go ahead and write a small Ember.js based application. We will write a simple application that we can use to write notes in. We will be able to create new named notes, and we will be able to fill each note with text. The end result will look like the picture shown above this article. First we need to create a namespace for our application, as well as a Route that will bind to the “/” URL. var Notes = Ember.Application.create(); Notes.Router.map(function() { this.route("notes", {path: "/"}); }); Note that we are creating the namespace Notes , which we will use to contain the complete code for our application. Following Ember.js’ naming convention we don’t need to declare a class for Notes.Router , as Ember.js will create this for us automatically. We are using the map function to match the URL “/” to a Route named notes. Note that Ember. js would have created a default index route for us, named "index" if we hadn't supplied our "notes" route. At this point Ember.js expects a few things from your application: • An application controller, view and template • A Notes route, controller, view and template Because we are not overriding the defaults for either the application controller or the application view we don’t need to declare them. We are, however, changing the application template, adding an outlet for the list of notes. In addition we want to render the selectedNote when a note is selected. To create a new outlet with its own named controller, route and view, we are going to use the handlebars expression render. Ember.TEMPLATES['application'] = Ember.Handlebars. compile('' + '{{outlet}}{{render selectedNote}}' ); Next, we need to fill these outlets with the correct views. For this we will override the default NotesRoute . Notes.NotesRoute = Ember.Route.extend({ setupController: function(controller) { controller.set('content', []); var selectedNoteController = this.controllerFor('selectedNote'); selectedNoteController.set('notesController', controller); } }); We are using the setupController function to connect the NotesController with the SelectedNotesController . As we wont be requiring any special rendering, we don't need to override the render Template function. The notes template will be rendered to the outlet, while the selectedNote will be rendered as part of the Handlebars render expression. Because we are using Ember .js1.0.0 pre 4, we need to explicitly connect the two controllers together manually. When Ember.js 1.0 RC ships, this will be handled at the controller level using the needs keyword. In the above example, Notes.SelectedNoteController would simply specify needs: ['notes'] , and Ember. Router would provide the correct connections automatically. By default the NotesView will use template names notes. So, lets start by taking a closer look at the notes template. Ember.TEMPLATES['notes'] = Ember.Handlebars.compile('' + '{{view Notes.TextField target="controller" action="createNewNote" classNames="input-small search-query mediumTopPadding" valueBinding="controller.newNoteName"}}' + '<button class="btn" {{action createNewNote}}>New Note</button>' + '{{view Notes.NoteListView}}' ); NOTE: This article is based upon Ember.js version 1.0.0 Pre 4. As Ember.js moves towards the final 1.0 release, some of the APIs might change somewhat. 36 37 The template starts out by defining the text input field where the user can input the name of the new note along with a button that the user can click to create the new note. Both the text field and the button will fire the action createNewNote , which will be called either when the user hits the carriage return key inside the text field, or when the button is pressed. Further, the value of the text field is bound to the controller.newNoteName property via the valueBinding attribute. In fact, whenever a property or a template attribute ends with the keyword Binding , Ember.js will set up a two-way binding in order to keep data in sync between layers within your application, even all the way out to the view. Emb er. j s Get inspired by our EXPERIENCED INSTRUCTORS You might be wondering how our Notes application knows when and which note to display, and the secret to this lies in the NoteListItemView. cSm cSPo MIKE COHN oslo: 4. march, 3. June london: 14. may MIKE COHN oslo: 7. march, 5. June Notes.NoteListItemView = Ember.View.extend({ click: function() { this.get('controller').set('selectedNote', this.get('content')); } }); accelerateD agile: from monthS to minuteS DAN NORTH oslo: 10, 11. June I have omitted most of the code in this view. Each Ember View will inherit either directly or indirectly from the Ember. View class bringing with it a slew of nice functionality, one of which is event handling. The NoteListItemView is listening for the click event, which will update the selectedNote property on its controller whenever the view is clicked upon with the mouse. At this point, the only thing missing is the selectedNote template. Ember.TEMPLATES['selectedNote'] = Ember.Handlebars.compile('' + '{{#if controller.content}}' + '<h1>{{name}}</h1>' + '{{view Ember.TextArea valueBinding="value"}}' + '{{/if}}' agile development with Scrum ARNE LAUGSTØL oslo: 10. may GEOFF WATTS cSm: oslo 23. april london 9. april ); As you can see the selectedNote template will only render if its controller (the SelectedNoteController ) has a content, and it will render a simple headline and a text area inside which it will bind the contents the selected note. cSPo GEOFF WATTS oslo 25. april london 11. april In this article we have blazed through some of the building blocks of an Ember.js application, but it should be enough to get you up and running. The code sample, the Notes application, is adapted from the first chapter of the book ”Ember.js in Action”, which I am currently writing. The book will be published by Manning Publications in the third quarter of this year, but rest assured, you will be able to get early access to the chapters from mid february as they are being written, exclusively through the books website at http://manning.com/skeie/. A working example of the notes Application is deployed here: http://stuff.haagen.name/notes/. You can get the full source code at http://stuff.haagen.name/notes/notes.zip. 38 Joachim is the author of "Ember.js in Action", published by Manning Publications. He works as an independent consultant through his company Haagen Software AS and has worked with various web technologies since 2006, ranging from JavaServer Pages, JavaServer Faces, SproutCore to Ember.js. He have been the technology lead for norways largest retail application (measured in volume) and know the pains that server–side generated markup and scripts can cause while trying to scale out a service. He finally saw the light when he discovered SproutCore in 2009. When Ember.js broke out of the SproutCore community, he knew this was the way to build web applications for the future! london: 11. april 25. april www.developerfocus.com coaching agile teams course LYSSA ADKINS/ MICHAEL K. SPAYD oslo: 15. april oslo: 15. april MICHAEL K. SPAYD LYSSA ADKINS/ www.programutvikling.no ADVERTISEMENT courSeS for developers and leaders Courses with MIkE CoHn CErtIfIED SCruMMAStEr - CSM – MIkE CoHn This two day course—taught by author and popular Scrum and agile trainer Mike Cohn—not only provides the fundamental principles of Scrum, it also gives participants hands–on experience using Scrum, and closes with Certification as a recognized ScrumMaster. DESCrIPtIon During the ScrumMaster class, attendees will learn why such a seemingly simple process as Scrum can have such profound effects on an organization. Participants gain practical experience working with Scrum tools and activities such as the product backlog, sprint backlog, daily Scrum meetings, sprint planning meeting, and burndown charts. Participants leave knowing how to apply Scrum to all sizes of projects, from a single collocated team to a large, highly distributed team. you WILL LEArn Practical, project–proven practices The essentials of getting a project off on the right foot How to write user stories for the product backlog Why there is more to leading a self–organizing team than buying pizza and getting out of the way How to help both new and experienced teams be more successful How to successfully scale Scrum to large, multi–continent projects with team sizes in the hundreds Tips and tricks from the instructors ten–plus years of using Scrum in a wide variety of environments courSe Date Oslo: 4 March, 3 June London: 14 May CErtIfIED SCruM ProDuCt oWnEr - CSPo – MIkE CoHn Certified Scrum Product Owner Training teaches you, the product owner, how to use the product backlog as a tool for success. As you watch the product take shape, iteration after iteration, you can restructure the Product Backlog to incorporate your insights or respond to changes in business conditions. You can also identify and cancel unsuccessful projects early, often within the first several months. The Certified Scrum Product Owner; course equips you with what you need to achieve success with Scrum. Intuitive and lightweight, the Scrum process delivers completed increments of the product at rapid, regular intervals, usually from every two weeks to a month. Rather than the traditional system of turning a OSLO - www.programutvikling.no project over to a project manager while you then wait and hope for the best, Scrum offers an effective alternative, made even more attractive when considering the statistics of traditional product approaches in which over 50% of all projects fail and those that succeed deliver products in which 64% of the functionality is rarely or never used. Let us help you avoid becoming one of these statistics. you WILL LEArn Practical, project–proven practices How to write user stories for the product backlog Proven techniques for prioritizing the product backlog How to predict the delivery date of a project (or the features that will be complete by a given date) using velocity Tips for managing the key variables influencing project success Tips and tricks from the instructors fifteen years of using Scrum in a wide variety of environments courSe Date Oslo: 7 March, 5 June LONDON - www.developerfocus.com effective concurrency Herb Sutter effective concurrency Author and instructor: Herb Sutter This course covers the fundamental tools that software developers need to write effective concurrent software for both single–core and multi–core⁄many–core machines. To use concurrency effectively, we must identify and solve four key challenges: 1. Leverage the ability to perform and manage work asynchronously. 2. Build applications that naturally run faster on new hardware having more and more cores. 3. Manage shared objects in memory effectively. 4. Engineer specifically for high performance agile - management Craig Larman agile Allan Kelly aPPlying lean thinking to SoftWare DeveloPment - incluDing an introDuction to the kanBan methoD Author and instructor: Allan kelly Demonstrate how Lean thinking can be applied to software development and equip students with practical tools for improving their development processes and environments. This workshop uses lecture material and exercises to teach Lean ideas and provide students with experience of applying Lean techniques. Those responsible for the development of software: Who should attend?: Project Managers, Team Leaders, Development Directors and Managers, Scrum Masters and Architects. BDD - SPecification By examPle nEW Author and instructor: Gojko Adzic This three day workshop teaches you how to apply emerging practices for managing requirements, specifications and tests in agile and lean processes to bridge the communication gap between stakeholders and implementation teams, build quality into software from the start, design, develop and deliver systems fit for purpose. Jurgen Appelo Didier Soriano Gojko Adzic kanBan Author and instructor: Mattias Skarin Kanban is a lean process tool with low process footprint. Kanban helps you drive improvements, both in your environment and in the surrounding value stream. Learn how to introduce kanban and how to use kanban to spark cooperative problem solving. Kanban is well suited for complex environment were overview is normally hard to find. Mike Cohn Mattias Skarin Dan North in-house training anywhere in the world agile anD iterative DeveloPment - a managerS guiDe Author and instructor: Craig Larman This practical, information-packed seminar summarizes the key research, ideas, and practices of iterative development, aimed at executive and project leadership. This is a high-impact guide for managers and students to agile and iterative development methods: what they are, how they work, how to implement them – and why you should. Whether you’re an IT executive, project manager, student of software engineering, or developer, Craig Larman will help you understand the promise of agile/iterative development, sell it throughout your organization – and transform the promise into reality. agile management Author and instructor: Jurgen Appelo topics (Learning objectives) This course is the first course day based on the book Management 3.0, which addresses the following three themes: You will learn about different agile methods, popular best practices, agile adoption strategies, and the role of the manager⁄team leader in agile organizations, second you will learn about creativity in the workplace, tips for intrinsic motivation, and how to form diverse and productive teams, and third you will learn when to manage and when to lead, and how to protect people and resources from any bad effects of self–organization. Pmi® agile certifieD Practitioner (Pmi-acP) nEW Author and instructor: Didier Soriano This training is tailored to help Scrum Masters, Product Owners or seasoned Scrum practitioners (you need to have attended a two–day course in Agile Methodology) to cover the curriculum needed to pass the exam. At the end of this course, you will be able to apply for passing the PMI–ACP examination. This multiple–choice test require to be taken at a Prometric Test Centre (ProgramUtvikling is a Prometric centre). agile eStimating anD Planning nEW Author and instructor: Mike Cohn Despite the many worthless plans that weve all seen—which may make us want to skip planning altogether— this Agile Estimating and Planning Training will demonstrate that its possible to create accurate project plans useful for programming testing—and projecting forward from 6–9 months. Our Agile Estimating and Planning Training will teach you how to create practical, useful and reliable plans for your software development projects. accelerateD agile: from monthS to minuteS Author and instructor: Dan north During this course you will learn unusual and counter–intuitive techniques for software delivery and understand the principles behind them. Using a mixture of discussion, instruction and exploration you will start to think differently about agile development, automation and team dynamics. By exploring several architecture and development strategies you will learn how you and your teams can produce and deploy software faster than they thought possible. You’ll never look at TDD the same way again, not to mention copying–and–pasting code. nEW agile founDationS for BuSineSS analyStS Author and instructor: Allan kelly This course focuses on the role of requirements in driving generic Agile teams with reference to Scrum project management and XP technical practices. The Business Analyst’s role on an Agile team is described together with the additional tools, techniques and approaches available. nEW Allan Kelly Our courses can be customized and tailored to meet your training needs and requirements. We think globally, and will deliver in-house training anywhere you want us to. In addition to our scheduled courses, we offer a number of courses on demand. Please contact us for more information at info@programutvikling.no or info@developerfocus.com 42 Geoff Watts nEW retroSPective techniqueS Author and instructor: Geoff Watts The 2–day Retrospective Techniques course will teach the 5 step structure for facilitating a retrospective as described by Esther Derby and Diana Larsen and will also cover a number of approaches to be used in each part of the process. As well as leaving with new techniques for their retrospective toolboxes, attendees will get the opportunity to practice putting together a retrospective agenda and running and⁄or experiencing many of the techniques they will learn about. for a complete course overview visit www.programutvikling.no and www.developerfocus.com 43 Scrum Test-Driven Development, Testing Agile Development with Scrum Author and instructor: Arne Laugstøl This course will give an introduction to development in Scrum and agile development. The Participants will learn how to practice Scrum by collaborating as part of a Scrum-team during the labs. The course is aimed at people that is either going to participate in Scrum-teams, or just wants to know more of the concepts of Scrum and agile-development. You don’t need to be a developer to gain a full benefit from the course. Arne Laugstøl Janet Gregory Certified ScrumMaster CSM Author and instructor: Mike Cohn During the ScrumMaster class, attendees will learn why such a seemingly simple process as Scrum can have such profound effects on an organization. Participants gain practical experience working with Scrum tools and activities such as the product backlog, sprint backlog, daily Scrum meetings and sprint planning meeting. Participants leave knowing how to apply Scrum to all sizes of projects. The course gives you the title of Certified ScrumMaster. Brutal Refactoring NEW Author and instructor: Michael Feathers In this course, Michael Feathers will teach you a series of techniques that you can use to identify and execute high–impact refactorings in your codebase – changes that help your team move forward and in a more productive way. Many of these refactorings involve the consideration of new architectural styles and analysis of existing code. This course will present you with the tools to make that work possible. Mike Cohn Certified ScrumMaster CSM Author and instructor: Geoff Watts Learn the Scrum framework for an agile project and the essentials of working as a ScrumMaster or Scrum team member. Through a fun mix of theoretical explanation, problem exploration and practical exercises, this 2–day course will equip attendees for their first Scrum project or enable them to reflect on their projects and become more agile. Michael Feathers BDD - Specification by Example NEW Author and instructor: Gojko Adzic This three day workshop teaches you how to apply emerging practices for managing requirements, specifications and tests in agile and lean processes to bridge the communication gap between stakeholders and implementation teams, build quality into software from the start, design, develop and deliver systems fit for purpose. Geoff Watts Mike Cohn Geoff Watts Certified Scrum Product Owner CSPO Author and instructor: Geoff Watts During this course you will understand the product owner role with its authority and responsibility, and its interaction with the other Scrum roles. You will be able to create a product vision, stock and groom the product backlog, prioritise the backlog, and systematically refine requirements. You will also be able to create a realistic release and track the project progress and understand how you can effectively collaborate with the ScrumMaster and team in the sprint meetings. Mike Cohn Effective User Stories for Agile Requirements Author and instructor: Mike Cohn This course provides you with the knowledge and tools needed to identify and write effective and helpful user stories. Youll learn the six attributes all good stories must exhibit and thirteen guidelines for writing a better user story. The class explores how user role modeling can help when gathering a projects initial stories. During this hands–on course, all participants will have the opportunity to practice identifying user roles and writing stories on a case study Lyssa Atkins 44 Certified Scrum Product Owner CSPO Author and instructor: Mike Cohn This course will teach you, the product owner, how to use the product backlog as a tool for success. As you watch the product take shape, iteration after iteration, you can restructure the Product Backlog to incorporate your insights or respond to changes in business conditions. You can also identify and cancel unsuccessful projects early, often within the first several months. The Certified Scrum Product Owner; course equips you with what you need to achieve success with Scrum. Coaching Agile Teams Course Author and instructor: Lyssa Atkins and Michael K. Spayd Coaching Agile Teams is a training experience that covers both the being and the doing of agile coaching. There’s a lot to learn, experience and practice! At the end of the course, you will be capable of applying many new tools and techniques, as well as your own mindset changes, to coach agile teams to high performance. As practical as it is provocative, the Coaching Agile Teams course challenges agile coaches to rise to the fullest expression of their role and offer simple, practical ways to get there. The Whole Team Approach to Agile Testing Instructor: Janet Gregory This three day course explains how testers can become valued agile team members, how they contribute to delivering a continuous stream of business value, and ways to overcome common cultural and logistical obstacles in transitioning to an agile development process. It describes the values and principles that help testers adopt an agile testing mindset, and gives practical alternatives to traditional testing processes, such as defect tracking, metrics, audits, and conforming to quality models. Students will be shown how to complete testing activities in short iterations, and how testers contribute on a daily basis during each iteration and release cycle. Gojko Adzic Test-Driven Development Author and instructor: Venkat Subramaniam The course has a good balance of interactive lectures and hands–on exercises. The attendees are expected to pair–up and work on the lab exercises. The instructor will assist the attendees as they work on the exercises. The objective of the course is for the attendees to gain an in depth practical knowledge of the concepts so they can put them to immediate use on real projects. NEW Venkat Subramaniam Test-Driven Development & Refactoring Techniques Course Author and instructor: Robert C. Martin This course teaches you how to use the principles and practices of TDD to specify requirements and designs using acceptance tests and unit tests. You will learn the intensely granular TDD approach to development using XUnit for unit testing and FitNesse for acceptance testing. You will experience the frequent and regular feedback and progress of letting tests drive the development and design. Robert C. Martin Christian Johansen TEST – DRIVEN JAVASCRIPT Author and instructor: Christian Johansen Even the most seasoned backend programmer is too often on thin ice once a web application’s frontend is in need of development and/or maintenance. Rid yourself of the insecurity by learning to understand and appreciate JavaScript for the highly productive and unusual language it is. The course will take you through JavaScript’s object model and functional elements, giving you a solid understanding of how JavaScript really works. A series of practical assignments puts this understanding to use by implementing reusable code using idiomatic JavaScript patterns. Unit testing and TDD will be demonstrated through-out the course. Michael K. Spayd For a complete course overview visit www.programutvikling.no and www.developerfocus.com 45 Database JAVA Database design, -implementation and SQL-programming Author and instructor: Dag Hoftun Knutsen This course covers all phases of developing a database application: Analysis, design, implementation, SQL-programming and testing. Hands-on exercises will give you practical experience. There is particular focus on how physical database design is important from a performance perspective. Dag Hoftun Knutsen Core Spring Framework Author: Mårten Haglind Instructors: Mårten Haglind and Kaare Nilsen In this four–day bootcamp you learn how to use the Spring Framework to create well–designed, testable business applications in an agile manner. Students build a Spring–powered JEE application that demonstrates the Spring Framework and other Spring technologies in an intensely productive, hands–on setting. Kaare Nilsen Mårten Haglind Oracle SQL- programming Author and instructor: Dag Hoftun Knutsen This course is a comprehensive introduction to SQL, including coverage of Oracle-specific features. The course includes all aspects of SQL: Data Definition, Data Control and Data Manipulation with particular focus on querying. It also covers principles of database design for performance. Hands-on exercises provide practical experience with SQL, and you will also learn about common errors and pitfalls and how to avoid these. Spring and Hibernate Development Author: Mårten Haglind Instructors: Mårten Haglind and Kaare Nilsen In this five–day course you will learn how to use the Spring Framework to create well–designed, testable business applications in an agile manner. In addition to that, you will learn how to use Hibernate, to effectively map Java domain model objects to a relation database. Dag Hoftun Knutsen Mårten Haglind Oracle PL/SQL- programming Author and instructor: Dag Hoftun Knutsen This course provides a comprehensive introduction to Oracle’s procedural language PL/SQL. The course describes the language’s general structure and syntax as well as various ways of applying the language in an application. Programming experience is gained through hands-on exercises. Dag Hoftun Knutsen Peet Denny Mobile applications Aral Balkan Aral Balkan Aral Balkans iOS SDK Dojo Author and instructor: Aral Balkan This unique and exclusive three–day course by Aral Balkan from Naklab⁄Geek Ninja Factory, author of the top–selling and critically–acclaimed Feathers app, introduces you to Objective–C, the iOS. Unlike purely academic courses, this is a pragmatic curriculum by a published iPhone developer, aimed at giving you a solid real–world foundation in developing and deploying iPhone applications using the iPhone SDK and Apples tools. Designing the mobile user experience Author and instructor: Aral Balkan Learn how to generate ideas and take them from the concept stage to wireframes to prototypes to finished product while focussing on simplicity, usability, and user experience. This workshop will teach you the processes you can follow to create mobile applications that are first and foremost usable, but also go beyond usable to being beautiful, pleasurable, and fun. In the age of user experience, this course will teach you how to build products that differentiate themselves from others based on their user experience. Android Application Development Author and instructor: Zigurd Mednieks You may have noticed that Android is rapidly becoming a major player in mobile. With hundreds of thousands of Android–powered phones being activated daily, you may be interested in building applications that can run on this platform. The objective of the course is to help you create compelling applications using the latest in Android technology, plus be able to support the widest possible range of Android devices. Kaare Nilsen Programming Java Standard Edition Authors and Instructors: Peet Denny This course is designed to give programmers a solid grounding in the Java Programming language. Starting with the core syntax and OO concepts, it then progresses to covering class design, arrays and collections, core libraries, exception handling, I⁄O and networking, JUnit testing an introduction to Swing as well as the new Java features (the course is always up to date with the latest versions of Java SE). After taking this course delegates should be comfortable with working from a design on real projects using core Java, will be able to attend more advanced Java courses such as JEE and have a firm grasp of the fundaments required for the SCJP exam. Effective Scala Author and instructor: Jon-Anders Teigen You will learn how to model rich object–oriented systems using Scala’s integration of concepts from object– oriented and functional programming. We will explore how these two paradigms complement each other to bring you the best of both worlds. During these three days you will go from learning how to explore APIs using Scala’s interpreter to building full blown applications using the Lift web framework. Jon-Anders Teigen Effective JPA - Industrial strength Java Persistence with JPA 2.0 and Hibernate Authors and instructors: Maarten Haglind The course gives the attendees a comprehensive kickstart into applying JPA and Hibernate for effective Java persistence. Insights will be provided into O⁄R–Mapping techniques and semantics as well as the programming model and paradigm to enable enterprise developers to instantly and productively apply the technologies involved in a real world setting. Common pitfalls as well as best practices, designs and idioms are discussed. Maarten Haglind XML Exchanging and Managing Data using XML and XSLT Author and instructor: Espen Evje This course gives a broad overview of XML, in particular of the structure and the syntax of XML documents, and of how to use XML documents in your solutions. You will learn about XML Schemas and about XPATH, and you will get an insight on how to use XML with relational databases. Zigurd Mednieks Espen Evje Registration Oslo: Tel 67 10 65 65 • kurs@programutvikling.no • www.programutvikling.no 46 Registration London: Tel +44 0843 523 5765 • sales@developerfocus.com • wwww.developerfocus.com For a complete course overview visit www.programutvikling.no and www.developerfocus.com 47 Design - Analysis- Architectures Craig Larman Agile Design and Modeling for Advanced Object Design with Patterns Author and instructor: Craig Larman During this popular, high–impact, and hands–on course you will learn to design with patterns, apply visual modelling in an agile modelling approach, and a suite of related advanced design topics, including the design of packages. This course is based on acclaimed industry leader Craig Larman’s extensive experience coaching and applying OOD since the mid 1980s. Analysis and Design with Scrum Author and instructor: Eivind Nordby The course targets developers who need to catch the users’ needs and transform them into distinct development tasks and into a solution capable of adapting to continuous requirements changes. The workflow is Scrum based, and UML is used for analysis and design ahead of programming in each sprint. Bundled with object-orientation, this gives a powerful, practical, developer oriented approach to problem solving. Design - Analysis- Architectures continued Clean Code: Agile Software Craftsmanship Author and instructor: Robert C. Martin This is a two–day hands–on course in which students learn the principles and practices of Clean Code as described in Robert C. Martin’s book: Clean Code: A Handbook of Agile Software Craftsmanship. This course alternates between lecture and exercise so that students can experience, first–hand, the practices and disciplines of these fundamental topics. Robert C. Martin Object-Oriented Development Author and instructor: Eivind Nordby This is a course for experienced developers who are new to, or wish to strengthen their object-oriented thinking. More than the programming itself, the difficulty in passing to object-orientation is mental. That is why this course focuses on basic object-oriented thinking and basic design principles. Of course, there are plenty of practical exercises. Eivind Nordby Eivind Nordby Architecture Skills Author and instructor: Kevlin Henney The Architecture Skills course introduces a broad curriculum for software architects. The course introduces development process models, architectural styles, requirements techniques, sufficient modelling techniques, design patterns and testing practices. This course includes a number of practical exercises so that attendees can see how the different activities fit together. There is also plenty of opportunity for discussion. Mobile applications Kevlin Henney Aral Balkan Robert C. Martin Udi Dahan AGILE ARCHITECTURE AND DESIGN Author and instructor: Robert C. Martin This course is a deep dive into the well–known SOLID principles of Agile and Object Oriented Design. Students will learn the characteristics of sound Object–Oriented designs and architecture, and patterns and practices that create them. Principles include: The Single Responsibility Principle, The Open Closed Principle, The Liskov Substitution Principle, The Interface Segregation Principle, The Dependency Inversion Principle, and many others. Special attention is paid to Component oriented design, and the principles and patterns of large–scale component architecture. Aral Balkan Advanced Distributed Systems Design using SOA & DDD Author and instructor: Udi Dahan Tried–and–true theories and fallacies will be shown, keeping you from making those same costly mistakes today. Communications patterns like publish⁄subscribe and correlated one–way request⁄response will be used in conjunction with advanced object–oriented state management practices for long–running workflows. If you enjoy deep architectural discussion, if you are in charge of building a large–scale distributed system, if you want to know more about how the big guys run their systems, this is for you. Aral Balkans iOS SDK Dojo Author and instructor: Aral Balkan This unique and exclusive three–day course by Aral Balkan from Naklab⁄Geek Ninja Factory, author of the top–selling and critically–acclaimed Feathers app, introduces you to Objective–C, the iOS. Unlike purely academic courses, this is a pragmatic curriculum by a published iPhone developer, aimed at giving you a solid real–world foundation in developing and deploying iPhone applications using the iPhone SDK and Apples tools. Designing the mobile user experience Author and instructor: Aral Balkan Learn how to generate ideas and take them from the concept stage to wireframes to prototypes to finished product while focussing on simplicity, usability, and user experience. This workshop will teach you the processes you can follow to create mobile applications that are first and foremost usable, but also go beyond usable to being beautiful, pleasurable, and fun. In the age of user experience, this course will teach you how to build products that differentiate themselves from others based on their user experience. Android Application Development Author and instructor: Zigurd Mednieks You may have noticed that Android is rapidly becoming a major player in mobile. With hundreds of thousands of Android–powered phones being activated daily, you may be interested in building applications that can run on this platform. The objective of the course is to help you create compelling applications using the latest in Android technology, plus be able to support the widest possible range of Android devices. Zigurd Mednieks Juval Lowy Kristian Nordal 48 The Architect’s Master Class Author and instructor: Juval Lowy The class agenda reflects these three elements: development process and project leadership skills, technology, and finally analysis and design. Students will see how to approach rarely discussed topics such as allocation of services to assemblies, allocation of services to processes, transaction boundaries, identity management, authorization and authentication boundaries and more. DOMAIN-DRIVEN DESIGN (DDD) HANDS-ON IMMERSION Author: Eric Evans Instructor: Kristian Nordal This course is written by Eric Evans and conducted by Kristian Nordal from Arktekk, which is certified by Eric Evans. The course will be held in norwegian. This intensive course will aid participants in striking a healthy balance between digging into their subject matter and addressing technological issues, which, while unavoidable, cannot be allowed to dominate the development process for commercially viable systems. We weave together lecture, discussion and classroom exercises, including hands–on coding projects. In discussions, attendees have the oportunity to discuss their own experiences and relate their own work to the principles and techniques presented in the class. RUBY Shay Friedman Ruby on Rails for Web Developers Author and instructor: Shay Friedman For newcomers to rails, the move to this new framework seems very hard and frightening – a different programming language, a different web framework and even a different IDE… In this course we will start with the very basics of the Ruby language, move to the basics of Ruby on Rails and end up with advanced topics. All will be done with comparison to other frameworks to keep the topics in context with the student’s current experience. For a complete course overview visit www.programutvikling.no and www.developerfocus.com 49 html5 – JavaScriPt c++ nEW JavaScriPt for ProgrammerS Author and instructor: Christian Johansen This three day workshop will introduce you to HTML5 with a brief backstory, before diving into the APIs one by one. As well as going through code and showing practical demonstrations, where possible, we’ll also talk about the alternatives and polyfills for old browsers that dont support ”awesome” out of the box. Christian Johansen Mike Tarlton Writing amBitiouS WeBaPPS With emBer.JS nEW Author and instructor: Joachim Haagen Skeie This course is well suited for programmers that have felt the pain of either messy client–side code, or the pains that come with the server–side MVC model. You want to learn how to build scalable, testable and clean web applications that you can come back to and understand in 6 months, and you are willing to accept and overcome the learning curve to get there! J. Haagen Skeie aDvanceD c++ Programming Author and instructor: Hubert Matthews This course is designed to introduce delegates to more advanced use of C++. It will cover techniques and idioms that allow for more efficient and safer use of the language as well as the concepts that make C++ different from other languages. Modern C++ techniques and facilities such as the STL are used throughout to introduce developers to the full power of the C++ language. Hubert Matthews c++11 Programming Author and instructor: Hubert Matthews This course is designed to upgrade delegates to C++11, the new C++ standard. C++11 is designed to make programming in C++ easier and more efficient for both the developer and the machine. It will cover all of the major features along with idioms for using them effectively, giving you access to the full power of the new language and libraries. SharePoint SharePoint 2010 anD office 365: enD to enD for DeveloPerS anD DeSignerS Author and instructor: Sahil Malik This 5 day course is packed with information that will load you with enough skills to work productively on any SharePoint project. It covers development aspects or UI design concepts in depth. This course is designed for technical audience or the architect who needs to learn all aspects of the product, for the developer, designer, and the administrator. Hubert Matthews Sahil Malik Sahil Malik SharePoint 2013 anD office 365: enD to enD for technical auDience Author and instructor: Sahil Malik This 5 day course is packed with information that will load you with enough skills to work productively on any SharePoint project. It covers development aspects or UI design concepts in depth. This course is designed for technical audience or the architect who needs to learn all aspects of the product, for the developer, designer, and the administrator. The course has been written, and is delivered by Sahil Malik. You can expect plenty of real world insight that you don’t get in “canned courses”. Sahil Malik SharePoint 2013 anD office 365: only the neW Stuff Author and instructor: Sahil Malik nEW This 3 day course is packed with targeted information that will bring your skills up to date on SharePoint 2013. Thiscourse is designed for technical audience or the architect who is already familiar with SharePoint 2010 and isinterested in getting targeted information, or the delta between SharePoint 2013 and SharePoint 2010. The coursehas been written, and is delivered by Sahil Malik. You can expect plenty of real world insight that you don’t get in“canned courses”. Scott Meyers 50 effective c++11 Programming nEW Author and instructor:: Scott Meyers Software developers familiar with the fundamentals of C++11 are ready to advance from knowing what's in C++11 to understanding how to apply it effectively. This seminar, based on information in Scott Meyers' forthcoming Effective C++11, highlights the insights and best practices of the most accomplished C++11 programmers: the things they almost always do (or almost always avoid doing) to produce clear, correct, efficient code. nEW Programming introDuction to Python Programming Authors and instructors: Peet Denny This Python course is an intensive introduction to Python Programming. The objective is to enable students to understand how Python can be used to solve real-world problems through realistic and useful course exercises. Peet Denny microSoft c Olve Maudal c++ 501: c++ for emBeDDeD DeveloPerS Author and instructor: Mike tarlton This course introduces the C++ language for general use. It is a subset of our more extensive 5 day course C++–501: The course is suitable for programmers who do not need to have in–depth knowledge of embedded programming concepts or concurrency issues. The course is also useful for Hardware Engineers needing to learn C++, for example to move onto using SystemC. It is assumed delegates have a working knowledge of the C programming language. DeeP c: a courSe for exPerienceD c anD c++ DeveloPerS Author and instructor: olve Maudal Programming is hard. Programming correct C is particularly hard. Indeed, even in serious industrial applications it is uncommon to see only correct, well defined and conforming code. Why do professional programmers write code like this? Because they lack a deep understanding, they don’t know the history and spirit of this wonderful programming language. C is not really a high level language, it is more like a portable assembler where you always need to consider the underlying hardware. nEW zero to microSoft BuSineSS intelligence e Author and instructor: Peter Myers This five day intensive instructor–led training course has been designed to enable students to commence developing and maintaining state–of–the–art integrated Business Intelligence (BI) solutions developed by using Microsoft products. The course consists of numerous hands–on labs that will provide students with the opportunity to produce an end–to–end BI solution. Peter Myers 51 MICROSOFT continued Arne Laugstøl Billy Hollis Dominick Baier Scott Allan C#.NET: UTVIKLING AV APPLIKASJONER I .NET MED C# Author and instructor: Arne Laugstøl. Instructor: Arjan Einbu In this 5-day course you will learn how to develop applications in the .Net environment. The course will teach you the C# language and how to use the platform to make applications that will run on the desktop with WPF(Window Presentation Foundation) or in the browser with ASP.Net. How to communicate with WCF(Windows Communication Foundation), and accessing data with Linq or Entity Framework is part of the course. MICROSOFT continued Arjan Einbu Designing user experiences: Principles and Techniques for Developers, Managers and Analysts Author and instructor: Billy Hollis This class is aimed at developers, but it includes design, architecture, and development topics. Technical topics are mostly covered earlier in the class, with design and architectural topics coming later. However, because the class stresses effective design and architecture, design and architecture topics are listed first. This course will also discuss changes to WPF and related technologies in future Microsoft products, as presented at the BUILD Windows conference that takes place before the class. Claims-based Identity & Access Control for .NET 4.5 Applications Author and instructor: Dominick Baier NEW This course introduces to the fundamental concepts of identity & access control in .NET 4.5 and covers the integration of these new technologies into the main application frameworks like ASP.NET, ASP.NET Web API and WCF. You will learn about patterns like single sign–on, federation, home realm discovery and identity delegation and how to implement them with .NET. You will learn how to implement authentication and authorization in web applications, SOAP services and HTTP⁄REST based services. You will learn about the SAML and JWT token types and the WS–Federation, WS–Trust and OAuth2 protocols. MS 70-516 - Real World LINQ - Data Access, Entity Framework and Beyond Author and instructor: Scott Allan LINQ not only changes how we build data access components with .NET, but also introduces new flexibility and expressiveness into the C# language. In this course we’ll see how LINQ works at a language level, and also how to use LINQ with XML and the Entity Framework. We’ll look at the tradeoffs to evaluate when building a data access layer with LINQ, talk about LINQ in the context of specific design patterns, and use LINQ features in a domain to implement better business logic. This course is a combination of lectures and hands–on labs. 70-513 - WCF 4.5 with Visual Studio 2012 Instructor: Sahil Malik This course is aimed at .NET developers interested in developing deep architectural and developer level expertise in WCF 4. In addition, this course will teach you about Windows Server AppFabric and Windows Azure AppFabric. This course also explains good archtecture practises and enables you to take Exam 70–513. Arjan Einbu 70-511 Windows Presentation Foundation - WPF/XAML Author and instructor: Arne Laugstøl Windows Presentation Foundation (WPF) is a .NET technology that makes it possible to create compelling applications with modern user experience. The course covers both the basic things and the advanced stuff you need to know, to be able to give the user a “wow” effect. This course will make you able to take the Exam in 70-511 Windows Application Development with Microsoft .NET Framework 4. Arne Laugstøl 70-583 - Microsoft Azure Author and instructor: Sahil Malik This course is aimed towards the .NET developer who wishes to further their knowledge about Microsoft’s cloud offering – Azure. There are many parts to Azure, Windows Azure (Compute, Storage, Virtual Machine), SQL Azure, AppFabric and DataMarket. This course methodically looks at each piece and shows you practical usage of what you can use today. Sahil Malik Gill Cleeren Daniel Marbach Shy Cohen 52 The Cloud Architect Master Class NEW Author and instructor: Shy Cohen The cloud provides many great benefits, but how should one leverage all this goodness? What are the options, benefits, and caveats for using the different services in the cloud? How should teams organize to better develop software for the cloud? How does one architect cloud–scalable systems? This class answers these questions and more, as it goes through the architecture, design, and implementation of cloud components and solutions. In the class you will learn about the different elements of the cloud, cloud architecture and design patterns, how to create robust, scalable, and secure cloud solutions, possible changes to your business model, how to migrate to the cloud, the skills you need to succeed and the supporting processes, and even cost analysis. Creating Windows 8 Metro Apps using C# and XAML Author and instructor: Gill Cleeren In this 3 day training course, attendees will learn how to build Windows 8 Metro style applications that offer a great user experience and interact with Windows. Developers will learn how to use the power of the XAML language to build their application all the way from the very first idea of the application to the deployment in the Windows Store. Throughout the course, attendees will see the relation between Windows 8 and other XAML–based technologies such as Silverlight or WPF. Creating Windows 8 Metro Apps using C# and XAML Author and instructor: Christian Wenz This three–day workshop will get you started in planning and developing Windows 8 applications and finally publishing them in the Microsoft Windows Market. We will showcase the most important APIs and put them to good use. We will also discuss good JavaScript code along the way. Christian Wenz Sahil Malik Enterprise Development with NServiceBus NEW Author and instructor: Daniel Marbach The course teaches you all the ins–and–outs of NServiceBus – the most popular, open–source service bus for .NET – now updated for NServiceBus 3.0. Used in production since 2006, NServiceBus is now used in hundreds of companies in finance, healthcare, retail, SaaS, web 2.0, and more. From basic one–way messaging, through publish⁄subscribe; providing solutions from transactions to cross–machine scale out; this hands–on course will show you how simple distributed systems development can be. Web Development in .NET - ASP.NET MVC , HTML5, CSS3, JavaScript NEW Author and instructor: Scott Allen/Arjan Einbu This course covers everything you need to know to start building applications with the latest Microsoft web development stack. We will use ASP.NET MVC on the server and see how to work with models, views, and controllers. On the client we’ll take advantage of HTML 5, CSS 3, and the best JavaScript frameworks, including jQuery, Modernizr, and more. During the course we’ll also see how to apply test driven development techniques, cover best practices for security, scalability, and maintainability, and see various tips and tricks for building a compelling user experience. Over 150 pages of hands–on lab material included. Advanced Windows Security Masterclass Author and instructor: Paula Januszkiewicz This exhaustive course covers advance Windows operating system security on Windows 7, Windows 8 and Windows Server 2008 R2, as well as comparisons to older Microsoft operating systems. The attendees get not only the workbook, but also a proprietary set of useful tools and techniques to use on their own system. NEW Paula Januszkiewicz Shy Cohen Architecture Clinic Author and instructor: Shy Cohen NEW It is a 5 day highly interactive event where you will learn, improve, and exercise software architecture skills, all based on the IDesign Method – a breakthrough, battle–proven approach to software architecture that has shown up to 80% reduction in the effort and time required for architecting, designing, and implementing software solutions. Through its application, it produces an easy–to–follow blueprint for the construction of a software system, while covering all the important aspects involved. Miguel Castro Windows Communication Foundation (WCF) Master Class NEW Author and instructor: Miguel Castro The training starts by explaining the motivation for WCF, and then continues to discuss in depth how to develop service–oriented applications using WCF. You will see how to take advantage of built–in features such as service hosting, instance management, asynchronous calls, synchronization, reliability, transaction management, disconnected queued calls, security as well as emerging technologies like cloud computing and the Windows Azure AppFabric service bus. 53 A unique course provider! Within the space of just a few years, we have established ourselves as Norway’s leading provider of courses for IT developers and project managers. We are purely an independent course provider and we do not sell other products or services. Our ambition is to ensure that participants get the maximum out of their course, so they can make substantial practical use of the training in their daily work. viSion To provide the world’s best courses for developers and managers. alone. We do not attempt to sell products or consultancy services alongside. BuSineSS concePt To offer developer courses in the field of IT that provide practical and useful expertise. courSeS offereD We hold advanced courses in, for example, C#, .NET, SQL, UML, XML, Java, Maven, TDD and Spring. In project management, we offer the most popular methodologies within agile development, including Scrum and Lean. Our unique combination of custom courses developed in-house clear Strategy We have a transparent strategy that aims to provide courses for developers and project managers - and that How to find us PROGRAMUTVIKLING MAIN OFFICE, OSLO Parking Entrance ADDrESS Martin Lingesvei 17-25, 1367 Snarøya. Our offices and course rooms are situated in the terminal building of the former Oslo airport. The photo shows the car park, bus stop and course rooms. For details of bus times, go to trafikanten.no and standard courses means that we can help reduce the number of course days and costs for our customers. EnroLMEnt oPtIonS www.programutvikling.no - info@programutvikling.no Bus stop tel.: +47 67 10 65 65 - fax: +47 67 82 72 31 foLLoW uS on twitter.com/progutvikling www.programutvikling.no/feed/news.aspx DeveloperFocus nyheter@programutvikling.no facebook.com/programutvikling COURSE LOCATION, LONDON De Vere’s Holborn Bars is one of the UK’s leading conference centres in London. Step through the imposing doors of Holborn Bars and sense you’re entering somewhere rather special – an inspirational place to hold conferences, meetings, training and assessment centres. Set in its bustling backdrop located near London, makes a lasting impression on guests and delegates while providing a comfortable and inspiring surrounding. You will be provided with cool water & mints in all rooms, freshly brewed tea & coffee with pastries & biscuits during your breaks and delicious lunches with a different menu prepared every day. In the lobby area there are PCs to catch up on some emails during breaks and free internet access is also available. Programutvikling AS. From left: Kristoffer Sunnset , Henriette Holmen, Henriette Motzfeldt, Jakob Bradford, Kjersti Sandberg and Kristian Flågen. 54 54 Arriving by train and tube The property is located on the north side of Holborn, close to its junction with Gray’s Inn Road. It benefits from excellent public © Mark S/ Wikipedia © Nigel Cox/ Wikipedia our vision is to provide the world’s best courses for developers and managers Programutvikling AS is located in the It-fornebu technology park at Snarøya. Lucky Byatt, CEO, DeveloperFocus, London transport links with Chancery Lane underground station, Farringdon station and City Thameslink station all in close proximity. Bus You can get to Holborn Bars by bus from London Bridge mainline station. The 521 Bus route stops opposite just outside the Sainsbury’s headquarters and Holborn Bars is a little further ahead on the other side of the road. ADDrESS Holborn Bars. 138–142 Holborn, London EC1N 2NQ EnroLMEnt oPtIonS www.developerfocus.com - info@developerfocus.com tel.: 0843 523 5765 55 Course overview OSLO www.programutvikling.no Microsoft continued Coursetitle Agile Days Feb Mar Apr May Jun Location *Accelerated Agile: from months to minutes - Dan North 2 Agile Estimating and Planning - Mike Cohn 1 *BDD - Specification by Example - Gojko Adzic 3 24 *Coaching Agile Teams Course - Lyssa Adkins & Michael K. Spayd 2 15 Effective User Stories for Agile Requirements - Mike Cohn 1 *Kanban Applied - Mattias Skarin 2 *PMI ® Agile Certified Practitioner (PMI-ACP) - Didier Soriano 2 Scrum 26 07 19 14 *Certified Scrum Product Owner - CSPO - Geoff Watts 2 Certified Scrum Product Owner - CSPO - Mike Cohn 2 *Certified ScrumMaster - CSM - Geoff Watts 2 Certified ScrumMaster - CSM - Mike Cohn 2 *Smidig utvikling med Scrum - Arne Laugstøl 1 25 07 05 23 04 03 10 3 *Test-Driven Development - Venkat Subramaniam 5 *Test-Driven JavaScript - Christian Johansen 3 Testing 13 3 *Whole Team Approach to Agile Testing - Janet Gregory 3 Design - Analysis - Architectures 5 *Agile Architecture and Design - Robert C. Martin 4 *Agile Design and Modeling for Advanced Object Design with Patterns - Craig Larman 4 14900 7500 IT Fornebu 18900 *WPF/XAML - 70-511 / 10262A Windows Presentation Foundation/XAML - Arne Laugstøl IT Fornebu 14900 IT Fornebu 7500 IT Fornebu 14900 IT Fornebu 14900 Price *Zero to Microsoft Business Intelligence - Peter Myers SharePoint *SharePoint 2010 and Office 365: End to End for Developers and Designers - Sahil Malik *SharePoint 2013 and Office 365: End to End for Developers - Sahil Malik 5 *SharePoint 2013 and Office 365: Only the new stuff - Sahil Malik 3 Java 14900 *Core Spring - Mårten Haglind 4 IT Fornebu 14900 *Effective JPA - Industrial strength Java Persistence with JPA 2.0 and Hibernate 2 Felix, Oslo 14900 IT Fornebu 6500 18900 *Test-Driven JavaScript with Christian Johansen 3 *Writing Ambitious Webapps with Ember.js - Joachim Haagen Skeie 3 C++ 22900 *Advanced C++ programming - Hubert Matthews 4 4 IT Fornebu 21900 *Advanced C++ programming - Hubert Matthews - Kongsberg 4 *Architecture Skills - Kevlin Henney 3 IT Fornebu 18900 *Brutal Refactoring - Michael Feathers 2 IT Fornebu 14900 *C++-501: C++ for Embedded Developers - Mike Tarlton 5 *Designing User Experiences: Principles and Techniques for Developers, Managers and Analysts - Billy Hollis 3 *C++11 programming - Hubert Matthews - IT-Fornebu *C++11 programming - Hubert Matthews - Kjeller *The Architect`s Master Class - Juval Lowy 5 5 *Aral Balkan’s Modern iOS Development 3 *Designing the mobile user experience - Aral Balkan 2 Microsoft 15 25 *70-513 - WCF 4.5 with Visual Studio 2012 - Sahil Malik 5 4 *70-583 - Microsoft Azure - Sahil Malik 3 18 5 25 *Claims-based Identity & Access Control for .NET 4.5 Applications - Dominick Baier 2 21 *Creating Windows 8 Apps using C# and XAML - Gill Cleeren 3 *Creating Windows 8 Apps using HTML5 and JavaScript - Christian Wenz 3 *Enterprise Development with NServiceBus - Daniel Marbach 4 *MS 70-515 Web-utvikling med ASP.NET - Arjan Einbu 5 *Web Development in .NET - ASP.NET MVC , HTML5, CSS3, JavaScript - Scott Allen/Arjan Einbu 5 # 26 IT Fornebu 18900 24 IT Fornebu 14900 15 *70-516 Real World LINQ - Data Access, Entity Framework and Beyond - Scott Allen *C .NET: Utvikling av applikasjoner i .NET med C 24900 Days Feb Mar Apr May Jun Location # - Arjan Einbu IT Fornebu Price 24900 21900 11 22 IT Fornebu 18900 14 IT Fornebu 14900 10 05 06 IT Fornebu 18900 IT Fornebu 18900 Days Feb Mar Apr May Jun Location 16 Price 24900 3 22 IT Fornebu 18900 3 17 Kjeller 18900 *C++11 programming - Hubert Matthews - Kongsberg 3 03 Grand Hotel Kongsberg 18900 *Effective C++11 Programming - Scott Meyers 2 Radisson Blu Plaza - Oslo 14900 *Programming in C++ with Mike Tarlton 4 IT Fornebu 21900 C *Deep C: Et kurs for erfarne C og C++ programmerere - Olve Maudal Database IT Fornebu 18900 *Databasedesign, -implementering og SQL-programmering - Dag Hoftun Knutsen 13 IT Fornebu 18900 21 IT Fornebu 21900 IT Fornebu 24900 IT Fornebu 24900 17 06 IT Fornebu 14900 15 13 18900 22 IT Fornebu 25 06 Price IT Fornebu 21900 24900 12 29 Grand Hotel Kongsberg IT Fornebu 06 12 21900 18900 03 14900 IT Fornebu IT Fornebu 08 10 19 17 24900 IT Fornebu IT Fornebu Days Feb Mar Apr May Jun Location IT Fornebu *Android Application Development 21900 24900 24900 Price Price IT Fornebu 24900 2 Days Feb Mar Apr May Jun Location 18900 IT Fornebu 18 04 IT Fornebu Mobile applications 24900 IT Fornebu IT Fornebu 5 5 3 London 28 *Programming Java Standard Edition - Peet Denny *JavaScript for programmers - Christian Johansen 22 04 *Spring and Hibernate Development - Mårten Haglind *Practical CSS3 - Chris Mills 19900 IT Fornebu 14900 3 15 27 10 18900 HTML5 - JavaScript - CSS3 02 11 IT Fornebu *JavaScript and HTML5 for Developers - Christian Wenz 18 24900 IT Fornebu 18900 Price Price 24 IT Fornebu 18900 24900 08 05 IT Fornebu IT Fornebu 3 10 Price 21900 2 24900 18900 IT Fornebu *Effective Scala - Jon-Anders Teigen IT Fornebu IT Fornebu 500 24900 *Play 2.0 for Java - Mårten Haglind 03 26 22 IT Fornebu Days Feb Mar Apr May Jun Location 15 24 13 Price IT Fornebu 5 Felix, Oslo IT Fornebu 17 5 14900 Price 14 Days Feb Mar Apr May Jun Location IT Fornebu Days Feb Mar Apr May Jun Location *Advanced Distributed Systems Design using SOA & DDD - Udi Dahan 5 IT Fornebu Days Feb Mar Apr May Jun Location *BDD - Specification by Example - Gojko Adzic 1 Felix, Oslo Days Feb Mar Apr May Jun Location *Test-Driven Development & Refactoring Techniques - Robert C. Martin *Windows 8 Camp - Peter Dwersteg *Windows Communication Foundation (WCF) Master Class - Miguel Castro Days Feb Mar Apr May Jun Location Testdriven development 56 10 06 Price Days Feb Mar Apr May Jun Location XML *Exchanging and Managing Data using XML and XSLT - Espen Evje Effective Concurrency Effective Concurrency - Herb Sutter Programming *Objektorientert utvikling - Eivind Nordby 10 22 Days Feb Mar Apr May Jun Location 2 Rica Nidelven - Trondheim 11 Days Feb Mar Apr May Jun Location 3 22 IT Fornebu Days Feb Mar Apr May Jun Location 4 26 04 IT Fornebu Days Feb Mar Apr May Jun Location 3 London Days Feb Mar Apr May Jun Location 4 19 28 IT Fornebu Price 14900 Price 18900 Price 21900 Price 18900 Price 21900 *Courses in the list that are asterisked are included in the framework agreement programme. All prices are in Norwegian Kroner. 57 courSe overvieW lonDon DeveloperFocus courSetitle agile & Scrum Acceptance Test-Driven Development with David Evans location 2 Price £1195 2 Holborn Bars Agile Estimating and Planning Training - Mike Cohn 1 Canary Wharf £700 Agile Foundations for Business Analysts with Allan Kelly 2 Holborn Bars £1195 Agile Retrospective Techniques - Geoff Watts 2 Architecture with Agility - Kevlin Henney 3 Certified Scrum Master - CSM - Geoff Watts 2 Certified Scrum Master - CSM - Mike Cohn 2 Advanced Scrum Master Course - Geoff Watts & Paul Goddard Certified Scrum Product Owner - CSPO - Geoff Watts 2 Certified Scrum Product Owner - CSPO - Mike Cohn 2 Effective User Stories for Agile Requirements Training - Mike Cohn 1 Game-Orientated Agile Learning (GOAL) with Geoff Watts & Paul Goddard 2 PMI ® Agile Certified Practitioner (PMI-ACP) - Didier Soriano 2 16 29 £1195 £1195 01 19 09 14 11 28 13 Holborn Bars £1195 Holborn Bars £1195 Holborn Bars £1400 Holborn Bars £1195 Holborn Bars £1400 Canary Wharf £700 £1195 Holborn Bars 20 £700 Creating Windows 8 Metro Apps using C# and XAML - Gill Cleeren 3 2 MOBILE APPLICATIONS Building Android Apps - John Denny £1495 MonoTouch and Mono for Android Course with John Sonmez Java Object-Oriented Programming in Java - John Denny 5 £1995 Spring and Hibernate Development - Kaare Nilsen JavaScriPt - html 1 £700 £1195 Test-Driven JavaScript - Christian Johansen 3 £1495 Using HTML5 and JavaScript to build Web Apps with Remy Sharp 1 £700 SharePoint Silverlight 5 Workshop - Gill Cleeren £2500 The Architect`s Master Class with Juval Lowy 5 Holborn Bars Developing Software That Doesn’t Suck: A Master Class on User Experience Design with David Platt £2500 USERGROUPS/ FREE EVENTS The Cloud Architect Master Class with Shy Cohen 5 Holborn Bars £2500 FREE EVENT: Software Project Design with Juval Lowy Windows Communication Foundation (WCF) Master Class with Miguel Castro 5 Holborn Bars £2500 Effective Concurrency - Herb Sutter microSoft .net Building Applications with ASP.NET MVC 4 - Scott Allen Building Applications with ASP.NET MVC 4/ HTML5 Course - Scott Allen Days feb mar apr may Jun 3 5 £1795 Holborn Bars £1400 Holborn Bars 3 USER EXPERIENCE & DESIGN Days feb mar apr may Jun 5 location Holborn Bars 11 Days feb mar apr may Jun location 4 Price £1995 Price £1795 Days Feb Mar Apr May Jun Location Price 3 Holborn Bars £1495 5 Holborn Bars £2500 Days feb mar apr may Jun 1 25 location Holborn Bars Price £0 Price Holborn Bars location Price 2 5 Days feb mar apr may Jun £1995 location Mobile Web Apps with Remy Sharp Holborn Bars effective concurrency 5 Days feb mar apr may Jun Node & HTML5 for a real-time web with Remy Sharp Designing User Experiences: Principles and Techniques for Developers, Managers, and Analysts - Billy Hollis 17 Price £1795 £1495 2 £1995 location 4 Price Effective C++11 Programming - Scott Meyers 5 Days feb mar apr may Jun Core Spring 3.0 - Kaare Nilsen Holborn Bars 19 £1795 £1195 location 4 Holborn Bars 4 Price 2 Silverlight Advanced C++ Programming - Hubert Matthews Location £1195 3 £1195 location Days Feb Mar Apr May Jun Holborn Bars Mono for Android Course with John Sonmez Holborn Bars Days feb mar apr may Jun 25 MonoTouch and Mac Development Course with John Sonmez 2 c++ £1495 Working with HTML 5, CSS 3, and JavaScript - Scott Allen Writing Effective User Stories Training with Kenny Rubin 13 Holborn Bars £1795 SharePoint 2013 and Office 365: End to End for Technical Audience - Sahil Malik 22 26 £1995 £1400 Architecture Clinic with Michael ‘Monty’ Montgomery 12 4 3 19 £1995 5 Working on a Scrum Team with Kenny Rubin 3 Price Design Concepts, Architecture, and Advanced Capabilities for WPF - Billy Hollis Holborn Bars Advanced Windows Security Masterclass with Paula Januszkiewicz location WCF - Windows Communication Foundation (WCF) 4 with Sahil Malik £1400 Days feb mar apr may Jun Days feb mar apr may Jun 5 Holborn Bars architecture - DeSign - Security - maSterclaSSeS www.developerfocus.com C #.NET: Developing applications in .NET with C # - Arjan Einbu 2 Succeeding with Agile - Mike Cohn 58 microSoft .net Days feb mar apr may Jun DeveloperFocus LTD, London by ProgramUtvikling AS Price £1995 location Price 22 Holborn Bars £1495 22 Holborn Bars £1995 ENROLMENT OPTIONS Tel.: 0843 523 5765 www.developerfocus.com - info@developerfocus.com 59