Why Microservices and continuous deployment (delivery) is win / win

Microservices is nothing new but has become a standard in many systems during the last years. There have been trends in architectures some engineers use them as a silver-bullet. They used the Architectures even if not required by system nor requirements. DNA, 3-teir, SOA, DDD, CQRS, Onion architecture and so on. Is Microservices just a trend that will destroy systems because people will use it as a silver bullet? Maybe! The future will tell. Let’s investigate why microservices will be a good benefit for the continuous delivery approach.

 

As most of you know by now, is that continuous delivery (CD) is an approach to deliver functionality in a smooth and almost automatic throughput. CD is an extension to Continuous Integration (CI) that are the configuration that tells you something will happen as soon you check in your code in to your source control. It can run tests, if it fails it will not publish the system or do something else that’s important four you and your business. I use CI to tell the build server to build my system, run some test and send it to production with continuous deployment.

The different between Continuous Deployment and Delivery is just that deployment automatically deploy your code when delivery just give you a package that you can manually deploy

softhouse_CD_loop2_new3

As always it is requiring discipline in your mindset as well in your code. It will be forced since you release everything in to production. So why is microservices a win/win with this approach?

The opposite to microservices architecture is the monolithic systems, it’s a system with a server where all your business capabilities are grouped into one big product. With continuous deployment and delivery, we just need to release lots of code and run lots of tests, this can be tricky for the benefit of a smooth delivery. Maybe you need to migrate your database, change many contracts and increase a big and complex domain model every time you will push some new feature to your CI/CD configuration. You can save you lot of problem with feature toggling but you still need to release the whole system. This is when the micoservice architecture will save you from lots of headache. Micorservices are like small systems with their own architecture, components and tools needed for your business capabilities. I often explain them as CRUD services for different business areas like a product service, invoice service, order service, authentication service and so on. I also like to refer to them as a SOLID principle architecture on an architectural level rather than just on the code level.

Microservices shall have single responsibility (S) for its business area, it shall be designed open for extension (O), like version controlled REST APIs. A new version extends its functions. With backward compatibility you will have a subtypes of the API (L) and so on.

scaling_agile_model1scaling_agile_model1

Microservices allows you to deploy specific services instead of the whole application when minor changes is applied. You simply deploy that service and only that service code. If you use containers like Windows Containers or Docker you have even better CD benefits though you don’t need to replace any files on the already running service, you just deploy a new container and can easy activate that one as soon you feel comfortable doing so. With other tools like Azure service fabrics you will get even more nice supporting tools for crashes, rollbacks for versions if one deploys fails etc…

Microservcies also benefit from less merge problems despite the fact that it is simple to use different microservices within your team. Discipline implementation of feature toggle minimize the feature branches so you really go Lean with the whole architecture and spend less time on configuration management.
Summary:
– Less code within the codebase

– Less problem with merges if using feature toggling, version handling instead of     branches

– Less problem with deploys though you now deploy the whole system, just a   small part of it

– You will have benefits regarding scaling each heavily loaded service instead of scale up the whole system

And lots more… But remember, this is not another silver bullet, it’s just a bullet of many

Who is Johan Normén?
Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden. He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated as the top 10 developers in Sweden in the Swedish version of Computer Sweden 2015

Twitter: @Johannormen

 

 

 

 

Get rid of some concerns and unnecessary waste when coding for Continues delivery with ASP.Net mvc

I love simplicity I love the creativity of doing things as simple as possible, with the knowledge I have today. I know my knowledge is limited so therefore I always try to get new ideas, networking with people to get new input to create something even better or simpler than I did before. It is my way to continue learning and to improve and grow within my domains.

I do like source control frameworks like Git but I do not love the idea of spending too much time on management of branches, migrations and so on. Therefore I’m in love with the idea of creating SRP modules (single responsibility Principle). I want the integration part within continuous integration to work as smoothly as possible in order to get rid of unnecessary waste from merge-management and so on. This is another reason why I love the idea about Kanban regarding work on one task at a time combined with DoD (Definition of Done) before you start another one. When doing that, you will have finished components, which you can release without any problem. There is no point in not releasing, or there is no harm if doing so, unless it’s a change request of already existing feature that can’t go live at the moment.

No other users will use your components as long it’s not connected to an existing released feature. So in theory there is no problem to work with your main branch most of the time, you do not need to create a new feature branch and handle merge if that branch comes behind and such. It’s just bad waste.

Think of ASP .Net MVC Controllers, the only feature the controller gives you is the action you call, right? So if you release a controller that no one knows exist then the feature can’t harm the system right? Each controller has its own view, its own code, and if you use CQRS or Micro Service Architecture you mostly do not share functions with other controls or modules. The same should be true for other design-patterns like DDD-modules. What happens if you release a controller and all the parts are not fully done yet? Nothing right? It’s just there, it occupies some bytes on the server but it won’t break anything. Why spend time on administrations, configurations, management work regarding different branches when there is no need? You can let those controllers and features go live in your continuous integration, delivery and deployment workflow. OK, if someone manipulate the URL they might trigger this controller and that’s not OK. So I made a tiny little Action Filter that can handle this for me.

What about release you Controller module and only get access to it if a debugger is attached or you are in debug mode? and as soon you put the code in release mode, your controller will simply return 404 status back? That would be great safeguard if someone accidentally figured out the url to the not-done-but-released-feature.

This can be done easy with an [NoRelease] action filter attribute for the control.

1

As soon you try to access this isolated controller action it simple give you a “404 page not found” page if you try to access it in release mode. And gain full access if in debug mode. Other developers can also access your code it you want them to test something for you. I also made this action filter testable and loosely coupled. Which means you can create your own components that need similar functionality.

Maybe you love the idea of reading a configuration that says “release” or “debug” mode. Maybe you want to use as I do in the code example below; check if a debugger is attached or not.

2

I created my own DebuggingService (you can call it something else off course) that just check if the code runs under Debug Mode if it does it’s just returns and code will be executed as normal. If it runs in other modes like “release” mode it will throw an HttpException with the 404 status.

3

Since I started using this attribute I have had no problem to commit and push my features to the main branch and get it release with the nightly build. I spent less time on branches, merges and other stuff and I could focus on delivery rather than management. This because I love the idea of  low complexity in my source control structure. I know it’s not much, it’s no rocket science but a nice to have feature for a more safe integration and deployment of code in your continues delivery life cycle without spend to much concerns that code got released and spend time to prevent that.

4

Who is Johan Normén?
Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden. He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated as the top 10 developers in Sweden in the Swedish version of Computer Sweden 2015

Twitter: @johannormen

“The Big Rewrite” an open discussion at Swenug Gothenburg

Yesterday we had an interesting meeting at the Swedish .net user group Swenug in Gothenburg. The them was “The Big Rewrite”. Instead of allowing a speaker to talk about something interesting we chose this time to make it as a discussion meeting. Two groups in two different rooms had an open discussion regarding the big rewrite.

What’s the biggest problem regarding rewrite an application to new technologies? how can we work to prevent major rewrites? What does the business people in the organization act and so on.

FullSizeRender (4)

Every one agreed that if you need to rewrite something you really need to know what requirements you really need in the new version. To know this you need to measure what features are mostly used today. We need to know if we can change it to better features. We most understand what featured we can delete. We need to understand the ROI of a rewrite.

It’s also important to see a rewrite as a new project not just a rewrite.
Maybe go full agile, use lean startups and so on.

But the most important part is that you can’t just rewrite a product if the whole organization can’t rewrite them self. In other word, it’s not only about write new code you also need the whole organization support to understand what the new rewrite is all about etc… There is no use to take the old backlog and just add new code.

How to make Lean UX with A/B testing fun in ASP .Net MVC? Part 1

A/B testing is jargon for a randomized experiment with two variants, A and B, which are the control and treatment in the controlled experiment. It is a form of statistical hypothesis testing with two variants leading to the technical term, two-sample hypothesis testing, used in the field of statistics.
Source: https://en.wikipedia.org/wiki/A/B_testing

download
And some other nice explanation:  https://vwo.com/ab-testing/

It’s really hard to change or add something and know if it’s a success or a failure before we have test it on real users. In Lean UX it’s important to do this test process as cost effective as possible by decrease unnecessary waste without skipping important work. The best feedback is when you let people use it and see if they like it or not. You can test wireframes, design sketches but that’s not the same as test It for real in real action. Many users will see this cool new thing as a sketch and think; that looks really cool! but is it really that cool when it’s implemented and live in action? Not all the time, maybe some times but we can’t be really sure before we can test it. In Lean UX A/B testing is one approach that can help you get early and rapid feedback if the idea is great or just a new pain for the user. The core idea of Lean UX is to aim small and hopefully shoot big. In other words, do as little as possible and test it before you spend too much time on your ideas.

Let’s see how ASP .Net MVC can make this by just add very little code to make A/B testing fun and easy. 🙂

I love to use the creativity to think; – how can I add something simple that works and also gives me many other possibilities? It’s some kind of evil obsession I have and that’s also what I love most about software design. In this case I will show you how you can add some code to make your page not only A/B test friendly you can use this idea for other things like themes, change layout bases on personalisation and you can even use it to give your user some luxury in e-commerce sites and so on.

In the software, there are thousands of ways to solve the A / B testing. What I found very useful that also decrease waste from more complex solution is to copy the view you want to test to a new location and add changes to that new file, and then let ASP .Net MVC show just that new view based on some business rules. I also want less code, and it shall be easy to remove my test-view without too much work. Therefore, I want to use the view folder and it’s files and not manipulate controllers if not needed. It’s more waste to add new controller if you can use the the you already have when you want to test another layout. My approach doesn’t stop you from A/B test controller as well if you want to add that feature in the future. Remember I’m fan of Agile and Lean approach and principles like KISS (Keep it simple stupid) and YAGNI (you aren’t gonna need it). That’s why I keep things as simple as possible and expand it if more advanced featured is needed later on. 

This is my goal:
Let’s say you want to test your home view, you can then easily add a new folder inside the view folder for example “B Testing” and add your home folder and its view in there. And then add some changes to it… DONE! Cool right? In less of a second you just made a A/B tested home view. Sell it for 5h of work 😉

ab_1a

To make this possible I want to let my view engine look for views in special folders but fallback to the original if there is no files in this special folder. ASP .Net MVC do this by default. Like this setup:

ab_1

I call the variable theme because I can use it for other purpose than just A/B testing too.

Lets create this
Go to your ASP .net MVC project and add a new class that implements the interface IViewEngine from System.Web.Mvc. And implement the view engine code.

ab_2

Then add the folder locations within a method. I call mine CreateThemeRazorViewEngine

ab_3

Then I create a RazorViewEngine and configured the Partials, View and Master locations to the new folder structure of mine. In this case ASP .Net MVC razor will act as normal but start looking for files in my theme folders if they exist.

I love the factory and provider pattern so I will use those. As factory I will use DI/IOC framework, I like Autofac but you can use whatever you like the idea is the same.

I start by creating one IViewThemeManager interface with one method GetTheme. This interface is the one we use on all the ViewManager providers that will handle all the business rules based on why you want ASP .Net MVC call for another view or partial.

ab_3a

And then I implementation my factory method to the ViewEngine with the IOC and some error handling.

ab_4

If there is no IViewThemeManager provider configured it will give me null and return the default Razor view engine. That’s why I use the _fallbackViewEngine. If there is an IViewThemeManager provider registered I ask for the Theme which in this case is the folder name I want the view engine to use.

After that we need to tell ASP .Net MVC what Engine it shall use so we need to add some code for the methods implemented from IViewEngine

ab_5

In this case I call my CreateViewEngine that will return either the default engine or mine.

Here is the full file:
ab_6

Now go to Global.asax and clear all View Engines and add this new one in Application start.

ab_7

We can now run the project and everything will work as normal. This because the resolver can’t find any IViewThemeManager provider yet and fall back to default.

ab_8

Now it’s time to add the A/B testing business rules. In this case I want to know if the “Learn More >>” button gets more clicks with another text. So I want some user to get “Learn more >>” and others “Want to learn more?”

First I copy the index file in my home folder to a new home folder under “B-Testing” and just change the text on the button nothing more.

ab_9

ab_1a

Then I create my IViewThemeManager provider. My ABTestingViewThemeManager.

ab_10

After that I will add some simple rule. In this case I just send them to my “B-Testing” view folder if the date time second contains number 2. (Just for the test, ok? Real A/B testing might need more complex logic and maybe even som settings, depends on how important the function is, remember don’t make it to complex if not needed. KISS 🙂 )

ab_11

After that I configure my interface and provider with autofac.

builder.RegisterType<ABTestingViewThemeManager>()
.As<IViewThemeManager>()
.InstancePerRequest();

And when I run the page and if the DateTime.Now.Second contains number 2  it will use my B-Testing view instead.

ab_13 ab_12

I also added the view rules for partials so you can just test a partial as well if you want to, you don’t need a full view, you can use the default one that just calls for your partials.

Just copy your A/B partial to “B-Testing/<your controller folder>” and this code will take care of that too.

And if you use partials to render templates for example angular you can even test unique directives and web components if you want to. Just add the angular template in your partial and copy just that partial and its folder structure to the “B-Testing” folder or what name you prefer.

You can also add a provider that will give some user a whole new view, layout or webcomponents layout if they are lets say “pro users”. Just add a pro user folder and create a new IViewThemeManager provider that check if the user is of the role pro or something like that.

Happy play around.

Who is Johan Normén?
Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden. He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated as the top 10 developers in Sweden in the Swedish version of Computer Sweden 2015

Twitter: @johannormen

The ultimate agile team constellation

I often got the question “What’s the perfect team?” and the answer is as always “it depends”. The reaction is usually the same; some angry looking eyes. :-), I wonder why?

I can’t answer the question “What’s the perfect team?” but I can give you some tools and ideas in the process of creating a great team. But then it’s up to you to do all the necessary work.

First you need to destroy the fixed mindset of the ideas with roles, process and tools and try to see people in your organization as different talents that you have in your portfolio to succeed with your main — vision and goal. If you can’t let go of your fixed mindset then I can’t really help you. I guess you are reading this blogpost just because you have tried many times creating teams with this not so agile mindset and it did not go as you expected, right? So get rid of tit for a while and we can continue.

Don’t see people as front-end, back-end, designers and testers etc. The layers and the silos creates trust issues, creates bad WIP (work in progress) limits, creates a complex team before a simple productive team. It’s harder to replace layers, and people with a special role if she/he get sick and so on. If your main tool to handle team maturity is reports, forecasting then you are in trouble. Those things is an early indication of ineffectiveness in your organization.

As one of the Agile manifestos point out:

“Individuals and interactions over processes and tools.”

This is why I want you to erase the idea of roles. You can add roles later on if you want to but for now you have no clue why you need one therefore there is no roles ok? Good 🙂 . All you need to know is that you need talents to succeed not roles. You need individuals that can interact with each other not build walls with layers and silos ok? Cool, lets go on.

“Each team should be full-stack and responsible for taking a component from idea right through to production. Don’t divide by layer (frontend/backend/data) nor by activity (analysis/development/testing). Both layer and activity boundaries have rich communications across them. Remember the central importance of Conway’s Law.”
– Martin Fowler

Next step is to understand how your employees and your self are as person and how to motivate the uniqueness within each of you, to do so you need to understand what motivates us. Dan Pink have a wonderful RSA Animation and presentation about this. I suggest you take a look at it before reading further because it will help a lot. https://www.youtube.com/watch?v=u6XAPnuFjJc

“People can have two different mindsets, he says. Those with a “fixed mindset” believe that their talents and abilities are carved in stone. Those with a “growth mindset” believe that their talents and abilities can be developed. Fixed mindsets see every encounter as a test of their worthiness. Growth mindsets see the same encounters as opportunities to improve.”
― Daniel H. Pink

To understand what motives each person in your organization you need to understand them better. Get in touch with their intrinsic feelings. There are many tools for this. One of the easiest tools is using the same ide as with personas and add some gamification in work. Instead of just identify personas for the project you shall work on do it with your organization. Let each individual create their own personas profile with the same main principle and hang in on the wall so everyone can see it and get more knowledge of each other. What’s their motto, what interests do they have? What’s character traits does each individual have? Skills and talents? It’s very important to understand your team mates, because you shall work with them. 🙂 In agile you take command to lead together with your team mates to do so you need to understand how they are, there positive sides, negative sides so you can easily together help each other feel well and get respect for whom you are. The same way you create respect for your family and children of your (if you have any.). Because the domain is called work it doesn’t mean that it shall not have the same principles needed as with the domain family. There are many more tools for this in Agile and Lean Team Startups. But let’s talk about that in another blogpost.

Untitled-1

As soon you know more about the person, who she/he is its time to go to next level. In the real world you always have your employees for loan. You don’t own them; they are there for you if you don’t motivate them they will leave for someone else that does. People will come and go, therefore it’s important to understand that we need to be open for beginners within our organization and a proactive plan to make them step up towards the expert step.  I don’t like the idea to rank a person as a whole. Like businesspeople do with titles as Junior and Senior. What does that say? What’s in the gray zone between this junior and the senior? And when does a junior become a senior? When he/she knows more than the boss or have worked for ten years?  If you think you can work with the same thing you did in one year repeated nine times and then think you have ten years of expertise, you are wrong. Sure you have worked ten years but you are for sure only an expert repeating the same thing over and over again. So as with the roles get out of the box and get rid of the ideas regarding junior and seniors. Business peoples just created them so they can put different prices on their head nothing more.

“…Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done…” – 5th principle behind agile manifesto!

What I found very useful is the Dreyfus model. Dreyfus model does not rank you as a whole it just ranks you for each individual skill and talents of yours. For example, you might be very good in golf and maybe an expert in golf. But for the talent painting you might be novice. You can draw some lines but you are not very good at it.

Dreyfus models have different states in each individual skill of yours. Dreyfus have five states each of them different mindset based of knowledge, experience and skills.

1. Novice – Need rules and clear guidelines.
2. Advanced beginner – Need less rules , uses guidelines, but without holistic understanding
3. Competent – Develops conceptual models, sees actions in long and short terms
4. Proficient – Sees situations holistically, will self-correct based on previous performanc
5. Expert – No longer relies on rules, guidelines, or maxims, works primarily from intuition

dreyfus-model-of-skill-acquisition

Do you want to know more?
Read more:  
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2887319/
or
https://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition

As soon you have the tools and knowledge about your organization and people’s talents it’s time to create the team.

The best principles for combine talents is like creating software, don’t decide architecture, techniques, platform before you understand the project. So DON’T create a team before you understand the vison, goal and type of software. Is it desktop system? Does it need many integration specialists? Is it a Webb tool? Is it e-commerce? is it a highly transactional system? Does the customer use any own system we need knowledge about? Like Navision? CMS and CRM of any kind? Is responsive design a requirement? This is typical questions in a startup and as soon you know this you can create your fabulous team. Try to pick people as full stack as possible or at least people that can work cross many functions. Like the image below. (The color indicate a unique talented individual, not a role. The columns just indicate required skills needed for the project, they are not roles just requirements for the project. It needs design, it needs a front-end and so on…)

4
The above image describes this.
Blue person has skills in design, front-end development (sass, less, html, javascript) and understand testing. The orange person has some knowledge of design maybe a novice in design but can help with design if needed, the person also has skills in back-end coding and testing. The green person has little talents in front-end and more skill at back-end and testing. Can be a great mentor for the team regarding TDD, system testing, regression testing and so on, And the yellow one is more like a full stack person that can help in all areas if needed.

Tips: It’s not good to put only experts in one team, novice in another. Spread them out if you need to increase the skills overall in your organization. The best suited person to help another to go from one step to the other is the person that just left that step.
So if you need someone to understand angular for some front-end work it’s easier to add an advanced beginner to the team if you also got a novice talented angular to the team, instead of just add experts in that area. The advanced beginner can more likely explain the problem better for the novice person over an expert talented person. Because they mostly talk the same language.

As soon you have your team-setup you can start asking your team what necessary service functions they need. Service functions can be cross-functional mentors, it can be a product owner if the team think they need one, it can be an agile coach, a team leader or scrum master if they feel they need that kind of service. This is a big change from the old traditional organization design. In this case the team create the process. It’s not strange at all even if it feels little odd, the team are the people that shall make it possible so the only correct thing is letting the team get what they need to succeed.

Remember that a development team in agile is not just developers. People in the whole process of creating a project are the development team even the service function competences is part of the team.

Remember, a named method is not a silver bullet so you need to be open minded. You can simple collect information by checking what correlations and interaction you got between the customer and teams. Maybe you need a waterfall approach, agile-waterfall, scrum, scrumban, lean, XP or your own setup of tools and processes. Maybe you just need to use Kanban and no project owner and such because the team are the domain experts together. Why add extra waste when there might be no need for it?

IMG_0515 (1)

It is important to not fall back in old ideas like the project manager where he/she is supposed to handle everything. Then you are back at the main problem again and you have just wasted your time reading this blogpost. 😀

“We can’t be afraid of change. You may feel very secure in the pond that you are in, but if you never venture out of it, you will never know that there is such a thing as an ocean, a sea. Holding onto something that is good for you now, may be the very reason why you don’t have something better.”
― C. JoyBell C.

Who is Johan Normén?
Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden. He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated as the top 10 developers in Sweden in the Swedish version of Computer Sweden 2015

Twitter: @johannormen

Thank you Sweden for the nomination of Top 50 best developer contributors in Sweden.

Today I woke up with a notification from my father. It seemed Swedish people had nominated me for contributing to Sweden all this year within development.

FullSizeRender (1)

I’m flattered and honored about this. Hard work will pay itself 😀
Because of this I want to tell you my story and hope other finds it inspiring.

I started my life with an Commodore 64 in the age of 6. I really thought that computer games were cool so my curiosity increased a lot. I didn’t know much about game development; but I know I was a hell of a player. So I start look into game design. At that time there was very little information about all this computer thingy, few books about creating games. So I needed to find other people with the same interest. I did 6 years later at the age of 12. I got in contact with Martin Hedlund. He was older than me but hell of a programmer and designer on Amiga. (Today he is more famous as one core developer for the 3d engine of battlefield etc..). He showed me and my bother (Fredrik Normén) design ideas and some programming. We spent many days and years networking with him. I started to design games and manuscripts while my brother took the coding part. Later on I met this amazing graphic designer Krister Karlsson. He and some friends worked on a computer game named Shenandoah. They really got me even more inspired. Krister as a designer and Aaron as the core developer. (Read more about Krister and his game here:
http://www.gamereactor.se/artiklar/137944/Drommen+om+1993/ In Swedish).

Me and my brothers game development ended because of school. We did some demos, prototypes, and graphics though. I’m not sad that we never finished the games, I’m glad we did not, and all the knowledge it gave us.

12088333_10153504614456273_9171063667102465768_n

In the age of 16-17 I got into Media Production school in three years. Under those years we started up a study coffee that was open all day and night for students. They got access to computers and books etc. It was an initiative by the school. We also had this class room “214” as we called it. It was the number of the room. Some geeks sat there all night using computer for surfing the net, play games like MUD and so on. Me and my brother was there working with html and web design. We did our schools first webpage ever J and few people understood html at that time (95-97). So I started to work as a web designer and technical support for an e-commerce company 97-99 directly after school.

After a while I started to code more than I did before. Thanks to all this knowledge regarding game design, objects, modules programming was easy to learn. So in few months I was coding front-end, back-end, did database modeling and even stat to inspire other people to create better design with the code. Why do all this lines of code and stuff when you can do it with objects and so on? Went through my head. The Single Responsibility principle (SRP) was in my blood thanks to the modular game design requirements and so on. As soon Microsoft announced next generation internet (ASP+) I rushed in to the beta versions of visual studio. I was one of the first people in Sweden download it so Computer Sweden called me and wanted me to do an article about it. ASP+ ended up with the name .Net later on.

I really loved UX, Design, Architecture, database models, clean and nice designed codes and components. It was cool and really amazing. I loved new ideas, new thoughts so I start networking with more people around the world. Java people, Microsoft peoples, designers and so on. I also was one of the top contributors on the leading developer forum “Pellesoft” around 2000-2005. I wrote articles, answer questions. This time I met Patrik Löwendhal (Who got nominated as Top 1 best contributor to Sweden this year 2015). I also reviewed around 22 .Net books for Wrox press at this time. But never wrote my own :/ sadly.

I loved this new world, object orientation, architecture, UX problems, code that really needed to get easy to maintain and so on. So I started to contribute to some open Microsoft projects like Enterprise Libraries. The name at that time was Application Blocks. As soon Microsoft started to love XML and added a sea of configuration requirements for those Application Blocks I leaved. I hated when simple things got complicated when not needed. I think I got this from my ideas and experience about user experience and so on. I used the same ideas and thoughts in my code and architecture decisions, and still do.

The year was 2003 and I wanted to start consulting, help people to be better programmers and so on. To do that I need more knowledge then games and e-commerce systems. At this time, I also met Johan Lindfors (He worked at Micosoft). We took lunches some times when he visited Gothenburg and talked about user groups and other cool stuff. He mentioned that a person called Joachim Rossberg was also interested in creating a user group so I talked to him and my bother. And this is how the project to create the biggest user group in Sweden got started. There was a User group half active in Stockholm with the same name we wanted to use so I asked if I could use it as well. It was ok the name was SweNug. The main goal with SwenNug was to let people know there is more than just what Microsoft Sweden tell you there is. We wanted people to know that ORM exist, Dataset is the worst idea ever and Domain Driven Design will help people create better and more designed domains. My goal was to make SweNug the biggest user group in Sweden.

swenug

At the same time Johan Lindfors offered me, my brother, Fredrik Klarqvist, Patrik Conrneliusson (Fredrik and Patrik was known by the community swedsecure. They loved security) and Andreas Håkansson (known as TheCodeJunkie and the Nancy creator.) the opportunity to get the .net alpha 2.0 platform and build a reference architecture based on it for Microsoft. But the platform should not just be a reference architecture, Lindfors also got this idea that it shall be a product for people to use. He had a cool idea that almost looked like Stackowerflow but even before Stackoverflow even existed. We never finished this job because Microsoft got to many complaints regarding promoting ASP .Net 2.0 features before people even understood ASP .Net 1.0 so they stopped sedning us new versions and documents regarding ASP .Net 2.0. Sadly but true…

With all this energy to do good for the developers in Sweden me, Patrik Löwendhal, my brother and Dag König (Now employee of Microsoft Sweden) had an event in Gothenburg called Swenug Architecture Summit. It was an open space event. We got .net people, java people at this meeting. This was the first time I met Jimmy Nilsson (Knows as the Domain Driven Design guru), Roger Alsing (now known as the creator of Akka .Net). We talked about Relationship mappers, Domain driven design, design patters, SOA and lots more. It was a milestone for all of us in our growing carriers.

To not make this story to long I will speed up the 12 years after 2003.
I talked to seminars like, Swenug, nForum, Developer Summit, Road shows with Microsoft, road shows with Dotway, Pimp My Code with Cornerstone and lots more. Contributed to Microsoft projects, educated students and so on. Steve Ballmer even had a world tour when he talked about an Azure solution I created for Volvo IT and the Twilight Movie. Iit has been wonderful geeky years J And I could not have done all this without all you guys I mentioned in this blog and others I forgot to mention as well.

And here I am now… 2015 with the nomination as top 10 contributor for the developers in Sweden.
http://techworld.idg.se/2.2524/1.639803/sveriges-basta-utvecklare

I can say that, it has been fun, lots of work and I have met so many wonderful people out there.
That have helped me as well, I got inspired by them, and I hopefully inspired some of them too.

And thank for all of you who have nominated me…

How can I add style rules to give visual feedback in TFS Online regarding untouched working items?

I love design and I love visual reports and alarms if something is failing. I do not love text reports though they don’t give much based on real time information and you must read lots of text to say some few things. That’s one of the biggest ideas I love about Kanban boards and the creativity for teams to make it more self-reporting by look at the board.

In this blog-post I will give you a tips how you early can indicate if a user story hasn’t been change for a while. Let say you have a velocity of doing x-total user stories a day. Something happens on the way and you want it to be visual for the whole team.  Maybe you thought you could handle more user stories than predicted in the sprint? Or in your daily work? Maybe you have spent to many days on a user story without anything happens to it and want to indicate a visual risk?
And to indicate this you want the Kanban board to tell you early that you might be in trouble so you can fix the problem early in the iteration.

You can simple visual this by adding styling rules in TFS Online that change the color of the User Story or the Task if you want to.

I my case I love the idea to indicate a warning if the card hasn’t been processed for a while. First I want to indicate it with orange color that tells me: “Hey, we might be in trouble here, but we are not in the critical state yet! :/ And I also want to know if my User Story is in a critical state. “hey, dude this User story takes too long, there is a high risk here! 😛 ”.

3
Like this image above.

TFS Online does not have all the feature I wish for when created this blogpost. So I will use the “Changed Date” attribute on cards. What I really wanted was some kind of Deadline Attribute. If using #NoEstimate and 1-2days UoW (Unit of Work) approach it could be set to 2 days from the date when you approved it, and start working on that item. Or if using Scrum Model and add estimated times on the tasks you can set the deadline to the time summarized by all the tasks and some extra risk factor if wanted.

I used LeanKit before and added deadline to cards that the customer needed to handle before it was in the Definition of Ready State. To let them understand that something needs to be done in two days, if not we need to put it back to the backlog. Or a deadline for people that love to compete with them self-regarding their own task in a more “Gamification at work” way. Or if working with other stakeholders like integration partners and need to push them to be done with some tasks before a certain date, though they had not the possibility to go full agile with us.

0
This is how it looks like in LeanKit if the end date is near. It gets yellow. If not, it’s white and over time it’s red. I love those kinds of Visual Elements and LeanKit have many nice features for it. So let’s hope TFS Online soon will have too.

To add similar rule, you simply go to the board settings.
1
After that I added two rules.
I called them ”to Late” and “Out of Time”. The naming can be something different I just used them for this demonstration.

2

In the Styling rule I used the “Changed date” and @Today syntax. @Today is just the date of the actual day. You can use more advanced attributes if using TFS on premise.

For the “Out of Time” I added the orange color and wanted to get indication if the item hasn’t changes within a day.

Changed Date <= @Today -1

2a

The Card will indicate change when it’s moved to different states, when text is changed etc. But sadly it will not trigger changed date if a related task has been changed, and that’s sad though in Scrum projects you mostly work with many tasks for each user story. And it would be nice to indicate on the User Story level if a task has some rules you missed.  Eg. You might have forgotten to change the remaining time, and to indicate on the user story level that something is wrong would be a nice feature to let developers know that they have missed this. The remaining time is important for the burn charts etc.

And for the “to late” I did the same but red color and -2 days.

Changed Date <= @Today -2

You can have higher numbers if you like to. I just add -1 and -2 for the demo.
2b

And here is how it can look like in action.

You got the warnings. One user story is near critical state and the other one is already in critical state.
As soon you move the card it will change the date and the result will be normal again.

34

Have fun playing around…

More tips:
How to color a card based on Tags or Title containing some kind of texts:
https://rockjohan.wordpress.com/2015/10/09/how-to-color-cards-in-microsoft-tfs-online-like-add-color-to-a-lean-hypothesis-card/

How to add DoD (Definiton of Done) you your columns in TFS Online
https://rockjohan.wordpress.com/2015/10/04/definition-of-done-dod-in-tfs-online/

Who is Johan Normén?
Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden.
He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated two time as the top 100 developers in Sweden in the Swedish version of Computer Sweden.

Twitter: @johannormen

How to color cards in Microsoft TFS Online. Add color to a Lean hypothesis card.

I think most of you have heard of Lean Startups and maybe also UX for Lean Startups. Ok if not I will explain it shortly.

In Lean Startup you use something called hypothesis instead of User Stories if using Kanban or any other tools. The main different with a hypothesis regarding a User Story is mostly the way you describe it and its purpose. A user story template often look like this

As a <type of user>, I want <some goal> so that <some reason>.

User stories are short, simple descriptions of a feature told from the perspective of the person who desires the new capability, usually a user or customer of the system.

In Lean startups you use hypothesis that is an assumption when user story is not.
Lean Startup strategies are designed to test assumptions about customers and the market target.
While User Stories are the description of a technical solution that we can test in our system then Lean hypothesis is a description of an assumption we need to test on the market, the users.

The template looks something like this:
I believe [target market] will [do this action / use this solution] for [this reason].

You simple add that description on your card (post-it) or digital Kanban board. I often want different colors on my cards to increase the visualization better. Bugs are red cards, things I need to look up maybe blue cards, user story a yellow card and hypothesis maybe green and so on. I want fast feedback what’s going on when I look at a Kanban board that’s why I add more visualization to it so I don’t need to spend too much time understand what’s going on in this sprint or iteration.

In Microsoft TFS Online you can’t change the color of the cards based on card types when this blog-post is written (2015 Oct 9). But you can change colors on the card based on styling rules in TFS Online. The cool thing with styling rule is that you can add criteria based on mostly anything that exist on a card and make it show up in different colors. In this case I use Tags and the contains criteria in this demo to add another color to my hypothesis cards. I will show you how to do this in TFS Online.

First of all open you TFS Online project. Add a card. In this case I added my first hypothesis .

1

Then go to the board settings (The icon in the right corner (1)).
2

Go to the Style option (2) and add a new rule (3).
After that just add your criteria. Remember that you can add many different criteria. In my case I will first add a criteria for a tag. And next add a criteria that check if title contains some words. Like the words “I believe” as the hypothesis template starts with.

3

On the image above I added a rule based on tags. If the tag HYP is added then show green card.
Next image show you how it can look like if the criteria contains text in the title .

3a

If using Tags make sure you add your tag to the card.
4

If you used the “contains” criteria just save the settings. And the card will end up green on the board.

5

That’s it… Happy playing around.

Who is Johan Normén?
Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden.
He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated two time as the top 100 developers in Sweden in the Swedish version of Computer Sweden.

Twitter: @johannormen

Can we use IoT (Internet of Things) with Lean UX?

Almost 79% of global companies already use IoT technologies to track their customers, products, premises, or supply chains today in different ways. And it does not stop there, many large companies spend more time collecting data and use technologies that will teach them what people might want or not. Some companies even use it to see if they can prevent crimes before they happen, like in the Minority Report movie. So why do I ask the question if we can use IoT with Lean UX?

Lean UX is not new. It has been around for many, many years but never defined as a concept, as with many other things. Lean UX has taken ideas from UCD (User Centered Design) with CD (Collaborative Design) and the iterative process itself to meet the MVP (Minimal Viable Product) goals and measure the result when measurements give the most feedback. In other words, you mostly know if something was great when people ask for it, or you can see if they really use your idea and like it or not. UCD guesses and assumes things while Lean UX goes further to really investigate if it was used and if it needs to be improved in the next iteration and so on.
It’s also very common that you add features in products but rarely delete features that no one uses anymore. The goal of Lean UX is to help you with that as well.

The big difference with UCD and Lean UX is that UCD is mostly common as a tool in up-front processes like waterfall. Lean UX focuses on KISS (Keep It Simple Stupid) with small iterations and collaboration with the whole agile team – not just the UX Designers.

One interesting idea of Lean UX is that it’s a data-driven approach. Instead of thinking Lean design as being driven by data, you can see it as being informed by data. That’s why I think IoT will be a very interesting topic in our UX world.

Consider this: IoT can help you in the future to understand what temperature you want to have in your home based on the hours of the day. The systems will know this by collecting data from you. What temperature do you often set at 3 PM? Did you complain on the internet that it’s too cold in your home? And so on… All this information helps analysis tools with understanding what you probably want so you can spend time on more important things than complaining about the temperature at home. The system will help you get the temperature you want before you even notice it.

We also have problems today with people that turns off advertisements with ad blockers. So you need to find new ways to certify the customer. To do so you need to understand them. To understand them you need to monitor them, collect data about them to help them get what they really want. When Lean UX is data-driven you can simply use the IoT ideas to analyze and find out where the trends point, what people feel uncomfortable with and so on. In the near future systems will almost know what you are thinking and give you what you ask for before you even know it. Scary? I know. But with a bit of luck it will give us time for more important tasks. To analyze what people might want we can use the IoT to create better UX and features before the customers even know about them.

For example, Apple’s Siri already helps you more than you know. Microsoft Cortana and Google’s knowledge of what you often seek for is already a part of this.

Welcome to the future…

Who is Johan Normén?
Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden.
He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated two time as the top 100 developers in Sweden in the Swedish version of Computer Sweden.

Twitter: @johannormen

Bring gamification into the agile framework

First of all, what is gamification? The word does not sound so serious right? It’s like… Shall you have fun at work? Who said that? I know that we all want to have fun all the time if we had the chance to choose. And we do have, that’s the best part of being human.

In short gamification is a way to add things and psychological ideas to make things more fun. Let start by look at our job situation.

Tasks in our daily work is mostly repetitive but dull. Goals in our daily work can be unclear, information often delivered at the wrong time. Failure is often forbidden, you don’t talk about it to often and you can get punished by your failure. Collaboration is often bad (not always but we tend to think that people who talk to much aren’t productive.), the autonomy is mid or low. The path to mastery is often unclear. How do I master? What way do I need to go to get from good to great or enter next level in my carrier at my work?

Those are very common issues all of them, but there are some few companies where they are not. If you are one of them I will congratulate you and give you the achievement of success… 😀

So what about games? Tasks are repetitive but often fun right? Yatzy is fun, we do the same thing over and over again and still play it. The goal is really clear, the one that get most points is the winner, it’s clear how to play, and what you need to do. The information is delivered on time (just in time). Failure is ok, if you don’t fail you can’t win. You don’t get punished if failing. Collaboration is there, you have fun, talk to each other, maybe even give each other some tips what dice you shall save or not, get better ideas regarding how to play Yatzy better and master it more.

“In every real man a child is hidden that wants to play” – Friedrich Nietzsche

We know all this, we have known this since the day we invented games, but why don’t we take all this knowledge and implement it in our daily work?

The answer is kind of simple, we need to collaborate and understand people in our organisation first to do so. We really need to communicate outside our boundaries of daily work. How many of you colleagues know that you like sport? But in general you love sport because you can help others to master it? How many of your colleagues love to draw, or learn by doing? How many of your colleagues sees the world by how the world sounds like rather then how it looks like? How many of your friends has emotion based on movies rather then politics? When you talk to your friends regarding trees, can it sound like this from different peoples?

I love this wonderful sound in the trees.
I love the green color on the trees.
I love how the leaves feel like in my hand.
I love the feeling to get rid of dead trees.

This is four different personalities. They all get knowledge in different ways, they all have different ways to communicate problems and so on. We often don’t see this because we are so busy in our own lives. If you play a game as a team you need to understand each other to have the possibility to win. And to do this you must learn to listen to each other and coach each other to mastery. This is one of the main ideas of the agile framework scrum. The American Soccer is the main idea of scrum. You must play as a team with each other to win. To do this you have a coach; a person that sees what you don’t see on the filed. The coach is there to help you get your minds and visions together. Makes you play the game together as a team. Some of you are better at running, others better at tackling and so on. You need to know this and put right person on the right job on the field to succeed. You collaborate for success. And therefore you also have a chance to win.

In scrum you have planning poker as a fun game for collaborating against the same goal. You have retrospectives to solve problems and add new smart and better tactics how to deliver high value with highest quality together. (Like the collaboration together how to defeat Gorash Hellscream in World of Warcraft). In Lean you collaborate all the time and use Kanban board (can be used in scum and other methods too) to indicate threat and visual goals and so on. Some people add a little island on the Kanban-board and put the avatar there if they are on vacation to add some fun to it. In one project we used Star Wars characters though the whole team had Star Wars in common. It was fun. I move Han Solo to next lane. 🙂

Many coachers use games in the start-up meeting as the “learn to know each other socially”-process. Who are you in real life and so on. It’s easy to add this “worker role”-role in you at your work and forget the real life-role. You are often another kind of person out side your job. It’s important to get knowledge about that person as well.  If not you become a hidden status user. Who are you to blame me? You don’t even know me.

In gamification we have four main player types and they all act different at work and in life.
You got the Killer. This one is the person that needs a winner and a looser. If there is no looser you haven’t win anything. We got the achievers, they are like the killers but the main different is that achievers don’t care if some one loses, the achievers just want to be better and need everyone to help him/her. We have the socialiser, the people that love to be around other peoples. Did you know that 80% of the persons on this planet are the socialisers? Did you even know that if you put a person in prison you rather be with the other insane criminals than alone in a room, even if we know it’s dangerous? The last player type is the explorer. The explorer is a person that love to see new things, how it looks like, the roadmap, the path even explore how it went.

If you think of the persons in your team, can you group them by those four games types? I bet you can, think about it for a while. Hey… I told you to think about it so stop reading for some minutes, just reflect on your teammates and see what kind of persons they really are.

1,2,3,4,5 Minutes later.

Hi, and welcome back. Was it hard? Was it easy? I bet you grouped most of them by now, and I also bet that suddenly you start to get another view of them, other feelings now then before right? A more positive feeling right? Kind of the same you get when you play games with your friends? (if not then you are probably in the wrong team, with people that can’t certify your type creatively.) :/

As a agile coach you can take this knowledge and add more items to your methodology framework to make the work more fun. Add a score board for the killers and achievers. Make the socialiser collaborates ideas around this score board. Let the explorer, explore the result. Add a team vision and goal charts on the wall to make the goal more clear. What’s the most important values for the team to succeed? If the team loose focus go to this team goal chart and refresh the main goal and why the values are so important for you as a team. Make the collaboration a rule rather than a punishment of some kind of time-consuming issue. Because it’s not. Maybe all persons in the team love music and work better with music on? What if they all love the “focus playlist” on Spotify? Why not add a speaker in the room and play it in the background for them? I bet you have more fun playing games or party with friends with music in the background right? We love music. Think of a gym with no music… will you perform better?

At the start up meeting let everyone create their own personas profile. Hang it on the wall with nicknames and an avatar. In this personas profile add interests, movies, music styles etc.

Screen Shot 2015-10-05 at 15.04.20
(Image: this is from my Keynote I did with the same topic 2015 at SweTugg conference).

When working with customers you probably identify the personas to make better result for the customer, why not use the same ideas to make better result as a team? It’s no difference just that you suddenly get some focus. Focus that generate flourish (positive psychology).
https://en.wikipedia.org/wiki/Persona_(user_experience)

When a new team member enter the team, show him/her this wall, describe the teams goal and values and add this new person personas to the team-wall so others can see it.  (Maybe he is the main healer you always wanted? 😉 ) If you feel that you are in a conflict with someone, just go to the wall look at the personas profile and think why you see things different, enter the personas personality to reflect and act different regarding the conflict. It’s fun, maybe it will scare you, but games that add some drama and scary moments are more fun than games you will win all the time without any resistance.

Use user stories or something that the whole team feels gives them the best information regarding what to do with each task. Add story points and use that for the score board to reach high scores together if most of the people are killer and or achievers. And so on, be creative. To work shall be fun and successful.

Gamification is 75% psychology and 25% technology…

Who is Johan Normén?

Johan Normén is 37 years old, work as a speaker, mentor, team leader, agile coach, and senior .net developer at Softhouse in Gothenburg Sweden.
He has over 18 years business experienced and worked in many different projects and roles. Was one of the creators of Swenug (Sweden .Net User Group) with over 3000 members all over the country. He started the computer era as game designer at the age of 12 with his Amiga and team. He has been nominated two time as the top 100 developers in Sweden in the Swedish version of Computer Sweden.

Twitter: @johannormen