Serverlessconf

I remember last year binge-watching the Serverlessconf recordings online thinking “If there is one conference I want to go this is the one!”. The talks were so utterly good that I felt bad for not having witnessed it live. I was looking for the coming Serverlessconfs but they seemed to be coming nowhere near me. Then suddenly they announced the event in Paris and I went crazy. Let´s do this!

1

On day #1 there were multiple workshops on various technology stacks. AWS, Microsoft Azure, Google Cloud, OpenFaaS and IBM Cloud Functions.

I chose a workshop that was organized by A Cloud Guru where we built a Youtube like video service website with AWS API Gateway, Lambda, Elastic transcoder, Google Firebase and Auth0.

2

The present and future of Serverless observability | Yan Cui

The first presentation of the day was about the present and future of Serverless observability. Yan Cui was pleasant to listen as he had a very fluent presentation style and insightful observations. He also pointed out an interesting whitepaper Serverless Application Lens for the AWS Well-architected framework.

The document covers common serverless applications scenarios. I encourage you to read it to understand AWS best practices and strategies to use when designing architectures for serverless applications.

The next presentation was given by Subbu Allamaraju from Expedia Inc. Expedia is American travel company that owns some of the most popular travel sites like Hotels.com and Trivago. He approached the concept from an interesting perspective highlighting some points on benefits of the serverless paradigm and in contrast common counter arguments like today’s limitations and constraints, personal perspectives of cloud, portability, lock-in, cost etc. He highlighted how past habits, culture and legacy can really slow down adoption.

The presentation provided ideas on how to tackle these blockers on the journey towards a platform of the future, where functions and events fit, and how to prepare ones colleagues for that future.

3

Serverless tools with Google Cloud and Firebase | Bret McGowen & Monika Nawrot

Bret McGowen & Monika Nawrot showed demos around the Google Cloud offering. Monika explained how Google Serverless offering has grown over the years and had a Google Cloud Functions demo with thumbnail creation function, storage & logging. She highlighted also that there is a possibility to use a Function emulator for debugging functions.

Bret McGowen vent quickly through some of the best Backend as a Service (BaaS) offerings out there and then focused on the Google Firebase. He explained that the Realtime database was the first Firebase feature but there are many more built-in features like Cloud storage, Functions, Hosting, etc.

He also made a bold statement which people seemed to find quite amusing. “More serverless than serverless!” =) . It sounded like he was selling artificial sweetener by claiming “Sweeter than sugar” and I found it triggering my bullshit detector. Luckily the demos totally convinced everybody as he showed the Firebase realtime update capability. Apparently Firebase is also handling situations when a client connection drops. The data syncs instantly when a client gets back online. All the Firebase features can be implemented directly in the client-side code using an SDK. The sugar on the top was BigQuery that could query strings on pretty much the entire universe in just mere seconds.

4

https://firebase.google.com/

Visualizing Serverless Architectures: What does a healthy serverless app look like? | Kassandra Perch

Kassandra Perch talked about visualizing Serverless architectures and what does a healthy serverless app look like. Her demo included inspecting for example error rates and counting cold starts. She showed how to include IopipeLib, trace and profiler in a lambda function & how to use those. Interestingly the IOPipe wraps the whole lambda handler. The recommended tool IOPipe has a slogan “See inside you Lambda functions” You can find it here: https://www.iopipe.com/

IBM Cloud Functions & Apache OpenWhisk: Overview and customer scenarios | Frédéric Lavigne

Frédéric Lavigne introduced IBM´s Serverless offering and clarified the difference between IBM Cloud Functions & Apache OpenWhisk. OpenWhisk is open source and used in the IBM managed service. The IBM Cloud team contributes to the open source project. Runtimes include: Node 6, Node 8, PHP 7.1, Python 3 and Swift. Additionally, OpenWhisk can run any custom code put in a Docker container.

In the demo he defined a smiley face as SVG inside the Function code. This was enabled by the RAW HTTP handling setting. Unfortunately, there was some demo effect with API Gateway as he tried to show how to use Web actions and API Gateway. IBM Cloud Functions have some built-in event sources such as Cloudant, Message Hub and Github. Currently they are developing a composer for cloud function flow control.

The presentation included some interesting customer cases such as the DOV-E Hypersonic-based Mobile Device Communication. They had Coca Cola TV advertise trigger a hypersonic message on the viewers phone. Viewer could not hear the communication, but they received a message on the phone asking whether they would like to drink some Coca Cola right there and then.

Event specifications, state of the serverless landscape, and other news from the CNCF Serverless Working Group | Daniel Krook

Daniel Krook had a very informative talk about Event specifications, state of the serverless landscape, and other news from the CNCF Serverless Working Group. CNCF stands for Cloud Native Computing Foundation which drives the adoption of the new Serverless computing paradigm.

They have multiple projects under their wings such as Kubernetes, Prometheus, Fluentd to name a few. However, currently there are no serverless projects. They consist of four active CNCF Working groups (Continuous Integration, Networking, Storage, Serverless) and have now a whitepaper available for review. It is hosted in Github for collaboration purposes and they are accepting pull requests to keep up with the fast phase of development in Serverless. Please find it here: http://www.github.com/cncf/wg-serverless

Accelerating DevOps with Serverless | Michael H. Oshita

Michael H. Oshita talked about Accelerating DevOps with Serverless. His excellent demo showcased how to provide automated branch testing infrastructure for Devs without burdening Ops. Technically the setup uses Github hooks that trigger Circle CI, provisions using Terraform templates and Lambda functions are orchestrated with Step Functions. The infrastructure is created on pull request and destroyed when branch is merged and deleted. See the ECS Deity -project here: http://www.github.com/ijin/ecs-deity

End-To-End Serverless | Randall Hunt

The most entertaining talk of the day was a live coding session with technical evangelist Randal Hunt. He´s opening line was surprisingly in French and the goofball show made everyone crack up. He also asked audience for suggestions on what to build there on the spot in front of the audience. Not something most presenters would want to try I imagine. The randomness didn´t seem to bother viewers and he did manage to finish the live demo just in time which made the organizers happy. The energetic personality and laid back attitude with relevant content was a great combination and I hope to see more of this in the future. If there is one recording you should watch, it would be this one in my opinion.

5

With Great Scalability Comes Great Responsibility | Dana Engebretson

Dana Engebretson had a pleasant talk telling an interesting story about her journey to Serverless architecture for analytical purposes. Humorous croissant baking tips and to-the-point analogies made it inspiring and entertaining.

6

Overall the talks were versatile and excellent. There were also some less technical talks but nothing really outside the Serverless focus which was good as it didn´t seem like the organizers had struggled finding relevant and good presentations for the event. I recommend getting involved in your local cloud computing communities. Serverless development is super-efficient and enjoyable so if you haven´t tried it I suggest you do so without further due.


The author Jouni Leino has 15 years of experience in IT. He lives in Stuttgart Germany working as a Field Application Engineer in the Automotive industry. As Serverless Competence Lead he´s mission is to guide customers and colleagues towards a more cost effective and productive future.
Follow in Twitter
LinkedIn 

Snips and Snails, and Puppy Dog Tails, is that what Agile Leadership is made of?

Let’s face it, we are all doomed. But it’ll take some time before this madness ends. And during that time the world is becoming increasingly complex. The speed of change is faster than ever and more and more is demanded from the leaders. Managing actions and expecting results won’t get you there. Leaders who affect on experiences and beliefs are creating culture that welcomes change. It is quite easy to change those in present and in the future. Have an open mind, search for positive exceptions and find positive explanations. You will create more positive culture for learning and creativity. And by using techniques from NLP it is possible to even change the meanings of one’s experiences and beliefs in the past.
And this is why Agile Leadership is needed. These are some of the topics we went through on our two and a half day course of Certified Agile Leadership by Agile42.

Cynefin – Embrace the Suck

complexity-cynefin.jpgI’d like to return on one word from the past chapter: complex. It is the most interesting domains of the Cynefin Framework. The field of unknown unknowns is where one can

47e6eb3a1b82db01831fa600c120635f

deduce cause and effect only in retrospect. There are no right answers. Thus we as leaders need to create safe to fail experiments. We cannot solve complex problems with best practices. Software development is very much in the complex domain. Agile offers many tools for solving problems in that domain: reflection and improving, collaboration and continuous delivery. If you’re good, you will push many problems to complicated or even obvious domain for example by utilizing automation. Welcome the complex and do some magic!

Giving Your Team the AMP up

team-motivation.jpg
Motivating your team is sometimes difficult. Relying on extrinsic motivators such as money or using the good-old carrot and stick approach does not work when your tasks call for even rudimentary cognitive skill. And even when they do work – the mechanical tasks – you are using a shrinking pie. Offering teams the AMP – Autonomy, Mastery, Purpose – utilizes intrinsic motivators. And they do work! And yet again Agile has tricks for this one too. It introduces pull and self-organization for autonomy. It offers collaboration, feedback, and trial & error for mastery. And it gives you holistic responsibility for purpose. And there are many factors in this growing pie of motivators. Listen to your team and you will learn what will make them tick!

All Hands on DECK!

self-organization.jpg
Self-Organization is extremely important. The more responsibility the team has the more flexible, robust and innovative the team will be. As a leader one should make sure that the teams has a right direction and suitable environment. Removing unnecessary constraints is equally vital. The team will increase it’s own knowledge base as it goes on. And this will speed up the development. Aiming to Self-Designing Teams should be a standard in any agile organization. This means for example that team itself designs who belongs to the team and who does not. Of course those teams also manage their progress and process. And execute their tasks.

When Your Heart and Brain Are Happy Together

emotional-intelligence.jpg
To be a successful leader in an agile context one needs to have emotional intelligence. It falls into self- and social oriented parts. It also splits into how aware one is of oneself and how one handles things. So, emotional intelligence consists of self and social awareness, self management and social skills. Does things like self-confidence, empathy, self-control, initiative, visionary and good communication skills sound like the qualities of a great leader? Another wonderful thing is that one can develop each of these attributes.

Agile Meets Antifragile

Let’s step onwards from the team level to consider the whole organization. We should think more on what happens to the organization when risks realize or some crisis emerge. A fragile organization worries nothing and acts in a naive way. In an emergency it breaks, even in a catastrophic way. A robust organization can resist known stressors, and it should be a minimal level for any company. In a contrast, a resilient system reforms itself during disturbances. Finally it retains the same identity than before. Antifragile systems are the sovereign champions in the organizational map. They can increase their capabilities and grow stronger in response to stress. They are the truest of agile and learning organizations!

antifragility.jpg
To achieve this, there are some things one could experiment. Engage people more. Be empirical and apply local validation. Introduce teams to iterative & incremental development. Have some defined metrics. Create emergent standardization when you can. And this is basically what Agile Leadership is made of.

But Wait! There’s More!

Ok, say that you agree on all the above. But to shine and thrive as an agile leader you need good knowledge and understanding of agile values and principles. You need to deal less with things that are going wrong and help things go right more. Systems thinking will be useful. You should:
“Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.”
You should know at least three different leadership styles and be able to choose the right one for each occasion. Practice Benjamin Franklin’s Thirteen Virtues. Follow simple advice of Michelle Eileen McNamara “It’s chaos. Be kind.”

 

Hedge – Building a new cloud deployment tool with service abstraction

At the start of my Siili career as an apprentice, our group was introduced to a mysterious tool: Hedge. Our apprentice project was to build an internal tool using Hedge as a cloud platform abstraction library and a deployment tool. After our apprentice program had come to an end, I was offered an opportunity to continue the development of Hedge in an internal project. Because we had already used Hedge I had some experience as a framework user. The task I was offered was to implement basic Amazon Web Services(AWS) support into Hedge.

What is this Hedge you are talking about?

Hedge offers automated serverless function code generated from common ring compatible handler methods, libraries for various levels of abstractions, and a set of common commands to build handlers, create artifacts, and to deploy created artifacts. Hedge is an open source software and is available in our github.

“Hedge is a platform agnostic ClojureScript framework for deploying ring compatible handlers to various environments with focus on serverless deployments.”

Hedge developer

Back to my journey with Hedge development

The scope of platform agnostic in Hedge was uncertain for me when I started the development. First, I implemented a simple feature parity for AWS code creation and deployment with Serverless Framework. Later the definition of the platform agnostic, roadmap, and context of Hedge became more clear.

When I started working with Hedge I had little Clojure experience and almost no hands-on experience with AWS. For AWS deployment I had checked how other tools do deployment and had chats with my peers. These information sources gave good advice on how to handle deployment.

Why Clojure(Script)? ClojureScript in backend?!

Clojure(Script) is popular and it is in high demand in Finland and at Siili Solutions. Using ClojureScript gives access to ClojureScript and JavaScript libraries. The functional paradigm has steep learning curve, but after learning the basics it is easy to realize that immutable data fits well with serverless handlers. Multithread-safety adds more security if one of the supported clouds is re-using processes with multiple threads.

One of the Clojure build tools, Boot, is also extensively used with Hedge. Boot tasks are great for creating and chaining commands. It is fast and easy to develop a set of tasks which for example build input files, create all artifacts, and finally deploy artifacts to cloud. Then those tasks can be combined into one large task which does all with one command or uses small tasks to store artifacts into disk and later deploys artifacts to cloud.

Why platform agnostic framework?

Following code snippets reveals the first problems with current serverless platforms:

AWS function handler example

'use strict';
module.exports.hello =
(event, context, callback) =>; {
  console.log(’log msg!')
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless!',
      input: event,
    }),
   };
 callback(null, response);
};

Azure function handler example

'use strict';
module.exports.hello =
(context, req) => {
  context.log(’log msg!');
  context.res = {
    // status: 200, /* Defaults to 200 */
    body: {
      message: 'Go Serverless!',
      input: event,
    }
  };
  context.done();
};

Above code snippets are simple Hello World serverless function handlers but the problem is already visible.

  • Handler function signatures(line 3)
  • Logging(line 4)
  • Output(line 5) handling(line 12)
  • Exit condition signaling(line 12)

all are different.

The main goal of Hedge is platform agnosticism: once the code and configuration has been written for one cloud platform, it is re-deployable to another cloud provider by changing deployment command and a few configuration directives. This improves code re-usability and limits the risk of being locked with specific cloud provider.

To make the implementation easier, Hedge supports only a small common subset of provided cloud features. Limiting number of supported features might be a risk and might lower acceptance rate amongst developers. It is unknown if developers will use a framework which allows using only a small fraction of cloud features. The small number of features definitely narrows down the creativity of developers and might also limit usage of Hedge for some projects.

Our implementation

Hedge adds abstraction layers for function handler code, infrastructure and deployment. Following code snippets are examples of abstraction layers of current development version.

Unified Hedge handler example

(defn hello
[req]
  (info "log msg!")
  {:status 200
   :body "Go Clojure!"})

Above example shows how Hedge unifies function handler features:

  • Handler function signature(lines 1 & 2)
  • Logging (line 3)
  • Payload creation and emit(lines 4 & 5)
  • Function exit condition signalling(line 5)
  • Persistent storage and queues(Still in WIP list)

Infrastructure abstaction

{:api {
       "hello-json" {:handler handler.core/hello-json}
       "calc" {:handler handler.core/calc}
       "fail-hard" {:handler handler.core/fail-hard}}
 :timer {"timer" {:handler handler.core/hello
                  :cron "*/15 * * * *"}}}

Infrastructure abstraction is done as EDN configuration file. Hedge will create platform specific templates from EDN.

Deployment abstraction


$ boot help
...
 aws/deploy                  ** Build and deploy function app(s) **
 aws/deploy-from-directory   ** Deploy files from directory. **
 aws/deploy-to-directory     ** removed for readability **

 azure/deploy                  ** Build and deploy function app(s) **
 azure/deploy-from-directory   ** Deploy files from directory **
 azure/deploy-to-directory     ** removed for readability **
...
$ boot aws/deploy -n my-stack
Deploying to AWS
Stack is ready!
API endpoint base URL :
https://iftc4hog23.execute-api.eu-west-3.amazonaws.com/Prod

cloud-abstractionAbove snippet is example how to run Hedge. Help command lists all available command and simple aws/deploy or azure/deploy commands can be used to deploy project to selected cloud.

Deployment is abstracted with boot tasks. Identical set of command can be used for build, artifact creation and deployment.

Hedge HTTP function handlers resembles Ring handers which is well-known abstraction for HTTP in Clojure. Hedge reads user-supplied configuarion files and serververless function hander then creates cloud-specific wrapper code between a user supplied handler function and cloud’s native handler entry points. The wrapped code handles differences between cloud providers and in the future, there will be libraries for the rest of code abstraction.

Hedge is currently under heavy development and some of the listed features are still on roadmap.

Lessons learned

During this project I had to learn how create Cloudformation templates and stacks from template. Cloudformation templates for lambda functions with API Gateway endpoints first seemed overwhelming, but AWS SAM simplified template creation. AWS SAM is still a young technology and I did not find any big projects using it.

I had to find one important piece of information from StackOverflow. Cloudformations templates using SAM must be deployed using change sets. Luckily it was documented there, since otherwise I probably would have spent a lot of time debugging a feature which was not supposed to work.

As the documentation of SAM is still vague and mostly in GitHub only, I personally can recommend using SAM for serverless Cloudformation templates.

See also:
“Modern Application Development: Should you skip microservices and go directly to serverless?”

A Guidance Framework for Architecting Portable Cloud and Multicloud Applications

Multi-cloud, what are the options? – Low level abstraction libraries

Pros and Cons of a Multi Cloud approach

AWS Helsinki Meetup January 2018 slides

(<3 siili_ clojure) – hope you do too!

The forgotten part of successful craftsmanship

From late Middle Ages master craftsmen have produced beautiful and practical products. To create these products they used valuable resources from their limited inventory. The creative process required that they had a vision of what they where about to build. Without the vision, a goal, craftsmen would only waste valuable and useful resources.

Why should we focus on our Vision? At least two big reasons:

Purpose & Motivation
Decision making

image

Purpose & Motivation

In our daily life we wake up every morning. We do our morning routines and then we spend most of our waking time doing work. We all want to feel that our work is meaningful.

A good vision describes what we want to achieve and why. If a vision is compelling for us we can find purpose, feel our work is important and meaningful. Finding purpose will result in higher motivation.

If you are working on something exciting that you really care about, you don’t have to be pushed. The vision pulls you

– Steve Jobs

Decision making

Craftsmen are not machines, they have brains and have to do many decisions on a daily basis. How are we doing these decisions? How do we know, if the decision is bringing us closer to our destination?

A shared vision shows us where we are going, like a map is telling where we should drive. Navigating with a low detail map gives us sense of direction and this helps us to make those decisions. A vision shows us the direction but doesn’t restrict us. We should always be curious and creative, innovate and find new solutions.

Limited problem solving scope

Usually agile projects run in sprints. Teams plan their work for next few weeks and define a sprint goal. During a sprint we encounter situations where we have to make decisions. When the vision is not clear decisions are often made using the short term goal. It would be much more valuable if we would focus on the big picture.

Where is the vision?

In my experience many agile software projects fail to communicate the vision. As a result, teams find them working without a clear direction and this leads to poor commitment.

Successful start-ups are good at sharing their vision. Why? For two reasons, they need to know what they are doing and to attract outside investors.

We should ask ourselves, where is our vision?

In your work, find or define a vision that everybody can relate to. A good vision shows direction, gives purpose to our work and is emotional.

12 Crucial Skills for Remote Leadership

I participated in Remote Forever Summit last week. There were many good sessions. But Charlie Birch’s (@BurnoutBunisher) talk about Celebrating Human Connection in a Digital World ticked the most boxes for me . In this session she listed 12 skills needed for successful remote leadership. I spent few days thinking them from my perspective and decided to share my thoughts.

Remote Mindset

Working remote is not about location. It doesn’t have to hinder collaboration, instead offices hinder independent work. Of course, you need to collaborate but collaboration tends to happen in short bursts. Then it’s time for independent work such as writing this article. To be a great tribal lead for 20 remote working people I need to trust them. Which is quite easy since they’re all such professionals.

Overcoming Obstacles

arrow_strategy_400_wht_9440-big-in-middle-538x218

Yes, there will be obstacles in remote work. How do I maintain my focus? How can I be sure that I’m productive? As a leader one of my biggest goals is to inspire my tribe members. If I want to work remotely more often, I need to find a way to be an inspiration without constant face-to-face communication. Using Slack and mobile phone are good ways of reaching out. And most of them work at the customer offices so for me they are always “remote”.

Company Culture

Company needs to understand the value of remote work. It has proven to increase productivity and satisfaction. Open communication and feedback are key elements to foster culture that enables remote work. I value transparency high and luckily so does my employer. Leader who wants to encourage remote work needs also to set clear goals and manage expectations.

Cultural Competency

Effective interaction with people who have different cultural influences is necessity also for remote leader. That’s because you’re not working only with your hypothetical identical twin. So you need tolerance to difference. Only then can you match your coaching with the person you are serving as a leader. Same applies also when your people are working remotely. There might be even more variance in their needs. And I see great opportunities in this. I can gain cultural competence by traveling. And I love to travel. So it’s a win-win-win situation!

Social Support

best-free-there-support-clipart-file

Socially supporting remote workers at least the same level as those working colocated is hard. It is one of the biggest challenge I’ve faced as a leader. I’ve solved this by paying extra attention to people online. I have also used enablers such as technical solutions to strengthen social interactions. Also, making sure that everybody gets enough 1-on-1 time from the leader is very important in creating trust.

Role Clarity

Making sure that everybody knows their role is one important task for the leader of a remote team. This does not mean that the leader should tell them how to organize. It means supporting them in their self-organization by communicating goals and targets clear. My tribe members don’t work in a single team or even at the same customer. But what I can offer them is coaching and mentoring in their obstacles. And many time it’s about how to bring the most of their competence in to use in a challenging environment. To me, that is clarifying their consultant role.

Communication

There is one thing that rises up many times when discussing communication in remote teams: asynchronous communication. It’s the backbone of effective remote leadership. But people need synchronous communication as well. So yes, I do use Slack or mail to send messages but I try to concentrate on phone calls or meeting face-to-face. The more important thing it is, the more “live and present” way of communication I use. Making sure that each conversation has a purpose is important, because people don’t want to be bother for nothing when they are working remotely.

Technical Management

Coaching and being an example. Those are my main tools as a leader and manager. Coordinating my tribe members and sales activities is closest to the actual managing I need in my work. This is due to the fact that our company is very Lean and trusts it’s employees. Finding ways to plan and design activities that makes the company go

Collective Knowledge

“An investment in knowledge pays the best interest.” – Benjamin Franklin

Developing the whole group is important. In my tribe we share experiences and learnings in our projects time to time. We also try to generate insights and generalisations which can be again applied to other projects as well. And after such sessions we put those findings available so people can read them whenever they have the time. This way they are available also to those who were not online or at the same location. Investing in life long learning is something held in great value here at Siili. Enhancing collective knowledge enhances collaboration – especially with remote teams

Self-Management

Each person should take responsibility in one’s own behaviour and well-being. And encouraging this is one crucial task and mindset for a leader. Remote leadership underlines this need mightily. I see coaching as a good approach. Setting goals and helping tribe member achieve those goals is a process where the coachee learns self-management.

Self Care

This is very close to self-management in my perspective. One needs to have a healthy body and mind to succeed. And to be a good leader for remote people you need to be in shape both physically and mentally to be there for your team. One thing you can do this is to go to the woods with your team – remotely! Using modern technologies you could all go in the nearest trees and have a walk. Calm down and meditate a bit, if you like. Keep on finding ways to look for the heal and cure.

Lifestyle

Remote mindset tends to go together with a lifestyle supporting remote work. But the correlation is not clear to me. But I see that making time for your close ones and yourself is very important. People with both personal and professional goals have been the most enthusiastic folks I have been coaching. So balance is the key.

AXFD591OLI

So, I will continue coaching people to take responsibility in their own goals and to find meaningful ways of working and learning aside.

My take on ‘Why Clojure?’

Both homoiconic nature and functional side make clojure very distinctive language. They are both inherent in making clojure what it is and i would not take one before the other.

As we have blog posts covering the reasons for FP here i’m going to take FP as a paradigm more or less granted in this post.

Why do i see clojure as a great language in the context of functional programming?

Learning and unlearning

First of all it’s hard to learn a programming paradigm in a language that does not embrace it. A wrong tool drives you to make wrong choices. It leaves you without actually learning the paradigm. It is by far the best thing to do to learn a paradigm using tools meant for it. Eric Normand wrote a good blog post about this problem.

To understand the benefits of FP, you have to use languages meant for it. Languages like Haskell (and by extension Elm and Purescript), Clojure, F#, Scala, Other lisps, Erlang, or OCaml.

I take it that you’re not interested in why not Haskell family, F# or OCaml, but i’ll anyhow go through that part. Most of these languages have very limited use in actual business right now. Currently Haskell and OCaml don’t have any place in programming for business. Which is a pity and no fault of the languages . Elm is currently used in front end and as such is still lacking in backend. Purescript seems to be the most versatile and available of these. It works well both in front and on node.js making it a viable language used in professional fullstack dev.

Scala then is a very solid language running on an widely accepted platform: the JVM. It is a very good all around language, there is no doubt about that. It also has a very good yet complex type system. System that can guide a good FP programmer to discover things about their domain. There are yet few things making it lacking in comparison to Clojure.

  1. Main problem in learning is unlearning. The familiar look of Scala drives people to not learn it. It’s easy to hack something with it but actually using Java with different syntax. Learning first Clojure leads to faster understanding of Scala itself. Adding to this rudimentaries of Haskell helps even more. Learn You a Haskell for Great Good! is a good resource for this.
  2. The unique way of thinking about problems and the language that describes them. This way of thinking is very valid and a good tool to learn for any programmer. Biggest reason for this is the homoiconic nature of the language. The great ability it brings in metaprogramming.
  3. Scala is currently only viable for backend use. Unlike scala Clojure has many supported platforms. It supports JVM, JS including node and browser, and CLR. All which acceptable platforms for business use. This makes it possible to share the same code in front end and backend. With it you can make a consistent whole. Creating front end components that are in sync with their microservice counterparts. In scala this is not possible as Scala.js is lacking in actual production grade stability.

So yes scala is an interesting language but not the best to learn FP. Especially so for Java developers.

Motivation as a driver for effectiveness

It’s actually quite hard to have valid measurements for coder efficiency. Yet one thing we do know. Study after study has found that developer motivation is elemental to productivity.

With unenthustiastic devs its best to inspire them. One of the main benefits comes from the fact that clojure is easy to use and makes coding actually fun again. This is a quote you do hear quite a lot from clojure devs.

As this is about inspiring people, you should go with what is good and nice and feels good and brings joy to you. As then you’ll be more inspiring.

Final words

It also goes down to the provable fact that Imperative Paradigm is more complex than simpler FP. Inside FP clojure is a very very very easy way to learn it. Much easier one to reap the rewards than most others.

If you have a bunch of coders struggling with imperative stuff. And you want to get the benefits of FP as fast as possible. Clojure is the fastest one to learn.

Winning the Competive Edge with Learning Organizations

A learning organization encourages individuals and teams to continuous learning and improvement. Strong values and clear vision head those organizations. And their direction is to work closer to the customer and responding to the change quicker. They tend to learn from others and question their own behaviour. Learning organizations also tolerate flaws and even learn from them. This should be the reality for any agile team and organisztion.

Learning is the lifeblood of organization

lifeblood-1
People face change all kinds of changes in their work life all the time. This means that learning continues in different forms through out the whole career. Also the life cycle of an organization include constant learning. They face new things, operating models, situations and so forth which needs adaptation. And that requires learning. Changes in information technology has increased the need to react faster to change. Real competitive edge comes from that the organization learns faster than its competitors. Thus importance of competence and know-how to success has increased.
Succeeding in fast changing and unpredictable environment demands constant change and recurrence, learning. Only innovative organization can produce better services and end up beating its rivals. Organization’s results must improve all the time. And so the performance of organization and its employee must get better. So effectiveness is dependent on learning. Learning faster than competitors wins you the Competitive edge!

Learning within the team and the organization

Learning is a process where individual gains new skills, competences, experiences and contacts. Learning is in fact creating knowledge by shaping experiences. The process starts from the will to learn from experiences. Then, one should have time to ponder different opinions and facts to gain knowledge. Finally one should understand and apply new knowledge to generate new experiences. And so the learning process starts again.
Let’s look all this from the organization point of view. By following this process, it has the ability to renew itself. This happens by transforming its values, processes and ways of working. In practice this happens by acquiring new competence and make use of it immediately. Organizational learning is also a process that integrates individual and team level learning. Individual learning is often intuitive and interacted to team level as shared knowledge. This can again solidify as practices within the organization.
Learning-Organization
The learning objectives must derive from the strategy. This ensures that organizational learning is more than the sum of individuals’ learning. The organization should encourage and support employees to experiment outside their job description. It should also increase supportive interaction. This can happen by removing focus on single department results and hastiness. Making small everyday insights and improvements beats big radical inventions!
Good contact networks between individuals and teams contributes to whole organization’s learning capabilities. Individuals facilitates continuous learning. Teams enable sharing knowledge. Shared vision and values of the organization guides learning towards something great.

Is the Learning Organization too much asked for?

Every organization learns. But successful organization learns, adapts and changes faster than its competitors. It also allows mistakes. Learning organization guides itself: reduce, crystallize, simplify, focus and see the whole. It balances efficiency, learning and wellbeing.
Learning organization has ten theses:
  1. Learning organization is a whole
  2. Learning organization needs values that support learning
  3. Goal-oriented action requires goal-oriented learning
  4. Learner crafts own motives to learn along the the organizations goals
  5. Knowing and mastering are important. Learning and learning to learn are more important
  6. Give people opportunity to engage – change will succeed better
  7. Management’s mission is to build frames and to support learning in organization
  8. Value the past, but help abandon it
  9. Training is important, but one requires other means too
  10. Don’t start changes if you can’t finish them
The learning organization has many definitions:
It is an undivided whole, led consciously. It’s key organization and individual level factors affiliates into common direction. It focuses on identifying impediments, applying and evaluating means.
A learning organization is one that seeks to create its own future. That assumes learning is an ongoing and creative process for its members. A process that develops, adapts, and transforms itself. It responses to the needs and aspirations of people, both inside and outside itself.
What should we learn within the learning organization? Learning to learn is in the essence. And that leads to reflection, using retrospectives to gain insight on improvement actions. Every task should appear as an opportunity to learn and improve. Learning from everyday tasks links new insights into concrete actions. Ten most valuable learning skills for organizational learning are:
  1. Systems thinking
  2. Models leading internal action
  3. Strategic learning
  4. Feedback systems on individual, team and organization level
  5. Self-management
  6. Team learning
  7. Dialog
  8. Shared vision
  9. Benefiting from information systems
  10. Sharing of knowledge

Mental-model

Want your organization to rock at learning?

Superstar learning organization needs new dimensions to leadership. You need builders and trendsetters. Questioners and facilitators. Provokers and assessors of whole. You need to enable cooperation and collaboration to create lean and progressive organization.
So as a leader introduce principles from Lean to your organization. Remind individuals and teams about relentless reflection (Hansei) – even daily. Show them secrets of continuous improvement (Kaizen) on small steps. Create pattern of retrospectives to support both of these. Consider applying Shu-Ha-Ri into your organization. We in Siili Solutions have done this for example with our Master & Apprentice programs.
Remember to learn daily and that learning should be fun.