Working On Assembly Made

by Jess Brown

Assembly Made: What is it?

A month or so ago I found out about a cool new platform called Assembly Made. The idea is pretty simple and works like this: Someone has an idea for a business and they post it to Assembly Made. The idea gains traction and popularity by people discussing the business plan, market, potential, customers, etc. Then, if there's enough interest, the community starts to develop it. Almost anyone can contribute. Apps need all sorts of skills to be built: copyrighting, photography, design, code, ops, etc. A core team is established to provide direction and create tasks for the project. Each task is valued a certain amount of "coins" and when someone completes the task, they are awarded the coins. The amount of coins you have for a project determine your equity stake in the business and also determine your share in the profit sharing system. Assembly keeps 5% of the equity and the project owner is reserved 5% of the equity. The rest is earned by the contributors.

This is really an interesting idea and I can't wait to see how it will play out as new products are built and launched. No one knows how successful (or not) this concept of crowd sourcing the development of software will be. As with any business, especially a startup, many of these businesses could fail and never get a single customer. So is it worth your time? I think so and here's why.

Working with great people

There are some great people working on Assembly products. If you've never worked on a team or just want to get some experience with the experienced, then this is an easy way to to do it.


Whenever you work with other people, especially with others as good or better than your own skill level, then you're learning shoots through the roof. I always learn so much working others.

It's easy to get started

It's really easy to get started. The Assembly staff is always around to answer questions, hop on chat, screenshare, pair, help you get setup etc. They also do a good job of breaking down tasks so they're small enough that anyone can get started. Example: anyone can edit copy, right? And once you get started, the next tasks are much easier.

Working with actual projects

As a consultant, most of my experience is with building products for clients. I love open source and think it's very important to contribute and give back, but it's never been easy for me and probably others too. Lots of open source projects are tools, libraries, gems, engines, etc that are a lot more complicated than 90% of a typical rails app. So I found working with a actual product (which, in my observation, is what the majority of Assembly projects are) more up my alley.

Work at your own pace / commitment level

Because the tasks are broken down in to small stories, it's really easy to work a little or a lot. Some weeks I have more time than others and can spend a whole day working on Assembly. Other weeks I only have a few hours and some weeks, I have no time at all. When you decide to work on a task, there's a button that click "work on this task" that reserves it so others know you're working on it. Only reserve a task when you're ready to work on it and can get it done in a reasonable time, because there could be others that are able and willing to get it done too.

Boost your portfolio

If you're a creative, your portfolio is crucial in helping you win projects, clients, or jobs. Adding projects you've worked on from Assembly will likely bring the status and allure of your portfolio up. Clients will be impressed with the work that you and you team have produced and may be more willing to hire you for your next big project. All projects are open sourced, so it's easy to share your contributions.

Connections / Networking

Already mentioned is working with others to improve your skills, but working with others will also lead to new relationships, friendships, connections and networking opportunities. If you're a developer, a designer may notice your work and want to work with you on their next project. An entrepreneur may notice your feedback on discussions and want to hire you for their next project. A core team member may recommend you for a job within their company. Assembly is a great place to meet and work with other creatives like you.


In addition to all of the "side" benefits, I do like the core product. There's a simple profit sharing plan, contributions are automatically calculated when commits are merged in, and it's a nice way to invest in startups and take ownership of a business. Hopefully, the real reason you decide to work on a project is because you believe in the product and feel it will be profitable while solving a problem. However, these other benefits are totally valuable in their own right.

A few weeks ago I joined a friend from Atlanta, Patrick Van Stee (who works for Assembly) and we drove to Greenville, SC to join up with Matthew Smith to work on one of the Assembly projects called Helpful (now you know where the photo above came from :-) Besides being a fun "work" trip, it was a great opportunity to work with Patrick (who is a talented developer) and Matthew (a well known and talented designer). Had it not been for Assembly, I probably would have never gotten the chance.

Go checkout Assembly and find something to work on!

Generosity In Tech

by Jess Brown

I recently spoke at Tech Talent South which is a school that teaches an intensive course on Ruby on Rails. After meeting the students, I learned that most in this particuar class were not only new to rails, but were mostly new to the tech industry.

My presentation was about independent consulting and how I make a living doing it. I shared a lot of things I was a little uncomfortable sharing (income, struggles, advantages, disadvantages, etc). I wanted to be honest, open, and helpful.

I'm not quite sure why I was chosen to speak, but my reasoning for going was I wanted to do what I could to help others...just as so many have helped me in my career. During the presentation one of the topics I spoke about was generosity and giving back and how awesome our industry is at sharing and helping others.

I've never seen another industry that shares like we do. Our sharing through open source (Rails), blogging, (Rails Tips), teaching (Rails Tutorial), willingness to help one another with a troubling issue (Pair With Me), conference speakers (Ben Orenstein), screencasts (RailsCasts), sponsors (Mailchimp), workshops (LessMoney), organizations (RailsGirls) and more. Startup incubators like Atlanta Tech Village and FourAthens continually echo the idea of paying it forward. These are just a very small set of examples that are close to me. There are tons and tons more.

When I first got into this industry, I always wondered why people would share something so valuable. Why would people give away their secrets, knowledge, and experience for others to profit?

I recently read a blog post by Seth Godin about Generosity. It may be the best way to answer the question. It was so short and sweet, I can quote it here:

The generosity boomerang

Here's conventional wisdom:

Success makes you happy. Happiness permits you to be generous.

In fact, it actually works like this:

Generosity makes you happy. Happy people are more likely to be successful.

I really believe that is how it is within technology circles, especially on the creative side of things. Technology people are generous, they are happy and they are successful.

I'm reminded of an acronym we have in Christianity: JOY. It goes like this...The path to Joy is focusing on


I expect other religions have a parallel idea. Whichever way you look at it, there's a connection between helping others, happiness, and success. What are you waiting for...Go be generous!

Groking Conferences

by Jess Brown

I just recently attended Grok. I'm not a big conference goer, but I've attended LessConf several times and a few ruby conferences. Sometimes I always wonder why people go to conferences and how they justify the expense. As an independent consultant, I'm always trying to figure if my money and time was well spent. I once heard another consultant say "how can you not afford to attend conferences."

They're not cheap. Grok was inexpensive as far as conferences go. Here's my expense summary:

Ticket:    $ 200
Hotel:     $ 600
Gas:       $ 100
Dining:    $ 150
Misc:      $  50
Lost Work: $1500 # 2 days x 6hrs day billing @ 125hr
Total:     $2600

Now this is a real expense for me. My bank account will be $2600 lower had I not gone to this conference. That's a small marketing expense for GitHub or Pardot, but a much larger % of my bottom line. That's a nice MBP or almost a new bike! So was it worth it? I don't know the answer to that question so I want list some reasons why I go.

1. Fun

I work from home and don't typically get to hang out with people who do creative technology stuff like I do. Spending time with them and getting to chat about the latest cool thing is awesome.

It's fun to travel.

Conferences also do cool things like schedule us to drive high performance BWM's!

Allan & Cebo about to make all the driving instructors very nervous.

2. Learn

You learn lots of things a conferences. It's not always technical. It could be things about teamwork, process, sales, or all sorts of stuff. You get to talk about what everyone's talking about and be a part of the conversation.

Grok is especially good at this. They have 10/20's where you get to split up into groups and have relevant meaningful discussions.

3. People

The people has to be one of the biggest reasons you go to a conference. You get to reacquaint with friends and people you've met from other conferences. You get to meet heroes, people that inspire you, people you've been following on twitter for years, but never met.

Matthew Smith aka @whale and I about to entrust our lives to someone else driving a fast car. Matthew is a design super hero.

Some of the best experiences you have are meeting people that you didn't know existed. I love meeting new and interesting people and it always makes me a little sad when I see photos of photos after the conference of people I didn't even get the chance to meet.

4. Business / Networking

There is a business reason for me to going. My hope is that by meeting people and making friends and connections, I'll be in a position someday to help them solve a problem or build something really great. I hope that I can be at least close enough in people's circles that if they have a need for web / rails developer, they might remember that nice good looking (ok that's a stretch :-) guy they met and consider me.

5. Inspiration

There's usually a keynote speaker or two there by design to deliver inspiration. At Grok this year, for me, it was Kristian Anderson.

He talked about the misguidance of following you passion. My take on it was while you should do something you enjoy, you shouldn't do it just because you enjoy it. No matter how much I want to be a pro cyclist, it isn't going to happen. You have to do what you're built for and also what you're willing to suffer (ie what real passion means) for.

This hit home for me because as a designer and developer, I struggle with the thought that I should strive to be great at one or the other. But I know I can never be the next Matthew Smith or Aaron Patterson, but put the two together and mix in a little business smarts and I might have something unique to offer.

You can always find little takeaways like that to bolster your confidence and help you focus on what you're willing to suffer for.

6. Getaway with Wife

Most conferences I go to my wife comes with me and my kids do not. It's a great opportunity to spend a few days (my kids are young so we don't stay gone long) away. She doesn't usually go to the conference, but she'll come with me to the dinners and hangouts.

Patty really wishing I'd stop taking her picture in the hotel lobby.

Not all bliss

Despite all of the positives, I'd be remiss if I didn't say there are hurtles as well. Besides the financial cost, mixing and mingling can be extremely difficult for some. I figure I fit more in the "outgoing" category and I still have a ton of insecurities. This is no reflection on Grok or any other tech conference. In my experience, they're always fantastic. The problem is our fears.

Logically thinking, I believe I'm a cool guy, have a pretty wife, a successful business, am friendly, and am experienced at what I do, but emotionally, I have a ton of insecurities at conferences. I worry that I won't be cool enough, or that I people won't like me. I worry that people will not want to talk with me if I walk up to them, or that they wished they'd sat beside someone else. I stress about why people don't follow me back on twitter or ask me to dinner too. I wonder why people don't take photos with me or mention me in their feed.

I was expressing these to my wife one night and she said, most of the others have them too. I suppose she's right. Regardless, it's just a part of being human, putting yourself out there and being willing to make yourself venerable. Without doing that, you'd never get to enjoy all of the positive experiences and meet so many cool people. So if you feel a little like I do, just remember, others feel the same way.


All in all it's a great experience. Grok was exceptional and I already know I'll be back next year. Hopefully the relationships I rekindled and started will evolve further. Hopefully several cool projects will come my way via a referral from a fellow groker!

So, my final conclusion is: conferences are worth it. You can't go to them all, but selectively choose at least several a year to attend and it'll be worth your trip!

Follow me on twitter

Reformatting With Vim

by Jess Brown

If you're using markdown a lot with vim, you may have run into an issue with formatting. After you type a paragraph, then go back to edit, the auto softwrap that happens, gets off when you add or delete text.

This used to drive me nuts, until I found a simple fix. gq will reformat the line and reset the wrapping. Most of the time, you'll need to fix the whole paragraph because any edits typically effect lines and words afterwards as well. So, you can select the whole paragraph and reformat with vipgq.

I ended up mapping this to a shortcut:

# .vimrc
map <leader>al vipgq

Adding A Custom Field In Refinery

by Jess Brown

If you're a developer, you're always wanting to tweak and configure things to your liking. This is one reason I love working with Refinery CMS.

I was recently building a CMS for a client and in the design there was a main image at the top of the page:

I wanted my client to easily be able to swap this image out for another if they wanted. I wanted a field on the Admin > Edit Page screen that allowed control of this image. Refinery made this easy to do. Here are the steps I took to do it.

Add the field

rails g migration AddMainPhotoToRefineryPages main_photo_id:integer
rake db:migrate

Here we're creating a field in the main refinery_pages table and it's a foreign key. The foreign key will link to an image we add to the refinery_images table, which is making use of Refinery's existing method of handling images.

Update the admin form

To update the Admin > Edit Page form, you just need to override the view:

rake refinery:override view=refinery/admin/pages/_form

Now open app/views/refinery/admin/pages/_form.html.erb and add the below code to your form (I added it underneath the "form_fields_after_title" partial)

<div class="field">
  <%= f.label :main_photo %>
  <%= render :partial => "/refinery/admin/image_picker", :locals => {
    :f => f,
    :field => :main_photo_id,
    :image => f.object.main_photo,
    :toggle_image_display => false

Permit the field

I'm using Refinery on Rails 4 which uses strong_parameters, so we need to permit this field so it will be accepted in our create and update actions. To do this we can make use of Refinery's decorators. Create a new file app/decorators/controllers/refinery/admin/pages_controller_decorator.rb and insert this code:

Refinery::Admin::PagesController.class_eval do
  def page_params
      :browser_title, :draft, :link_url, :menu_title, :meta_description,
      :parent_id, :skip_to_first_child, :show_in_menu, :title, :view_template,
      :layout_template, :main_photo_id, parts_attributes: [:id, :title, :body, :position]

Here we're just overwriting the method in Refinery's admin pages controller that defines the page params allowed and we're adding our :main_photo_id field to it.

Setup the relationship in the model

Now we just need tell rails what to relate the main_photo_id field to. We can do that with a simple belongs_to. Create a new file app/decorators/models/refinery/page_decorator.rb

Refinery::Page.class_eval do
  belongs_to :main_photo, :class_name => '::Refinery::Image'

Now we have a simple field we can use to add or remove the image. There's just one more step: we need to specify how we want that image to show up in the view.

The Display

Depending on your design, there's lots of ways you could use the image we saved in the admin, but here's how I did it.

If you don't already have the show page overridden, go ahead and override it:

rake refinery:override view=refinery/pages/show

Now open app/views/refinery/pages/show.html.erb and place this code where it belongs on your page:

<% if @page.main_photo.present? %>
  <%= image_tag(@page.main_photo.url) %>
<% end %>

That's it! Let me know if you have any questions.