Archive for the 'learning' Category

19
Jan

Seed Conference

I just returned from the Seed Conference and all I can say is wow. This was a wonderful, thought-provoking, and inspirational event. If another one comes up, I highly recommend attending.

There was a lot of interesting information that was presented both directly and in-between the lines of the talks. It’s great to see so many inspiring individuals giving talks and hanging out at the conference. There were a ton of fresh ideas and a strong sense of innovation that was felt throughout the day.

Carlos Segura, Jason Fried, Edward Lifson, and Jim Coudal all gave great talks with good content.

If I had to boil it down to a few over-arching themes - the conference was really about truth, happiness, pride, innovation, and getting real.

I also can’t say enough about the location of the event. As someone who sits in a typical office environment most of the week, it was refreshing to be in an environment that encourages learning and has inspiration at every turn. It was also nice to be surrounded by individuals that are pushing the boundaries of our industry and unsatisfied with the status quo.

Over the next week or so, I’ll try to get around to posting some of the notes that I have from the event (1/2 a Moleskine full).

17
Aug

Agile 2007 - Parting Thoughts

Overall, Agile 2007 was a wonderful experience. I really enjoyed my time at the conference and attended some really good sessions (and a few that were really bad as well). This was my first conference and I’ll be back for sure next year.

My favorite sessions included:

(Follow the links for the abstracts, presentations, and handouts)

  1. Agile Enterprise Rollout–The Greening of the Software Industry (Jean Tabaka, Ryan Martens)
  2. The Role of Leadership in Software Development (Mary Poppendieck)
  3. Learning Kaizen from Toyota [with MindMaps] (Mary Poppendieck, Kenji Hiranabe)
  4. I Don’t Like Mondays - Improving Agile Team Collaboration Events (Jean Tabaka)
  5. Reaching New Heights: Learning to Adapt is Essential (Susan Ershler)
  6. Agile adoption at Google: Potential and challenges of a true bottom-up organization (Mark Striebeck)
  7. The Agile Enterprise: Real World Experience in Creating Agile Companies (Jeff Sutherland)

Some of the big-picture realizations that I came to:

  • Mary Poppendieck has turned into the Tom Peters of the software industry (well-deserved).
  • Lean thinking has started to move to the center of the agile universe (finally).
  • Executable specification / story-driven development is moving to the mainstream (finally).
  • Everyone wants to scale agile.
  • Everyone wants to distribute agile.

A few things that I’m concerned about:

  • Lean has moved to buzzword status. A lot of people are talking about Lean but I don’t think the majority understand the essence behind it. I think this will get better.
  • Everyone wants to make “Enterprisey” software with agile teams.
  • There are a lot of “agile” consulting firms that are full of shit.

And some other random thoughts…

I think the fact that everyone is focused on “scaling” agility to large teams and distributed projects and that there will be a lot of agile disasters over the next couple of years. Now that the bigger software companies are moving to agile, the teams are getting too big and they are adopting agile in scary ways (too big, too fast). I think that you need to evolve to big teams, not start out there. I would also (passionately) argue that you should focus on how to have smaller software instead of how to scale agile teams to accommodate large software. I seem to be in the minority.

Lastly, I really think that the organizers of the conference need to step it up. The programs sucked (hard to read, hard to navigate, mis-prints, missing pages, etc.), the event was really hard to follow (talk duration, locations, topics), the location of the conference sucked (tight hallways, hard-to-find rooms, etc.), and the beverages and food was awful (a big thank you goes to Rally for providing everyone with bottled water).

I certainly appreciate that everyone worked hard to put this together, but I expect the basics to be nailed for a major conference.

13
Oct

devLink Chalk Talk

Well, I made it to Nashville and I’ll be giving a chalk talk about TDD (well, kind-of). I’m planning on having the discussion around the benefits of TDD that we typically don’t talk about. I think that TDD has finally made it into the minds of most developers and talking about the non-testing aspects of TDD is an interesting topic.

I have a presentation that I can give on this topic, but I’m not sure if I’m going to do it with the slides or not. Regardless, it should be a blast and I’m looking forward to what others have to say about the ideas. I’m also extremely excited to hear the experiences of others and letting others know of the my experiences.

Here is a (compressed) mindmap that I put together regarding my thoughts on the session…

Session MindMap

09
Oct

devLink / Nashville

If you have a chance to make it to Nashville this Friday, you should check out devLink. Attendance is free and there is a great lineup of speakers that are set to be presenting. I’ll be up in Nashville on Thursday night and will be around all day on Friday for the conference.

The last I heard, registration is still open and there are already a ton of individuals that have registered to attend.

I don’t have the exact details yet, but I’ll be doing two chalk talks during the event. I’m looking forward to the event and I’m excited to see that the conference is covering some great topics and has the support of so many individuals.

I’ll post more details about my talks later this week as the details are ironed out.

I look foward to seeing everyone there.

19
Jul

Applied Lean Development

I ran across the Kaizen Secrets of the Toyota Mind post on the PANTA REI blog tonight and I think that all of the “secrets” are all applicable to lean software development. If you haven’t seenĀ  the post, I encourage you to check it out and think about each of these statements in relation to the work that you are doing and how each each of these items could help and be applied at both a project and an organization-wide level.

02
Jun

YAGNI - Across the Spectrum

YAGNI as a development concept is a very powerful idea. The idea of making a decision at the last responsible moment saves money, effort, rework, and will often save sanity. The idea is very simple and bascially revolves around removing speculation. When we constantly think in terms of YAGNI, we are often mitigating one of the largest risks to software projects.

In my experience, extensibility is usually the largest risks to a software project because it often results in the largest degree of over-engineering. This usually isn't a popular idea, but I think it's true. There are times when it's warranted and valuable, but the problem is that we tend to always think that it's valuable. We always say things like: "what if", "someday", "it's possible that", "I can imagine a scenario", and so on. These are usually things that should be considered, but not always things that should be developed. In theory, we need to pose these questions to our stakeholders and our stakeholders should be making these decisions (not the development team).

The problem with the theory (allowing the business team to make the decisions) is that they are often caught up in the same vicious cycle of over-engineering our specifications. When I'm handed a large requirements specification document, I know that 25% of it is outdated, 40% of it will never be implemented, and that the real value likely comes from 20% of the requirements. The state of the specification is a result of over-engineering by the stakeholders (and it compounds the issue of over-engineering by the development team).

I don't have a silver bullet to fix the issue, but I believe that we can at least identify the problem and get in the correct mindset of fixing the problem by thinking about how to eliminate waste. Simply considering known value vs. speculative value can go a long way. We should always be thinking about doing less. Less is a powerful idea because of the compounding growth of each additional thing that we choose to do. For every "I can imagine" scenario, we have business costs, development costs, testing costs, and maintenance costs. We also have other costs that we usually don't think about including opportunity costs.

To push the idea further, we should consider the idea of "less" across the spectrum of our activities. One big opportunity comes with documentation. I think that The Elements of Style should be required reading for everyone that contributes to documentation on a project. Our documentation should be concise and avoid all the additional "fluff" that makes up the majority of the large documents that I see on typical projects. Documents should be focused to the point that every word in the document has meaning just as every requirement should be valuable and every bit of software should be testable.

Unfortunately, the idea of more is the norm. The positive side is that we are the problem and we can all take steps to eliminate waste in our day-to-day activities. If we don't do anything else, we should at least consider how the idea of "less" can apply to our projects and our organizations. It's not an overnight change, but it is a valuable exercise in thinking about what really matters.

15
Apr

Test-Driven Learning

A while back, I was looking for an answer to a Javascript question and I ended up finding the answer in this Javascript reference. More important than finding the answer to my question, I was intrigued by how clear the reference was with minimal text and the fact that the reference was put together as a list of assertions. It came down to the code being self-documenting and being very easy to understand.

Ever since I saw the Visibone references (all of which are very good), I have tried to learn new languages taking a test-driven approach to learning the legend. Usually, the first thing I learn about is a test runner that I can use for the language and then I play with the language by using the test runner and creating a bunch of tests. Everything is self-documenting and I can go back and tweak examples when I want to expand on my knowledge or find out how certain scenarios work. Best of all, I have a record of my learning and when I switch versions of the language or library, I can simply run my tests to see if anything I know has changed since the last time I used the language or library.

I recently started playing with the prototype library, and this approach has been a great asset. I can learn a little at a time and review my progress at any time. The prototype library is a Javascript library and I started out by using the script.aculo.us unit testing library (which is built on top of prototype).

My approach was to create a new .Net website, create a master page with all of the javascript references, and then adding new content placeholders for each logical area that I'm learning about.

My test page looks like this…

…and the tests look something like this…

This has been a great way to learn prototype and I think I'm probably going to do this more and more moving forward. Just about every language seems to have a unit testing framework and I like the idea of having code that I can go back and execute.