Posts tagged: project

Startup Weekend Postmortem: A Developers Perspective

A couple weekends ago I took part in Startup Weekend Okanagan at the Kelowna Innovation Center. It’s a full, catered, weekend of building a product from scratch, intending to build a business around that product, and pitching it to a panel of judges. I was lucky enough to be one of 6 attendees from Vernon who were fully sponsored by way of entrance fee (thank you Vernon UPS Store & Bold Media) as well as 2 nights in a hotel (thank you City of Vernon). While it’s all still relatively fresh in my mind, I thought I’d share my thoughts on what went right, what went wrong, and what I’d do differently next time.

What Went Right

Similar but not-so-popular groups merged into one · Initially there were 12 groups who gathered enough votes to move on to the recruitment round (before the planning/development round ~ rest of the weekend). I was one of the 12 (lucky) but only had one person interested in helping me. After joining my team, and wandering the floor, he actually found other groups with little enough individual interest but with similar enough ideas that we all merged into one group. 12 groups boiled down to 7, and our group ended up with 9 members with well rounded skills.

Building an MVP (Minimum Viable Product) · You only have a single weekend to piece together the group’s collective ideas to form an end product. We built our product around WordPress, customizing it with pre-built plugins where necessary. We used WordPress to express how the product would work rather than wasting time building a functional prototype from the ground up. When the weekend is over, and presentations begin, you only have 5 minutes to pitch your business and product. At least half of which is a presentation on the business plan of your product. There’s not much time left to show off the actual product. So we took our customized WordPress site and made it look pretty with a dummy profile page, pre-filled meals and static calendar feature. Enough to be able to quickly click through the main features to help express to the judges how the product would be used.

Picking a product name early · As soon as the name was decided, the rest of the team (marketing/business) could get to work on the social branding pages, including Twitter and Facebook. A logo was born, promotional video was shot. The team really felt like they had something to build around.

Ignoring everyone while they picked a name · From a developer perspective, work had to get done. We already knew we were building around WordPress but had no idea what the url of the site would be. So I set to work configuring my hosts file and apache vhosts with a dummy domain, installing WordPress, and starting on my piece of the project.

Focus on a limited feature set · We were 5 teams that merged together. 3 of our individual team ideas were very similar. We wanted to provide a service around sharing specific items. “Professional skills” was one idea, I wanted to do a co-operative advertisement service. The other idea was to share meals. Obviously cooking is a very specific “professional skill” which we could use to drive focus toward our product. We could have chosen lawn mowing. We could have chosen painting. We could have tried to tackle “all odd jobs” but we focused on this vertical slice, limiting the features and helping us make the most of the limited time we had.

What Went Wrong

I did not prepare my pitch · You get 60 seconds to pitch your idea. They are strict when it comes to those 60 seconds. I was just about to get to the good part when the buzzer rang and I was ushered off the floor. Without maximizing the use of my 60 seconds I failed to gain enough interest from my peers and barely gained enough votes to bring my idea it into the team building round.

Spending time creating features never shown · As previously stated, your time is limited. Part of my responsibilities early in the weekend were to work on the customer-facing interface. This had me researching how to customize the WordPress user profile page and installing and configuring the Adminimize plugin to limit what dashboard features the non-admin users would get to see. This was time wasted since during the final presentation we were never going to walk through the process of 1) signing up, 2) creating meals, and 3) “purchasing” other people’s meals.

Picking a product name early · You’ll notice this is in “what went right” as well. Most of the team was involved in this, while myself and the other programmer tried our best to start building something without first knowing the brand. It seemed like a whole hour (of our precious 50 or so) was dedicated to what we should call ourselves. It’s a necessary activity but most of the team was doing nothing else but this for the hour.

What I’d Do Differently

I’m guilty of this myself in that I did not do this, and had the project I’d pitched had support behind it I’d have wasted time, too: Already have a list of potential product names before the group meets for the first time. Having the brand figured out before-hand will help everyone hit the ground running. The community/social brand manager could then get to work right away creating the social profiles used to generate buzz. The project manager can get started securing a domain which in turn allows the developers to set up the site and their workspaces.

Next time I will not eat so much. There’s more food than anyone can eat in a weekend. Drinks included. I brought my own “snacks” (chocolate covered coffee beans and chocolate covered raisins) and I barely had an opportunity to eat them. I spent the weekend half focused on how uncomfortable I was from all of the food and drink in me. My own fault, a lesson learned.

While I didn’t see it as an issue, the other developer had said he wished everyone communicated a little better. I can see where he’s coming from but I was actually impressed with how well everyone worked together. Given that he thought that was an area for improvement, imagine how much we’d have accomplished if we did all communicate a little more. We didn’t really have an acting “project manager”. Rather, we had “the guy whose idea we were working on” and we all approached him when we had a specific question. If I’m responsible for that role next time, taking this lesson learned, I’ll make an effort to circle the room every so often to ensure 1) no one is working on duplicate tasks unless required and 2) there are no unasked questions from those who may not like to ask questions. All in all, we as a team didn’t suffer from 1) or 2) but a little more communication may have led to a better finished product.

Conclusion

Startup Weekend is a fantastic experience. Not only do you meet many people, making it a great networking event, but you’ll learn a thing or two as well. I know of an applications developer who learned MySQL for the first time. A Joomla developer who’s now eager to try his hand with WordPress. Myself, I was ready to build the MVP from scratch, account management system and all, before someone suggested we use WordPress instead. Brilliant.

Go for the comforts of food and drink and the company of like-minded individuals. Stay for the challenge. Take away a wealth of knowledge and industry contacts. And just maybe you’ll take first place.

*Note: We didn’t take first place. Our project, ChefShuffle.com, took the “biggest social impact” award. Coo Coo, a parking space service, took runner-up. Arkitektor took first place.

Slick, Phys2D, LWJGL, and Eclipse

This guide will be as straight-to-the-point as can be. Please note, I make an example of the Linux version in this setup, but you can substitute the instructions for Windows or Mac if that is what you use.

Purpose

Create an Eclipse project that uses Slick, Phys2D and LWJGL.

Requirements

  1. Slick – website – Download the “full distribution” slick.zip (~ 9.8 MB)
  2. LWJGL – website – I prefer to use the “last stable build” from the project repository (currently 2.2.0, ~ 3.6 MB)
  3. Phys2D – website – Download the latest build (current build 2008-04-06, ~ 100 KB)

Procedure

This is a personal preference, but I rename the Phys2D download. It downloads as phys2d-060408.jar, so I rename it phys2d.jar.

Next, extract/unzip the slick.zip file, it doesn’t matter where. We will import the files into the Eclipse workspace later anyway.

Open up Eclipse and start a new project.

File >> New >> Java Project

Presumably, you know your way around Eclipse so I will not help with the specifics of creating a project.

Now that the project is created, create a new folder called lib in the project.

File >> New >> Folder
Click the project name
Folder name: lib

Next, we import Slick and Phys2D into the project.

Right click lib >> Left click Import >> General >> File System >> Next
Browse to the unzipped slick directory and find the slick/lib folder >> OK
Select the following jar files
  • jogg-0.0.7.jar
  • jorbis-0.0.15.jar
  • lwjgl.jar
  • slick.jar
Click Finish

You’ve imported Slick, now we import Phys2D.

Right click lib >> Import >> General >> File System >> Next
Browse to the location you put phys2d.jar >> OK
Select phys2d.jar >> Finish

Now your lib folder should have those five jar files in them. Just about done.

We need to add the jar files into the project build path.

Right click the Project >> Properties
On the left, make sure Java Build Path is selected.
Click the Libraries tab >> Add JARs
Expand the Project
Expand lib
Select all of the jar files in the lib directory >> OK >> OK

You should now see a new directory in the Package Explorer called Referenced Libraries. The project is incomplete without first attaching the native libraries to lwjgl.jar. To do that, we first import those native libraries into the project.

Right click lib >> Import >> General >> Archive File
Browse to the unzipped slick directory and
select slick/lib/natives-linux.jar >> OK >> Finish
Do the same for natives-win32.jar and natives-mac.jar
(if you wish to support those operating systems)

Next, we attach those native libraries to the lwjgl.jar file.

Expand Referenced Libraries
Right click lwjgl.jar >> Properties
Select Native Library at the left of that window
Location path: >> Workspace
Expand the Project
Select lib >> OK >> Apply >> OK

Now you are ready to build your awesome game.

But wait, what about using the latest version of lwjgl? We skipped that step.

Right. We did. As of right now, we’re using the the version of LWJGL that came packaged with Slick. However, some users might run into a problem with LWJGL, particularly if you’re using Ubuntu 9.04 (like I am). At this point, if I were to try to compile a Slick program, I would end up with this error:

Failed to initialise the LWJGL display

The solution to which is to use the latest LWJGL native Linux libraries.

Extract that last stable build of LWJGL that you downloaded (lwjgl-2.2.0.zip).
In Eclipse, Right click lib >> Import >> File System >> Next
Browse to the unzipped lwjgl-2.2.0 directory, to lwjgl-2.2.0/native/linux >> OK
Select all of the .so files (all of the files in the directory) >> Finish
Yes To All when asked to overwrite files

Not entirely done yet. Trying to compile now would result in the following error:

Version mismatch: jar version is '16', native libary version is '17'

So we replace the old lwjgl.jar with the new. Find it at lwjgl-2.2.0/jar/lwjgl.jar. Import it into the lib folder of the project. You know how to do that by now. Compile and run again and all should be well.

P.S. You are done with all the extra unzipped directories and zip files, etc. Everything needed to run your project has been imported into Eclipse. They can be deleted if you so choose.

Update: It seems that now there is an additional problem, as follows.

java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

The solution was found at the jMonkeyEngine forums. You need to tell the lwjgl.jar where it can find the native libraries so it can run. Basically it calls for

Right click the project >> Properties >> Java Build Path >> Libraries
Expand lwjgl.jar
Select Native Library >> Edit
Click Workspace
Expand the project
Click lib >> OK >> OK

Staypressed theme by Themocracy