Blog

Nov 29 2012

Comments

ClojureScript: Up and Running

enter image description here

We are thrilled to see the hard work of two of our team, Stuart Sierra and Luke VanderHart, pay off with the release of ClojureScript: Up and Running. Writing a book is hard work; writing one that makes it to print is harder; doing that while holding down a full-time job is damn near impossible. They pulled it off. Stuart also talks about the book on the Relevance Podcast.

O'Reilly has been kind enough to provide promo code CJSUR that can be used on their website for 40% off the print copy and 50% off the ebook. This code will expire on Feb. 1, 2013 at 2 am and cannot be used for any bundled purchases.

More information about the book:

Learn how to build complete client-side applications with ClojureScript, the Clojure language variant that compiles to optimized JavaScript. This hands-on introduction shows you how ClojureScript not only has similarities to JavaScript—without the flaws—but also supports the full semantics of its parent language. You’ll delve into ClojureScript’s immutable data structures, lazy sequences, first-class functions, macros, and support for JavaScript libraries.

  • Start writing ClojureScript code with the Leiningen build system
  • Learn how the ClojureScript compiler works to produce optimized JavaScript
  • Use JavaScript functions and libraries directly from ClojureScript code
  • Explore functions in Clojure’s sequence library such as map, reduce, and filter
  • Use macros to define new control structures or embed domain-specific languages
  • Compile manually or script your own workflow with ClojureScript’s compiler tools
  • Integrate ClojureScript with Clojure on the JVM to build powerful client-server applications

No previous experience with Clojure or ClojureScript is necessary. If you’re familiar with JavaScript, HTML, CSS, and the DOM, you’ll quickly discover that ClojureScript has the same reach as JavaScript, but with more power.

Nov 27 2012

Comments

Help, Even When it Hurts

We are a consultancy. Not a big secret. Our job is to do one of the following, generally in this order:

  1. Help our clients kick ass. Work directly with their devs, accomplish awesome stuff, and hope we leave their internal ecosystem in better shape than we found it.
  2. Kick ass on our clients' behalf. Work off to the side, accomplish awesome stuff, and hope we leave them with code and artifacts they can use far into the future.
  3. (and here's the weird one) Help our clients find a better way to kick ass than work with us.

That last one is pretty bizarre, since a business is in business only because it manages to attract revenue from somewhere. And learning that a prospective client can be better served by another vendor (or technology or strategy or timeline or whatever), could easily be in conflict with the mission of the business. But not if the mission is to help the people you meet find the best solution to their problem. When that's the mission, #3 is perfectly natural.

We had an example recently where a rather large, recurring customer of ours came to us with an idea. The idea seemed fairly well-formed and researched; they'd done some initial research on open source code and/or standards we could leverage to get the project moving, they had target customers and a revenue stream modeled out, and we had the capacity to start immediately. We signed off on the contract and invited them down to the office for an Iteration 0.

After a single day of the Iteration 0, nobody felt good about the project. There were more competitors, with more advanced features, already in the marketplace than the customer had realized. The revenue model seemed out of sync with what the market would bear, and frankly, the overall spend seemed light compared to the dawning realities of the need. Everybody went home or to the hotel that night thinking that maybe this project wasn't such a great idea, that the funding mismatch might be too much to overcome, but nobody was willing to just write the project off.

The next day, we decided to do something a little radical. Our customer started the day with the statement, "we don't think we should do this." Instead of that being the end of it, we scrapped the proposed agenda for Day 2, and our CTO (Mike Nygard) ran them through a two-hour business canvas session. (If you haven't been exposed to it, you should: start here). Sitting around a whiteboard version of the above canvas, the team discovered a vastly different approach to the problem at hand. The revenue stream would have to be different, but the potential revenue under the new model was a lot bigger. The up-front investment would have to be bigger, too, and would have to come from other sources. And Relevance may or may not be the right partner to build it. But the team left Day 2 confident that they had a grasp on a much better solution than they started with. Our Iteration 0 worked exactly as it was designed, leading to a well-informed "go/no-go" decision. Most of the time, you get "go". Sometimes you get "no-go", and every now and then, you get "wow, that's a WAY better idea."

Consulting shouldn't be limited to trading hours for dollars. It should be about engagement and collaboration and problem solving. The outcome for Relevance in this case is that we did exactly what we are supposed to do: help our customer solve a hard problem. It is just that the problem was answering the question "Should we pay Relevance a lot of money to build this system this way?" The answer, it turns out, was "no", or at least "not yet", which is a perfectly reasonable solution.

Nov 15 2012

Comments

Rails Rumble 2012 - Podcast Episode 020

cover art

It's our 20th episode! I'm not sure I ever thought the show would still be going after twenty of these, but we are, and I can't think of a better quartet of guests with which to celebrate it than Jason Rudolph, Kevin Altman, Jared Pace, and Michael Parenteau. They sat down with me and we talked about the 2012 Rails Rumble, in which they stayed awake for most of an entire weekend and produced goodmix.fm from scratch. Wow. Not only that, but out of 500 entries, they finished 10th. Double wow.

Download the episode here. I enjoyed listening to their stories of their experiences, and I think you will, too.

Read More »

Oct 31 2012

Comments

Where to Find Relevancers: November Edition

Want to meet a Relevancer in person? Here's where you can find us during the month of November:

Denver, CO 11/1-11/3
RubyConf 2012
Attending: Gabriel Horner

Malmo, Sweden 11/5-11/9
Oredev 2012
Speaking: Tim Ewald: Expressing yourself: Polymorphism in Clojure; Exploring Datomic: A Database Deconstructed

San Francisco, CA 11/7-11/9
QCon San Francisco
Speaking: Michael Nygard: Exploiting Loopholes in CAP

Chicago, IL 11/9-11/11
SCNA
Speaking: Jen Myers: Developers Can't Understand Design (And Other Completely Mistaken Design Myths)

Raleigh, NC 11/12-11/14
Clojure Training
Trainers: Luke VanderHart, Stuart Sierra

Raleigh, NC 11/15-11/17
Relevance Presents: Clojure/conj 2012
Speaking: Michael Nygard: Whence Complexity?
Attending: Almost all of Relevance!

Melbourne, Australia 11/29-11/30
YOW!2012
Speaking: Michael Nygard: Request Path Mapping; Architecture Without an End State?; Workshop: Production Ready Software

Oct 22 2012

Comments

Contingent I0: Reducing the Risk of New Projects

Summary: Software projects are often dominated by the trust created (or lost) at the beginning. The Relevance Contingent I0 provides a way to build that trust prior to any financial risk.

We're bone tired of asking clients to make profound decisions about how to invest in software based on a few hours of guarded conversation and an "estimate." It's like buying a house based on some blurry photographs and neighborhood comps. You can't really know if it will be valuable until you experience the walkthrough - everything else is just a filter to protect your time.

If you are a business owner or product manager thinking about engaging an outside firm, you care about two things: what is this going to cost me (in time, money, emotional energy) and can they do what they're promising?

There are other factors, certainly, but if you aren't confident in the answers to those questions, nothing else really matters.

And because project work is a relationship built on mutual benefit, we have to look out for ourselves as well. At Relevance we're constantly asking:

  • Is the problem clearly defined, or can we work together to make it so?
  • Does the problem need a software solution?
  • Will it be cost effective to implement that software solution?
  • Does the customer have the commitment to see the project through to completion?
  • Can we solve the people problems?

I have seen dozens of tactics to try to answer these questions prior to starting a project. Some of them are terrible (e.g. a blind RFP), others are fine but only correlative (e.g. the firm's past clients and success rate). Regardless, these tactics all have one thing in common: they don't work. Specifically, the vetting process does not predict where the real, specific risks will lie, nor does it predict how successful the project will be.

On the other hand, simply starting the project together is highly predictive. When we bring teams together and spend a few days (or weeks) fleshing out the high-level goals and release plan, the real risks and opportunities quickly become evident.

And it forces both sides to have serious, earnest, honest discussions about how to achieve success.

At Relevance, we call this initial phase of a project Iteration Zero (I0). We have been doing Iteration Zero for years, but usually only after spending weeks or months dancing around the vendor selection process. Sometimes that has been simply unavoidable. Mostly it's been a profound waste of time and energy for everyone involved.

No longer.

When we see a decision-maker seriously considering a development project, but unsure about who to trust and how to proceed, we perform the Iteration Zero on a contingency basis. This means that:

  • the customer does not pay anything up front
  • neither party commits to anything beyond Iteration Zero

At the end of Iteration Zero, the teams discuss the project and reach one of two conclusions:

  1. Both parties agree to continue, the customer pays for Iteration Zero, and the project begins as normal.
  2. If either party believes the project is not in their interest, the project ends and the customer pays nothing.

The second outcome should not be considered a failure. We have ended Iteration Zeros (or even terminated them early) when both parties agreed that the customer's problem didn't require a custom software solution (or that the custom software solution did not provide a reasonable ROI). While this is often disappointing for people who have become excited about a plan, it is a thousand times better than building something that shouldn't be built.

The Contingent I0 has worked so well for us and our potential customers that we are making it a more regular part of our process. If you are serious about investing in software to accelerate your business, and want to see a team put their money where their mouth is, think Relevance - and apply for a Contingent I0.

Oct 16 2012

Comments

Introducing Word Magic

You might have noticed that we have a number of authors at Relevance. Some of us studied literature and linguistics. We are a wordy bunch. We're also kind of obsessed with time, so it's shouldn't be a surprise that we would be interested in how language evolves over time. Lucky for us, then, that Google has digitized every book they can get their scanners on and made that data available to the world.

Read More »

Oct 12 2012

Comments

Rich Hickey - Podcast Episode 019

cover art

The Datomic team created a bit of a splash this past Wednesday when they released codeq, an open source project built on top of Datomic that lets you import a git repository. You can then run queries against it to find out all sorts of interesting things...at the level of individual functions! Very cool stuff, and I thought our listeners might want to hear more about it. Fortunately, Rich Hickey was kind enough to take a few minutes to enlighten me about the project.

Download the episode here. Hopefully you'll find it as interesting as I did!

Read More »

Oct 10 2012

Comments

Stuart Sierra - Podcast Episode 018

cover art

One of the great things about working with Relevance is the opportunity not just to work with excellent developers, but to actually pair with them. One of my favorite people to pair with over the last couple of years has been Stuart Sierra. He and another Relevancer, Luke VanderHart are the authors of Practical Clojure. But they are also working on ClojureScript: Up and Running, the first-ever book about ClojureScript. When I heard that the book would be out soon, it was just one more reason to finally have Stuart on the podcast. We talked about the book, about his role in developing Clojure itself, and about Stuart's decision to take up programming rather than acting.

Download the episode here. I hope you enjoy it!

Read More »

Oct 03 2012

Comments

Jamie Kite - Podcast Episode 017

cover art

We've said again and again on the podcast that software is about people. And it's hard to imagine software that could be more about people than a website that helps women understand their own bodies. Which is why, when Jamie sent out an internal email at Relevance about femm.me, her new fertility awareness app, I knew that it would make for a great episode.

So have a listen as we talk about Jamie's work on the website, how she came to Relevance, and the role of food in her life. Enjoy!

Download the episode here.

Read More »

Oct 01 2012

Comments

Where to Find Relevancers: October Edition

Want to meet a Relevancer in person? Here's where you can find us during the month of October:

San Francisco, CA 9/30-10/4
JavaOne
Speaking: Stuart Sierra: Clojure/ClojureScript: One Language to Rule the Web

Aarhus, Denmark 10/1-10/3
Goto Aarhus
Speaking: Michael Nygard: Speaking, Disband the Deployment Army; Trainer, Production Ready Software

Boston, MA 10/1-10/3
Business of Software Conference
Attending: Muness Alrubaie

Chicago, IL 10/5-10/6
Chicago Web Conf
Speaking: Jen Myers: Teaching our CSS to Play Nice

Orlando, FL 10/5-10/6
Magic Ruby
Attending: Jamie Kite, Ryan Neufeld

Durham, NC 10/10, 6:30pm
West End Ruby Hack Night at Relevance HQ!
Attending: Sam Umbach, Ryan Neufeld, Larry Karnowski, Daemian Mack

Raleigh, NC 10/17, 7:00pm
Triangle Devops Meetup
Attending: Sam Umbach, Larry Karnowski, Daemian Mack

Charlotte, NC 10/17, 7:00pm
Charlotte Ruby Meetup
Speaking: Justin Gehtland
Attending: Ben Vandgrift

Chapel Hill, NC 10/20-10/21
PyCarolinas
Attending: Clinton Dreisbach

Popular Tags