Episode 58: Don’t Drink and Podcast!

The Agile Revolution's avatarThe Agile Revolution Podcast

Beer CheersCraig and Renee are in Sydney and dangerously podcast after Renee’s one (1) drink and Craig’s two (2) drinks. Along the way they fumble over the following topics:

View original post 147 more words

Agile Australia 2013: Visual Management: Leading With What You Can See

Agile Australia 2013 Speaker ButtonMy presentation with Renee Troughton from the Agile Australia 2013 conference called “Visual Management: Leading With What You Can See” is available on Slideshare.

Using task boards or story walls is a key Agile practice, but are you making the most of it? Visual Management is more than just putting cards on a wall, it is a growing style of management that focuses on managing work only by what you can see rather than reports or paper being shuffled around. Visual Management allows you to understand the constraints in the system, mitigate risks before they become issues, report on progress from the micro to the macro. Visual Management can also be used to demonstrate to customers and clients where the work they care about is at. This presentation is all about taking the management of your work to the next stage of transparency. Discover:

* How to identify when your story wall isn’t telling you everything and how to adjust it
* What the three different types of story walls are and which one is more suitable to certain circumstances
* Different ways to visualise your product backlogWhy queue columns and limiting work in progress is so important regardless of whether you are using Scrum or Kanban
* How symbols and tokens can be used to give more information
* What else can you use other than story walls to visualise information
* How to ingrain Visual Management into both the team and management structures of your organisation
* Visualising Your Quality, Testing and Team
* What is systemic flow mapping and why is it important

Lynne Cazaly did an awesome visualisation of the talk!

We had some great feedback from people after the talk as well as via Twitter.

Renee also has a (slightly earler) version of the slidedeck online via her Slideshare, with one slide change and one omission…

Episode 57: No, No, Noooo!

The Agile Revolution's avatarThe Agile Revolution Podcast

NoTony, Renee and Craig meet in sunny suburban Sandgate and have an intense debate about the world of Agile while dealing with the 4:01 to Shorncliffe and beeping out Tony’s references to seagulls and respect.

View original post 80 more words

Brisbane Agile Meetup: Scrum Masters: The Full-Time Role Conundrum

MeetupMy presentation from the Brisbane Agile Meetup in May 2013 called “Scrum Masters: The Full Time Role Conundrum” is available on Slideshare.

A replay of the talk delivered by Craig Smith at the recent Scrum Australia gathering in Sydney

The Scrum Guide defines the Scrum Team as being made up of three primary roles: Product Owner, Development Team and Scrum Master. The role of the Scrum Master is often misunderstood, particularly by management, so often questions start to get asked such as “can I share the Scrum Master across teams”, “can the Scrum Master do Project Management” and “can the role be rotated”?

In this talk we will take a look at some of the misconceptions around the Scrum Master role, discuss how it fits into the organisational structure and tackle the age-old question of whether the Scrum Master is a full time role. We will also look at an improvement plan template to help Scrum Masters improve in their role.

Brisbane Agile

Here are some comments from Meetup:

  • Great presentation. Definitely good value (Gustavo)
  • Very good presentation. Good value. (Wilfred Brimblecombe)
  • Interesting subject, nice presso, Craig good value. Great presso, good job Craig. Also brill venue – good old Suncorp. (Derek Walsh)
  • Great presentation, thanks. (Chris Fortuin)
  • Impressive presentation, invaluable advice. (Carlos Augusto de Oliveira)
  • Craig did a great job putting together and presenting his scrum-master-view-of-the-world presso… (Juan)

An Introduction to Clojure

ClojureI had the pleasure this week to sit in on a 2 day Introduction to Clojure workshop being run by one of Clojure’s core developers, Stuart Sierra. YOW! and Relevance, Inc. are running these workshops on the east coast of Australia throughout May 2013 and for someone still very new to functional concepts it was a great introduction to functional programming as well as the Clojure language itself.

The key to a workshop like this is the slides with the code examples and the labs to practice the learnings, Nonetheless, here are my notes from the course on some of the concepts that I picked up.

Introduction to Clojure

  • designed to fix shared state concurrency, designed to run on the host platform
  • ClojureScript designed to target devices that cannot run a full JVM like mobile platforms, browsers, etc..
  • most of this course is applicable to ClojureScript, just the interrops to the host environment are different
  • BigInt (trailing N), BigDecimal (trailing M)
  • Strings in double quotes, characters in “”, reg ex are started with a #
  • literal true and false, nil is the same as Java null
  • symbols are words in your program you want to reference from somewhere else, always resolve to something else
  • keywords are a special type of symbol, start with a colon :, fixed labels that have no meaning, used for names of fields often, close to enum in Java
  • REPL – read, eval, print, loop – from LISP, all the steps are separate which is different to interactive terminal
  • every expression starts with an expression, everything returns an expression which is why you get nil when doing a println
  • REPL *1 will get you most recently used expression
  • print and println will give you human readable, prn and pr will give you the machine readable output
  • list are written in parens, usually represent function calls
  • vectors usually reflect collections, in []
  • maps are key value collections, in {}
  • set starts with a hash and curly brackets
  • commas are whitespace in Clojure
  • first is the function position, usually starts wuth a function or an expression that returns a function
  • quote (‘) is syntactic sugar for quote, prevents evaluation, common issue when starting Clojure when dealing with lists
  • doc – built in documentation
  • Leiningen – built on Maven, hides complexity but gives you its goodness
  • project.clj – dependency file

Functions

  • functions are first class and values, most of the core code are pure functions (no side effects)
  • defn defines a named function (defn greet [name] <body>) is a definition called greet, passes a name and runs some functions, then call as (greet )
  • can have multiple aritys, [] is no arguments, others are the named arguments, useful way to provide defaults
  • & in argument vector says next arguments gets all the remaining arguments in a list (0 or more)
  • fn is anonymous function with no name (fn [parms] body), to call it you can stick it at the head of a list, use this if you need to do something one time
  • shorter synatx is #(), and use % sign for the arguments, syntactic convenience
  • usually invoke a function by putting it at the head of the list
  • apply takes a function and list or collection or arguments, same as invoking a function on those arguments
  • let used for local variables, uilt into the compiler, takes a pair set of bindings (symbol and an evaluated expression) and then a body of any number of expressions
  • fn creates a closure, locals are stored and kept with the function
  • invoking Java – instantiation (Class. argument)
  • read Clojure inside out, read the inner most function and then read out

Expressions and Loops

  • in Clojure everything is an expression, always return a value even if that is nil, multiple expressions always return the last value
  • flow controls always return a value as well
  • logical false is false or nil, everything else is true, similar to the semantics in Ruby and Python
  • when is a macro – check and do a buch of things if evaluates true
  • cond – tree of if then else without lots of nesting, test – expression pair, stops when it hits the first true test, can end with an :else default by convention only
  • case – occasionally useful, like switch in Java, takes constants and returns value, if you don’t define a default you get an error, odd number of expressions, the last one is the default
  • dotimes – basic loop (dotimes [i 3]), only useful for side effects as it never returns a value
  • doseq – iterates over a collection, like for-each
  • for – not for looping, generates data, returns a sequence
  • recur – for recursion, rarely used, loop defines bindings which you recur
  • exceptions – don’t use them much in Clojure, no checked exceptions, try-catch-finally as per Java, throw to throw an exception
  • ex-info and ex-data that allows you to pass back a map
  • with-open – convenience wrapper, works with any method that needs to be closed

Namespaces

  • Clojure runtime is a singleton within the JVM
  • namespaces allow you thave the same name mean different things in different places
  • ns – use macro at the top of the source file to create a namespace, :require keyword to load the dependent libraries
  • implicit mapping between namespaces and files, dots into slashes and hypens into underscores
  • ns :use : only is deprecated form of :require from 1.4 up
  • ns :import for importing Java classes, every namespace imports java.lang
  • in-ns to change namespaces
  • equivalent macros for when using the REPL instead of a file
  • a bunch of functions for returning namespace information, but would rarely use these
  • private vars are just a metdata symbol, use ^:private, not truly private or hidden

Collections

  • a class or a struct becomes a map in Clojure
  • clojure.set – mathematical set operations
  • vectors are functions, can call using the indices
  • mostly use vectors, lists are useful when you want to work at the head of the list as it is more efficient, like simulating a stack
  • seq – returns a sequential view of something, like an iterator but it is not an iterator, can get first or rest
  • range – infinite lazy sequence of integers
  • into – puts a sequence into a collection
  • take / drop – take the first n in the sequence, drop the first n in the sequence, also filter and remove
  • map – the essence of functional programming – calls a function on a sequence and returns a sequence, the functional equivalent of for/each
  • reduce – powerful, uses first element if not initiated
  • some – to return the first logical true in the sequence

Concurrency

  • concurrency – multiple things happening concurrently that are sharing the same state
  • deref – returns current state, shortcut is @<ref>
  • atom – basic container with mutable state, changes are atomic, synchronous
  • ref – coordinate and share identities, synchronous, must be iolated in a transaction, uses locking under the hood
  • ensure – ensure the state is the same when the transaction is completed
  • alter – change the value of a reference in a transaction, if another transaction tries to change it gets aborted
  • commute – same behaviour as alter but allows concurent updates in a transaction, use for counters, adding elements to a map, if you are not sure use alter
  • agent – asynchronous communication, atomic updates, ensure only one thing done at a time, every agent has its own queue
  • send – send an action (function) to an agent, execute in the order that you send them, can’t guarantee that other threads are not sending action, fixed size thread pool
  • send-off – variable size thread pool
  • vars – thread safe, global identity, alter-var-root to modify global state created by a def, by convention dynamic var is surrounded by * (called earmuffs)
  • swap! and reset!, convention to put a bang at the end of functions that have side effects or shouldn’t be put inside a transation
  • watches – experimental, takes 4 arguments – key, reference, old state and new state, you can then add-watch
  • future – background process, if you de-reference the future it will block (@<ref>)
  • promise – like a future but no running process, like a container, can wait for it to deliver that promise to another thread, can only be delivered once
  • realized? – to ask if a promise has been delivered

Polymorphism

  • polymorphism – two types protocols and multi-methods
  • type – what is the type of class using class or type
  • maps do not have a notion of type, record allow you to give a type to a map, defrecord creates a record, by convention the name has a capital, records are maps so we can call all the map functions
  • record automatically creates the constructor function called -><function>, map-><function> takes a map
  •  when you create a record you are generating a Java class, useful when creating a lot of maps with the same structure or to implement protocols
  • protocol – like a Java interface, group of functions that do not provide an implementation, called based on the first argument, defprotocol to create the functions
  • convention _ is an argument I don’t care about
  • reify – creates anonymous types
  • extend-type and extend-protocol – allows you to create new interfaces to existing types, solves the monkey patching issue
  • multimethods – generic methods, much more flexible than protocols, uses defmulti and defmethod, an extensible switch

Macros

  • macro – pure functions – defmacro – code is input and output, define the symbols to reflect the code that we want, macroexpand-1 is used for testing and debugging to see what that macro does
  • syntax quote `
  • unquote ~ and unquote splicing ~@
  • most of the core language where not functions are macros, write macros for syntactic convenience

Clojure and the JVM

  • Clojure is tightly integrated to the JVM, is unlikely to be the bottleneck performance wise
  • arrays can use aset and aget to access, use Clojure Collections but maybe needed for interoperability, can use to-array and into-array
  • types and collections are all mapped over to Clojure
  • built in benchmarking in Clojure using time function, time a loop to get a better indication rather than just time on its own
  • by default everything is boxed in Clojure, but Clojure has limited support for long and double primitives
  • compile – pass your namespace, will give you ahead of time compile which gives a modest (30% – 40%) speed increase amongst other benefits, usually will us leinengen or another tool (lein compile)

ClojureScript

  • ClojureScript is designed to deliver optimised JavaScript
  • two pieces – ClojureScrpt compiler written in Clojure on the JVM, compiles Clojure to JavaScript, then the Google Closure compiler optimises for space for performance
  • lein-cljsbuild makes ClojureScript tolerable
  • ClojureScript One but is superceded by Pedestal now
  • testing frameworks – Clojure.test, Midje testing framework written by Brian Marick and Simulant

Three A’s of Awesome

TEDHere is a highly inspirational talk on TED from Neil Pasricha, the author the 1,000 Awesome Things website.

His three A’s of Awesome are:

  • Attitude – life never goes to plan, but whatever life deals us we need to grieve and then face the future, take baby steps and move on
  • Awareness – embrace your inner three year old and see the world as if you are seeing it for the first time
  • Authenticity – be you and be cool with it, follow your heart and put in yourself in situations that you love

Derek Sivers on TED

TEDWatched a couple of short, unrelated videos on TED today from entrepreneur Derek Sivers.

When starting a movement, it takes a leader but the first follower is actually an underestimated form of leadership in itself. … The first follower is what transforms a lone nut into a leader! There job is to make it OK for others to join and to make it more safe.

Whatever brilliant ideas you may have or hear, the opposite may also be true. He gives the example of naming streets in Western culture, but blocks in Japan and how eastern doctors get paid for keeping you healthy, not treating you when you are sick.

Keep your goals to yourself because telling someone your goal makes it less likely to happen.

Tech Connect 2013 Brisbane Review

Tech Connect 2013With thanks to my very good friends at SlatteryIT, I headed off to Tech Connect 2013 in Brisbane this week to network with the Brisbane startup community.

Brisbane Lord Mayor Graham Quirk kicked off the day by reaffirming the Digital Brisbane strategy which already has seen the appointment of a Chief Digital Officer, a visiting entrepreneurs program and a strategy to attract more startups in Brisbane. He was keen to see more success stories in Brisbane, following on from start ups like Halfbrick, the inventors of Fruit Ninja.

Here are my notes from the sessions.

Enabling Entrepreneurship

Tyler Crowley is the first speaker to be brought to Brisbane as part of the visiting entrepreneurs program. Tyler is a well known and respected entrepreneur, best known to me as the co-host of the This Week in Startups podcast. I am not sure if there was meant to be any direction to this session, but it turned out to be a rambling question and answer session.

  • bring awareness to the community by getting people to tweet for being at an event – you will be surprised how quickly the city will get recognised
  • startups tend to congregate in the same area – in San Francisco it is around the Twitter office, in Palo Alto it is around University Avenue and in Los Angeles it is around Santa Monica, places that have startup centres benefit due to the cluster effect, cities like Stockholm are suffering because of a lack of this
  • River City Labs is probably currently the nexus of the community in Brisbane
  • the crowd funding model is still on the horizon and should be awesome for startups outside Silicon Valley, AngelList just got approval to have a crowd funding model from the SEC in the last week
  • another company getting acquired in the next 6 months will really put Brisbane on the map
  • attracting VCs – LA does content very well, San Francisco does social networking very well, so attract the kind of startups to the industry that you do well and get that message out
  • Brisbane has incubators like River City Labs (private) and ilab (government / university)
  • documentarians are important – TechZulu in LA and Scobleizer in San Francisco – provides a window to everyone outside, TechZulu is a great model, it took two years as a labour of love until it became profitable, the mainstream media follows when it becomes popular and it will explode
  • Brisbane is in the frustration phase of funding and media coverage – they will take notice when they become embarrassed by the success of startups and documentarians – currently at the tipping point, it is inevitable!
  • if your city had a blank canvas – getting a nest is important, support the documentarian, support angel events, support local meetups and events!, hold regular monthly events, calendars and job boards, strategy to attract outsiders to get the “Apple Store effect”
  • This Week in Startups – is the global meeting place to inspire people
  • build a startup map of Brisbane, one exists of Australia, maintain a database like CrunchBase
  • it is time for the banks to wake up and support startups like Silicon Valley Bank who are now spreading as the major banks are asleep at the wheel, there are opportunities for supporting industries to step up

Think Big!

Matt Barrie is the creator of Freelancer, which is the worlds largest outsourcing marketplace. I was really looking forward to seeing this talk and it did not disappoint! His presentation is also available online.

  • software is eating the world – the biggest bookstore in the world is digital (Amazon), Scrapbooking (Pinterest), Evernote, maps, music, yellow pages, fashion, money, real estate, jobs, etc, etc, etc…
  • 66% of the worlds population are yet to join the Internet
  • demographics are changing and aging – lots of opportunities in this space as well
  • lots of online learning opportunities – you can design logos easily via Envato, Stanford University had 170,000 online students enrolled in an Artificial Intleligence course that normally attracted 250 people and the highest achievers were outside Harvard, there are also options like Coursera and Khan Academy amongst others
  • created Freelancer.com – we are now a service economy, the world is becoming very globalised, crowd sourcing (outsourcing has now turned to crowd sourcing eg. logo design)
  • Exposé the Freelancer.com logo! – crazy pushing the boundaries of crowd sourcing, also Kickstarter and the Pebble Watch – wanted $100,000 to build, raised $10 million!
  • Kickstarter funds more projects in arts than the US government, the next big thing is musc
  • The World is Flat
  • parabolic growth comes from distribution firehoses eg CityVille growth in Facebook, Viddy for reading news in Facebook, Google, Reddit
  • you need to strike early, before the idea gets crowded eg. games in the AppStore like Angry Birds who owned the market early
  • the new metric is growth – referrals are extremely important – see Startup Metrics for Pirates
  • all the software you need is free or cheap
  • Reddit.com ha a sub-site for everything
  • sites like RetailMeNot started with $30, Digg started with $60
  • the first dotcom bust was due to bad business models and a strong reliance on advertising, but in reality we are still in the original boom
  • Zynga – 96% of users don’t buy anything, the 4% that bought a cow to impress thir friends raised them $1.2 billion
  • many companies are not ready for growth, a mess internally and financially
  • there is lots of potential to replace people with algorithms and insights
  • in Australia we need to find a way to build technical businesses in the financial sector, like we do for mining
  • enrolments in engineering is down 60% in the middle of a technology boom, we need to start seeding interest back at school level
  • any job that can be described by an algorithm can be turned into software
  • Australia is a good place to base a startup, easier to hire people and start a network, but our exchange rate is crippling and if it rises it could become a major problem
  • you can build a big business targeted at the local market (eg Realestate.com.au), but always think global
  • Mary Meeker presentations should be used more in presentations

Money To Grow

This panel included John Hummelstad (Ephox and Concept Safety Systems), Sean Teahan (Nimble) and Doron Ben-Meir (Commercialisation Australia).

  • options include borrowing from friends, earning a buck first and investing your own money, earning from the bank (usually $2 million and up), funding by credit card, selling something, grants and R&D concessions, pay in 60 / collect in 30 days, angel network, information memorandum by getting close to OEM’s particularly those who you might potentially sell to, Venture Capital but this is decling, crowdsourcing
  • fund like minded companies to work closely with you
  • relationships at a strategic level are hard, but can bring rewards in the long term
  • CFIMITYM – “cash flow is more important than your mother”, business owners are awake at 2am worrying about cash
  • lean startups work very well for technology types of businesses, cash hungrier models need to exist because we still need to build products like iPads
  • figure out who in the supply chain cares about your type of business – they are good areas to look for investors
  • the large amount of successful businesses do not have venture capital funding – should only consider this if it brings value
  • essential that you break every rule in private funding that you can’t break in the public market
  • Australian Government has uncapped 45c / dollar R&D tax incentives (quarterly in arrears), then you move to incentives from Commercialisation Australia
  • Enterprise Connect is great way to take your business through the washing machine – your business needs to be able to stand up to audit
  • getting a commercialisation grant – it is your onus to prove that your invention works, once that is proved the commercialisation then needs to be tested
  • make sure when meeting potential funders that you can answer how you are going to solve their problem, also make sure you know all about them, use tools like LinkedIn and be educated, it is just courtesy
  • important to have front foot sales to fuel the fire but most importantly to get validation from the customer base, it also builds credibility by reinvesting your profits, biggest issue with technical companies in Australia is there an aversion to being a saleman, it is all about selling and if you are not prepared to do this then don’t start!, you are selling yourself not the product
  • selling is learning – you need to learn what your customer wants and your value proposition

Accelerating Growth

This panel included Natasha Rawlings (StreetHawk), Ric Richardson (inventor of software activation amongst many other thing) and Steve  Baxter (River City Labs). Ric mentioned that he gets lots of attention from his appearances on Australian Story (The Big Deal and A Done Deal).

  • your first role is not to be the CEO but the Chairman of the Board (looks at the business to ensure they have the ideal CEO and are delivering to plan)
  • find the right people and partner with people who have done his before and hold them to their agreements
  • the right investors can bring you the introductions to partners, even if they decide not to invest in you
  • always deliver a good product and don’t piss the customer off – service is still important
  • raising equity starts with a plan – do this only when you need the funds, it should be the last resort, ensure you have a capitalisation (cap) table so you can understand what will happen to your equity – start with 30% for founders, 30% for management and 30% for investors
  • always start a business by looking at what it will look like when it is finished
  • Stanford University has a useful entrepreneurial course, be disciplined when following the Lean Startup model and have a plan
  • build a better prototype and often it will sell itself, other people will tell you quickly what it is worth
  • network deeply, meet people twice, ask questions even the ridiculous ones
  • investors are there to support and provide leadership, when you start pulling out agreements you know things are going wrong, like to know that they have listened

Setting Up for Global Success

This panel included Brendan O’Kane (OtherLevels), Jeremy Colless (Artesian Venture Partners, which was spun out of ANZ) and David Israel (UniQuest)

  •  base yourself close to your prospects
  • important to think global from day one, particularly in the technical field, be worlds best rather than Australia’s best
  • take advantage of the Australian talent spread across the world, utilise international students particularly those from north of Australia

Building Value

This final panel included Anne-Marie Birkill (OneVentures), Bob Waldie (Opengear) and Steve Baxter.

  •  people are cheap – premium prices do not work, people care about price
  • service is key – give good service
  • businesses are not charities, lifestyle is not a sustainable currency, you need to make money
  • ideas are not traction – get off your arse and learn what you don’t know
  • when looking for value, you are looking to triple an investment
  • success is building a valuable, non-charitable business, a second round of investment is not success
  • don’t think you can take a great technology idea to a crappy service industry eg taxis – they are not interested
  • make sure you formalise arrangements, in case things go bad, write down the exit conditions and make sure you are aligned

Overall a great day of presentations, panels and meeting new and interesting people in Brisbane technical and startup community.

Episode 56: Scrum Australia plus a Hint of Peas & Apples

The Agile Revolution's avatarThe Agile Revolution Podcast

Scrum Australia 2013Craig and Renee rendezvous in Sydney for Scrum Australia and clear the backlog for a way overdue podcast. Whilst Craig battled a cold and Renee a fit of giggles, they discussed:

View original post 37 more words