Naming
Aug07

Naming

One thing in this project I’m not sold on is the name Crowdscriber.  I’d like it better if it were just Crowdscribe (sans “r”), but that domain name is taken. I figured it would be worth it to ask Avenue if they had any input and John Geletka setup a naming session with Shachar Meron.  Shachar took us through an exercise where we divided naming into several columns, we started listing off synonyms for “crowd” and adjectives/verbs for transcribe.  We ended up with a whole lot more than I expected. He did a great job making us really ponder not only our product but more importantly our audience.  Hats off to Shachar! Naming is tricky. It’s a constant balancing act between “too literal” and “too abstract”. In my mind I want a person to be able to hear our product name and possibly a brief description of how it works and be able draw some connection between the name and its purpose. Twitter is a prime example of an excellent name. Twitter is something a bird does, and typically it’s a stream of chatter, exactly what Twitter the product facilitates.  Not to mention you can create a verb from their name, the default action on Twitter is to “tweet”. So I’d really like to explore our options before completely committing to a name.  I consider Crowdscriber to be a working title for now, unless we can think of something better. Next steps will be to combine some of these terms and market test them. Don’t be surprised if you get an email from me in the near future asking you to rate your favourite names...

Read More
Chicago
Aug05

Chicago

Today Sean Kowaski, John Fehr and myself embark on the first of which I hope is many journeys on the road to Crowdscriber. We are headed to Chicago, a city for which I’ve only seen the inside of the airport. What brings us to Chicago? Well, there is a company there by the name of Avenue Inc. They’ve been clients of Grind for the past 2 years give or take however for this trip Grind is their client. You see, I’ve been so impressed with the UI and UX work they do on the iOS projects we code for them that I’ve decided to hire them, in a sense, to help us really nail down how our product will work.  I say “in a sense” because our companies have struck an understanding that “I scratch your back, you scratch mine”. The relationship we’ve forged is perfect for a startup, in a nutshell we are bartering software development dollars for creative dollars. I’m a huge proponent for look and feel, and the importance of understanding how a user should interact with software. That’s precisely why I know we need pro help to make sure our app is a killer product. Upon arrival we immediately felt welcomed as Avenue setup a nice little Canadian table.  The thing in the middle has a bit of special significance as it’s a product which we wrote an iOS app about for Avenue for one of their clients.  I know, it’s a napkin dispenser but the app was actually pretty cool 🙂 I repaid their hospitality by bestowing upon John Geletka and Isaac Abramowitz  a Winnipeg Jets jersey. Finally a jersey they can wear with pride, not like those bums the Blackhawks 😉 The day was pretty productive, John G. took us through an exercise that forced us to really think how the user will interact with our product. Questions like “what happens when they click here?” or “how are you going to accomplish X?” I for one tend to glance over details, but John definitely is detailed oriented.  This comes as no surprise to me. Many a night when trying to meet a deadline John will want “just one more build” because some UI component is off by a pixel. They say the devil is in the details, so these exercises are really good for me and ultimately for the product. The Grind team has been up since 4am this morning, we’re back at the hotel and going to grab a quick bite to eat and some nice refreshments.  We’ll hit the ground running again after a good night’s sleep. Next we tackle some naming....

Read More
Do one thing, do it well
Aug04

Do one thing, do it well

I gave up a pretty sweet contracting gig to take on the roll of Entrepreneur. Today I actually feel like one. When you are in consultanting, it’s not the same, even when you have people working for you. Your business scales linearly because the only way to make more money is to find more people or increase your margin (called “the take”) you charge for yourself or for your people.  Anyone who knows me can detect that I’m a happiness-over-money sort of person and consulting is only as good as your current client no matter how good the money is. For other’s who are motivated solely by money, well, they can suffer through the worst contracts imaginable but go home with a smile on their face counting their money the whole way.  That’s not me though. This is the first time I’ve removed myself from a contract without any intention of finding a new one. It marks a milestone for me personally, it means I might have to live on Ramen noodle at a time in my life where I should be enjoying steak dinners at a cabin I earned from the proceeds of my career. Instead I’m taking those consulting dollars and betting them on an idea. Focus is key I quit my consulting gig for personal reasons, but also because I really suck at doing two things awesomely. I couldn’t in good conscience just “milk my contract” while I try to do the thing I really wanted to do; build the product that’s been rattling around in my head for the past 3 years. It’s like being married to someone but thinking about another person the entire time. My mistress however is this product I want to spend the rest of my life with and I chose to risk it all and go for it. The best part of this risk; and at the same time the most scary part; is that it’s me who determines whether it succeeds or fails, no one else.  And really, what risk am I taking here?  What’s the worst that can happen?  I fail and have to take a 9-5 job?  #firstworldproblems if there ever were one. The idea – Crowdscriber Croudsourcing is the technique of taking a task, dividing it into pieces and allowing a bunch of people to work on those pieces individually in an effort to finish the task as a whole thing.  The idea for Crowdscriber came to me after we (The Basement Coders) did the James Gosling interview.  James, being a pretty important person, brought a lot of attention to our little podcast (over 50K hits...

Read More
Entrepreneurship
Aug02

Entrepreneurship

Today marks an important day in my life. I become an entrepreneur. I’ve owned my company Grind Software Inc. for about 3 years now. It’s start was a bit shaky, mostly because I convinced myself that I needed a partner. As it turns out, unless you find the right person, a partner is just an obstacle in your way toward achieving your goals. That partner is gone now, along with about $20K in buy-out money. Tough price to pay for a startup, but I don’t regret my decision. Now it’s just me, my employee of 1 year and a few trusted sub-contractors. Brief History Grind used to be “Onshore.ca“, I started Onshore as a sole proprietor, which means every penny of profit was taxed on my personal income. If you have a full-time gig plus a few contractors, your tax bill becomes really big, really fast. Grind started it’s life as an Incorporated entity. Incorporations are taxed at a much lower corporate tax rate on money which is left in the company. But aside from that, Grind pretty much does the same thing Onshore.ca did, and that is: consulting. You might have guessed by the old company name that the consulting is mostly done in a remote fashion, my target market continues to be the largest economy in the world: the U.S.A.  Since Marissa Mayer made her statement banning remote workers at Yahoo!, things have been a bit troublesome but nothing I can’t handle.  Besides, I know what I’m doing. Funding The goal for Grind Software Inc. was simple: Make money via consulting and spend it on product development. Product development is what I’m really interested in – and not someone else’s product – but rather one I own and nurture while (eventually) turning a profit. The reality? Grind Software continues to chase it’s tail in the consulting arena. With the exception of a small iPhone app called You Meme It!, Grind does consulting services for other companies and their products. I’m really not willing to put my financial future, or that of my family’s at risk by going into massive debt. So that removes “mortgaging the house” as a viable funding option. Actually, I couldn’t do that if I wanted to, a recent divorce has taken away that option all together. Organic Funding I have to put Grind’s money where my mouth is and take those hard earned consulting dollars and fund my products.  It’s time to step out of my comfort zone and “not have a full-time contract”  It’s time for heads down development of Grind Software Inc’s first real property.  It’s time for rain making, people!...

Read More
The Tenets of Remote Development Govenance
Jul22

The Tenets of Remote Development Govenance

I did a talk a while ago about how one can manage remote development teams which perform well.  I boiled it down to a set of tenets -or- principals to adhere to.  The presentation is up on InfoQ. In a nutshell I’ve found the following to be basic principals when, if followed, will render success: Resourcing Get the right people at the right time Quality Set up measures that continually test the quality of deliverables Accountability Create a culture where people are accountable for their deliverables Manageability Use tools to help manage your project and get everyone on the same page Control Figure out where your code and deliverables “live”, know how to cut someone off at any given time...

Read More
Java8 Lambda Expressions – Perhaps not as sexy as intended?
Nov15

Java8 Lambda Expressions – Perhaps not as sexy as intended?

Edit: Updated the lambda syntax to match that which is found in Brian Goetz’s November 17th presentation at Devoxx In my defence of Java, one of the features I looked forward to in Java8 was the introduction of Lambda expressions. However, a lot of people are dissing the new feature as being “watered down”, or a “poor man’s lambda expressions”.  To understand why, it may help to see how Lambdas are used and implemented in a language like Scala and then contrast this to Java8’s Project Lambda adoption. How Lambdas work in Scala Scala gives you a nice syntax for specifying type-safe lambdas.  You can specify a Lambda type like so: (paramType1, paramType2,...,paramTypeN) => returnType As an example let’s look at your classic “take a number and square it” lambda: val squareIt: (Int) => Double = (x) => x * x The Lambda type (or Function type) in the example appears immediately after the colon but before the second equal sign.  The variable squareIt is type-compatible with a function that takes an Int and returns a Double.  If this were a powerOf function, we could make it’s type: (Int, Int) => Double. The syntax Scala uses for specifying the “type” of a Lambda expression; the parameter types and return type; is very readable once you get to know it. However, I could have written the above example without the nice syntactic sugar like so:  val squareIt: Function1[Int, Double] = (x) => x * x The Function1 trait in Scala’s core library denotes a Function type that accepts exactly one parameter.  In this case, the incoming parameter type is an Int and the return value type is a Double.  For the powerOf example it would be of type Function2[Int, Int, Double]. Open up a REPL and type the following to prove this concept to yourself: scala> val squareIt: Function1[Int, Double] = (x) => x * x squareIt: (Int) => Double = scala> squareIt(2) res0: Double = 4.0 Java8 vs Scala Lambdas – Function Types vs. SAM Given Scala’s support for Function types, there is a convention Scala uses such that if an instance of a Class or Trait is being used as the subject of a function call then Scala makes sure the Class or Trait has implemented an appropriate apply method. For instance, in Scala: class SquareInt {    def apply(x: Int) = x * x } . . val squareInt = new SquareInt squareInt(2) On the last line above, Scala is really just calling the apply method on SquareInt.  SquareInt isn’t actually a proper function, but rather a Class instead. Expanding on this convention, when Scala sees… val...

Read More