z2013 Session Incubation - SoCraTesUK/socrates-uk GitHub Wiki

Got an idea or want to contribute to someone else's? Put it on this page, and put your session at the top of the following list, separated by horizontal bars (use --- in Markdown).

Session Ideas

Reverse refactoring kata

*Hosted by Dmitry Kandalov (or whoever cares to facilitate)

How to do it:

  • take already refactored gilded rose (or any other small piece of code with good test coverage)
  • refactor it to be as bad as you can make it

The idea:

  • practice equivalent code transformations on their own
  • experience transition from reasonable to unintelligable code (because that's how code often evolves in real life)

I tried it once on my own. It was a lot of fun and way more difficult than I expected.

Interested:


Code kata arcade-style

*Hosted by Dmitry Kandalov (or whoever cares to facilitate)

How to do it:

  • choose a language and simple algorithm/problem you know well (e.g. scala and merge sort)
  • write acceptance test for the algorithm/problem
  • set up a timer for 10 minutes and try to implement solution in one go (just in like in arcade games in which you cannot save), where "10 minutes" mean minimum time you think it will take you to finish
  • compile code and run acceptance tests
  • delete code and let your pair give it a try

The idea:

  • explore your limits:
  • obstacles you find even in well-known language/environment
  • what mistakes did you make? can you not make any mistakes?
  • check whether result you expected meets reality
  • see how much you can do going as fast as you can
  • see what is different when you do it second, third time
  • observe self-serving bias
  • this is NOT about getting better at coding (although you might learn something), it's more about self-reflection

Interested:


The Importance of Metrics & Logging

*Hosted by Whoever cares to facilitate

Metrics and logging are super-important, they tell us a story about the usage of our application and help us identify bottlenecks, capacity issues and edge cases that we would otherwise be unaware of. Moreover they can be used to inform us of the success of a new feature and can be tied into our definition of done. I would love to attend a session covering the usage of metrics and logging, some common platforms and case studies. If anyone is experienced in this area and would like to do a session on metrics please edit this as you see fit.

Interested: James Lewis, Fox (though will argue the 'super-important' bit), @cfogelberg, Tom Westmacott (I could talk briefly about experience using metrics to test hypotheses about new features), Tom Brand


Architecture Kata

Hosted by Alex Bolboaca

Katas are great but we only usually do them at the code level. I'd like us to spend some time doing Katas at a higher level to improve our architectural skills. I've never facilitated an architecture Kata nor have I attended one but I imagine it would work in a similar way to a code kata; start with a problem (you need to put a website together in a day - go) then add complexity (you need to support hundreds of thousands of request per day, you need to add a service that takes > 10 seconds to complete etc). I guess we would work in pairs and then present our solutions back to the group after each pomodoro. If you've ever facilitated a session like this then please feel free to edit this entry as you see fit and put your name up to host it!

I just found this btw, some inspiration: http://blogs.tedneward.com/2010/06/17/Architectural+Katas.aspx

Interested: James Lewis, Fox, Philipp, Alastair Smith, @cfogelberg, Sandro Mancuso, Dmitry Kandalov, Tom Westmacott, Tom Brand


Teaching and Learning Software Development

Hosted by Alastair Smith

One of my interests is how people learn, and particularly how adults can continue to learn after they leave formal education. The opportunities for continued learning is one of the things I love about software development and craftsmanship: there's always a new tool, technique, product, practice or principle to learn about and try out.

Inspired by Ade Oshineye and Dave Hoover's Apprenticeship Patterns (Amazon), I'd like to propose a talk and discussion around the topics of teaching and learning to gather ideas on individuals' learning styles and techniques, and how we can better teach the craft of software development to apprentices, and how we can sensitively and appropriately teach the mindset of craftsmanship to experienced developers too.

Interested: Mani, Franziska Sauerwein, Alex Bolboaca, Steve Tooke, Fox, Chris Whitworth, Tom Brand


Lazy Evaluation

Hosted by Samir Talwar

I'd like to run a session explaining the benefits of lazy evaluation and how it can lead to more beautiful and performant code. It's a functional programming talk, but no knowledge of functional programming is necessary—I'll cover everything in the session. Expect whiteboarding and live-coding. It'll probably be about an hour long, including lots of time for questions and experimentation.

Interested: Emanuele Blanco, Alastair Smith, Mani, James Lewis, Sandro Mancuso, Tom Westmacott, Tom Brand


You Ain't Gonna Need It

Hosted by Emanuele Blanco

More than a session, this event aims to be a workshop/talk about how to effectively apply one of the core principles of XP, specially in big organisation which tend to naturally bloat their codebase because "we are gonna need this in the future", and as the result of lots of "architects" dictating how to arrange a codebase, even when they're not actively involved in the coding process. The outcome wants to be a sort of vademecum of how to train/convince people about the importance of doing only what is necessary at the moment, without trying to predict the future.

Interested: Franziska Sauerwein, Jan Sauerwein, Alastair Smith


Saved by refactoring

Hosted by Andrew Parker

Refactoring is one of those things that we do as part of the TDD cycle. However, when it isn't done there it needs to be done somewhere else. I often find myself adding refactoring as a step at other points in my process (code exploration, bug understanding, etc.). I'd like to talk about a few of the places where doing this has gotten me out of trouble. I'd also like to here where others have found refactoring practices to fit in and be valuable.

Interested: Franziska Sauerwein, Mani, Alex Bolboaca, Philipp, Sandro Mancuso, Dmitry Kandalov, Tom Westmacott


Great Code vs. Clean Code

Hosted by Jan Sauerwein

We all want to write better code. But what is better code? The two concepts of Great Code and Clean Code are coming from different directions. While Great Code focuses on using the computational resources in the best way, Clean Code focuses on code that is easy to maintain and to understand. I would like to discuss how to merge both ideas. What is needed to fulfil both approaches? Where do these two strategies interfere each other? We write code for other developers but we write this code to run on machines.

Interested: Alastair Smith, Emanuele Blanco, Mani, James Lewis, Chris Whitworth, Dmitry Kandalov, Tom Brand


Best Practice - The root of all evil?

Hosted by Jan Sauerwein

Best Practice is a business strategy for problems too complex to find the "right" solution. I have faced this approach entering the computer science more and more. I would like to discuss which situation are good for this approach and when to leave it behind. Why so many project managers and developers go for it? What are the consequences of the approach?

Interested: @cfogelberg


Pair programming sessions!

Hosted by Anyone & everyone

As many of us don't experience a lot of pair-programming / pair code-review sessions with each other it would be a good idea to hold such sessions throughout the three days of the conference.

People can bring their code-bases with their favourite project or work on something online that they find interesting.

Its a good way to collaborate and learn from each other - i.e. learn to refactor, review and assess someone else's code, help improve the design of their code, practise TDD, etc...

Interested: Alex Bolboaca (consider that I want to pair with you), Fox, @cfogelberg, Dmitry Kandalov, Tom Brand


Incremental Design

Hosted by Alex Bolboaca

Software design is a difficult topic and often (from my experience) ignored or misunderstood by developers. I would like to discuss incremental design and give examples of good and bad design. We can also practice design if you think it's useful, either in separate pairing sessions or in a group activity.

Interested: Philipp, Sandro Mancuso, Stephen Smithstone


Exploring design alternatives using TDD

Hosted by Alex Bolboaca

Design is the process of creating artifacts that solve problems. In the case of software, design is the creation of code entities that implement a feature.

After trying up-front design for a while, we realized that we can take advantage of the fundamental property of code: we can change it very fast. We realized we can do incremental design, and the most popular way to do it is TDD.

Ask anyone who does design (graphical, building, industrial etc) and they will tell you it involves exploring alternative solutions. For some reason, I’ve rarely heard about exploring alternatives when we program.

Those who do explore do it informally or with design sketches. TDD is however an interesting technique to use for exploration.

In this talk I will show a few patterns of design exploration using TDD. I’ve discovered them with the teams I helped and during community events, mostly during the 30+ code retreats I’ve facilitated or attended.

Interested: Fox, Philipp, James Lewis, Chris Whitworth, Sandro Mancuso, Dmitry Kandalov, Tom Brand


I TDD, you TDD, we all TDD together.

Hosted by Steve Tooke @tooky

I would like to run a ~2-hour practical introduction to TDD. Using simple game-based problems as a group we will explore the mechanics of TDD and how they can influence the design of our code. Expect pair-programming, round-table discussions, and group exercises.

I'm not intending to cover the costs or benefits involved with TDD, but introduce the mechanics and help people to experience the TDD worflow.

At least every other participant will need their laptop setup so that they can easily write and run tests in their preferred language.

Perhaps this could set the scene for Alex's Exploring design alternatives using TDD?

Interested: Philipp, @cfogelberg, Stephen Smithstone, Tom Brand


Deliberate Practice Patterns

Hosted by Fox

We all love code retreats, dojos and katas, but what differentiates the good from the average, and the great? Having spent the last two years running the London Code Dojo I'd like to spend a session gathering patterns that people have found to be really effective and trying to figure out what contexts benefit which patterns so that this information can be shared with the community.

Interested: Philipp, Dmitry Kandalov


Software Craftsmanship within an "Enterprise"

Hosted by Guy @guy127917

I'd like to talk about peoples experiences and opinions on business process management (BPM) systems, things like rule engines (Drools etc), enterprise service bus implementations, the value application containers. I'm interested in this in the context of wider reaching purposes than delivering web services and applications- manual workflows etc. How does working within a system like this impact the way you approach coding? Which coding practices are applicable to the architecture design? What practices do people use for testing these systems? (Since they allow testing to go beyond 'software testing' to testing complete business processes). And for the people that shuddered at the word enterprise- come and discuss why!

This could perhaps be linked with Alex's "Architecture Kata".

Interested: Philipp, Alex Bolboaca, Sandro Mancuso, Tom Brand


NoSQL databases/ db concepts

Hosted by Philipp

Besides coding, modelling and storing the business objects plays a big role in software design. Since the NoSQL movement has been going on for about 10 years, I was wondering how much these kinds of databases (Key-Value, Graph, ...) have been influencing software design decisions and how many of you are still big lovers of the relational models. This will be a discussion session to share experiences and to get a common understanding what kind of databases and concepts exist. In my daily working life, I often realize that there is still some work to do as many people seem to not know more than traditional OracleDB...

Interested: Jan Sauerwein, Alex Bolboaca, Tom Brand


Practice refactoring legacy code

Proposed by Alexandru Bolboaca

Hosted by Anyone (doesn't really need hosting, only a start)

I propose that we pick a code base and refactor it for 2-3 hours, even during more sessions. You don't have to sit through the whole time, but can come and go. Depending on the complexity of the code base, we can try out the Mikado method or just the characterization tests + refactoring techniques.

Interested: @cfogelberg, Sandro Mancuso, Stephen Smithstone, Tom Brand


Testing and Refactoring Legacy Code

Hosted by Sandro Mancuso

In this session I'll be showing some of the techniques I use when dealing with legacy code. I'll take a piece of legacy code, test it until is 100% covered and then refactor it. During the testing and refactoring phases, I'll be focusing on bringing the business language and requirements to life. This session is full of tips and tricks you can start applying immediately. Although the code is in Java, the same principles can be applied in any language.

Interested: Stephen Smithstone, Philipp, Dmitry Kandalov, Tom Brand


Your application is more than your code

Proposed by Andrew Parker

Hosted by Andrew Parker

I work for Puppet Labs on the Open Source Puppet configuration management system. Something that I get to see day to day is the struggles that organizations have with managing their applications completely and from end to end. I'd like to talk about what all of those pieces are that we need to manage, but maybe don't, and what would it take to manage them. I'll kick off the discussion with what I see, but I'd like this to be a brainstorm of what else is not being managed, but should be, and maybe even how it could be.

Interested: Dmitry Kandalov, Tom Brand


How to combine TDD and DDD/CQRS ?

*Hosted by Erik Talboom

We all love TDD as an approach to discover the design for our code. I've heard it mentioned times before: "TDD is good for algorithms but it doesn't add any value in data-driven applications." I would like to discover together with you how we can add value with TDD when you have a very fixed architectural pattern like CQRS. How can we combine these two powerful approaches? Let's find out. I will just be facilitating the discussion on this one, so don't expect me to deliver the silver bullet to you. I'm hoping we can find that one together ;-)

Interested: Sandro Mancuso


Pairing session on OpenID

*Hosted by Erik Talboom

I would like to add open authentication to our [website] (http://www.co-learning.be) for people to log on with their favorite social network account. I have never worked with this before and instead of looking at youtube videos or scrolling through tutorial blog posts, I am looking for someone to pair up with to help me set this up in our code base. The language we work in is C# but I'm sure I can translate any "big" language into C# without too much trouble.

Interested: Stephen Smithstone We use OpenID on our website, contact me leider


Discovering the possibilities of the raspberryPI

*Hosted by Erik Talboom

I have two raspberryPIs lying around at my house and haven't really done anything useful with them over the last few months. I am looking for some cool things I can do with them. Have you played around with one and can you share some of your ideas? Let's come together and see how we can stretch our imagination and run some experiments. I'll bring my two PIs and a small keyboard. I hope there will be a screen that we can use to hook them up to.

Interested: Dmitry Kandalov(I never tried it though)


Start a website for Software Craftsmen and Software Craftsmanship Communities (Scala)

*Hosted by Sandro Mancuso

I have this idea to build a single website where Software Craftsmen and Software Craftsmanship Communities around the world could have their profiles. This would make it easy for all of us to communicate and share ideas. I have loads of ideas for features. I would like to do it in Scala but I'm could be convinced to use Ruby as well. If you want to hack craft some Scala (or Ruby), let me know. I don't know much about Ruby though.

Interested:Tom Brand


Leave your IDE at home (Cyberdojo)

Pitt your pair against others on a head-to-head kata using only a web form in any languge of your choice using Cyberdojo.org. We'll have a retrospective in the end comparing you TDD cycles and whether you missed your IDE.


Legacy Code Refactoring