Google+

Creating a Hackfest Culture

Software development is moving at an insane rate. Keeping up with a single technology area keeps getting more difficult. Just look at web technology. Grunt, Gulp, Yeoman, Angular, Bower... verb.js. How do we balance the need to be agile and continuously produce, with the productivity increases we get with new technology? There is a definite possibility that the latest library/framework/technique can change the way you write, built, or deliver code. You could understand it today, or allow your competition to understand it first.

I've seen a simple practice that can change how your organization researches new technologies or explores new concepts.

It's as simple as this:

Get a group of your developers together, throw out all of the rules, and just create something new.

That's it. That's all it takes, and I'm here to tell you firsthand that it absolutely works.

Hackfest

It sounds simple, but it's one of the most powerful tools you can use. Set aside a block of time like a week or a weekend, come up with a goal, and just work together to see what you can build. The space will be a mess of cords and the discussions will be crazy, but it's all part of the process. It's like a startup where the results are more important than process.

Hackfest vs Hackathon

I often see the term Hackfest and Hackathon used interchangeably. While the loose definitions overlap, I think there is some value in making a distinction.

Hackathons are intense and exhausting, and they’re meant to be. They’re usually a whole weekend of focused work, often with insufficient sleep, and too much encouragement to use masses of caffeine to stay awake and coding for 48 hours.

Sorry, but I’m not going to do that for my projects, let alone yours.

-Alex Bayley

Hackfest vs Hackathon

Hackathons is a combination of hack and marathon. Hackathons I've seen are typically competitions, which makes them much different than a hackfest.

Include Everyone

Feel free to include everyone. This might be a good time for testers to provide feedback early on in a new process. Managers can learn a lot at these events, and they often were full-time programmers at one point. I've found they get the most excited about getting a chance to get their hands dirty and create something again.

The best part of including everyone is that you can learn from each other. A group of attendees with a diverse set of backgrounds is ideal. Hacking with JavaScript developers made me go out an use Angular.js on a project. A IoT hackfest got me interested in using devices for collecting sensor data with Azure. Hacking alongside a Technical Fellow gave me a vision of the future. I have a vivid memory of all of these experiences.

We're too formal for a "hackfest"

The second I say hackfest, I'll occasionally get the person that starts rolling their eyes. Interestingly enough, if I call it an application accelerator, it starts to sound like a great idea. Call it whatever makes sense for your company and project. It's the concept that is most important.

Why they Work

Hackfests work amazingly well for a number of reasons:

  • There is little to no stress to produce anything. This could lead to something amazing, or fail miserably. Failing still means we've learned something important. I've never seen a person leave without having learned something significant.
  • The environment is different. Just developing in a different context can change the emotional state of the developer.
  • There are no irrelevant interruptions. A good hackfest will provide isolation from the steady stream of calls, emails, and other distractions that force everyone to switch contexts.
  • If nothing else, consider this a team building exercise.

The best part is that this doesn't have to be an isolated event. Run a hackfest, see if it works, and then try to replicate the success. The more regular you make your hackfests, the easier they become. The overhead of planning meals, hardware, and instructions become minimal.

Don't Stop Now!

If you run a successful hackfest, don't stop there! Schedule the next one. Keep the rhythm of innovation going. The amount of overhead at each one will decrease, and the value will increase.

Don't forget to share the results with everyone up your org chart. Showing that this is a powerful tool will give you buy-in for the next hackfests.

Related

7 Lessons from Running a Hackathon

Credits

Summer of Tech 2013 Hackfest Image is Creative Commons

Like this post? Please share it!

See a mistake? Edit this post!

Using Unlimited OneDrive Space for Backups

Recently, Microsoft announced they're increasing OneDrive from 1 Terabyte, to unlimited. Unlimited as in infinity, endless, never ending, vast. You get the point. The only catch is that you have to have an Office 365 account. Considering you can get one for as little as $69.99/year, this is a phenomenal deal even if you don't use Office. If you get the 5 user edition for $99.99, you'll get unlimited space for everyone in your household. That's like 5 infinities! Kids know that the more infinities you have, the better.

The killer feature for OneDrive is that the files you store in it don't have to actually take up any space on your hard drive. After a file sits unused for some time, it can switch to an online-only mode. It will still appear to be on your computer, but it takes up zero space. For example, my OneDrive folder has 100+ GB on it, but on my laptop, it only takes up 307 MB on disk. When I try to open a file that's not actually on this computer, it will automatically pull the file down and make it available offline. It's all transparent to the user. This is a big improvement over the selective sync option in Dropbox.

Virtual Drive Space Screenshot

Now for the bad news. On my desktop, I have a 9 TB storage array, and a 512 GB SSD. My photo collection has ballooned in size, and is now well over 200 GB. If I were to simply copy these files into my OneDrive, I would both fill up my SSD, and the files would ultimately end up online-only. I want to have quick (read: local) access to all these files.

My first thought was to use robocopy, a powerful file copy utility included with Windows. My hope was that I could maintain a backup copy in my OneDrive, and simply mirror the new photos as they were added. I tried every combination of command line parameters, but I always ran into errors from robocopy (file cannot be accessed by the system) because it wasn't designed to work with files that only appear to exist.

Then, a breakthrough. I learned that OneDrive supports WebDAV. WebDAV is a protocol that runs on HTTP and allows you to open a remote resource as a folder in Explorer. It let's you do tricks like open a SharePoint document collection in an Explorer window.

Mounting OneDrive as a Folder

First, you'll need a special ID, called a cid to make this work. It's easy to get, just go to OneDrive.com, and click Files. In the URL, grab the cid value after the equals sign.

CID

Next, open an explorer window, navigate to your computer ("This PC"), and click "map network drive" in the ribbon.

Map Network Drive

The drive you're mapping is https://d.docs.live.net/YOUR_CID/, be sure to enter your CID in that URL.

Map Drive Details

When prompted for a username/password, use your live ID for the username. For the password, you can use your live password if you don't have 2-factor authentication enabled. If you DO have 2-factor authentication, generate an app password here.

Congratulations, you now have OneDrive mapped as a drive on our computer. This is different than the typical OneDrive folder, because changes on this drive are reflected immediately in the cloud.

WebDAV Drive

Robocopy

Now that we have a drive that takes up no space on our computer, but allows us to copy files to it without affecting our local copy, our work is easy.

For my photos folder, I run the following command line script:

Robocopy e:\photography "z:\backup\photography" /m /e /purge /mt

Command Line

Here is an explanation of the parameters I'm using:

  • e:\photography - The source of the files I would like to backup.
  • z:\backup\photography - The destination of the backup in OneDrive.
  • /m - Only copy files that have been modified. The archive bit on the file will indicate this, and will be reset.
  • /e - Include subfolders.
  • /purge - Delete files that have been removed in the source. You may choose to skip this so that accidental deletes won't propagate.
  • /mt - Use multiple threads. This speeds up the upload by a large factor.

Performance

Performance of WebDAV is not that great to be honest. Navigating around the drive is an exercise in frustration, but it wasn't designed to be used that way.

Performance of copying the files is alright. I've let it run overnight and it copied up a few gigs. After the initial load, the speed won't be an issue. But truthfully, I don't need it to be fast. It's just an additional backup.

Summary

Everyone repeat after me. OneDrive is NOT a backup solution. That being said, it can be part of a balanced backup diet.

You should always have an additional off-site backup, more are better. I rotate external drives for this purpose.

Update 2014-11-07

I found out WebDAV is messing up the destination timestamps, which makes the subsequent backups overwrite files that haven't changed. I've updated the robocopy paramters to use the archive bit on the files. Keep in mind that the archive bit doesn't work if you have multiple backup processes using it.

Update 2004-11-09

Added the /mt flag, which speeds this up 5x-10x.

Like this post? Please share it!

See a mistake? Edit this post!

Do It in Public

How many times have you run into a problem with your code? Stuck so bad you can't think about anything else. As time goes on, you get more desperate, changing your search terms, Looking for any glimmer of hope. You reach a point of desperation where you'll cut and paste any code you can find in the hopes that you'll get closer to the answer.

Conversely, how many times have you created a new console app to create a quick and dirty proof of concept? If it worked, where did you put that code?

I've been thinking about writing this for some time. Over the past few months, I've gotten in the habit of publishing every proof of concept, every sample project, and every demo. It feels great. I even started a podcast just to have more public discussions.

GitHub Activity

I know what you're thinking - it takes too much time and I have work to do. It takes much less time than you think, and the ROI will make it worthwhile. Get out there, create your GitHub account.

When you create a GitHub project, all you really need is a name, but ideally it should also have a readme file. I used to think this was a hassle, but I've come to realize that it's actually worth the time investment. When you have to explain a piece of code to someone else, it forces to you think just enough to ensure that it makes sense. For my quick and dirty test project, this may be just a single sentence. If it's throwaway code, just be honest and mention that.

Your code doesn't need to be perfect, and if you are afraid of public criticism, get over it. You need to focus on the developers that are desperately looking for a fix to their problem.

Scott Hanselman had a similar thought on his blog recently:

I hear several times a week things like "I'm not ready for people to see my code." But let me tell you, while it may be painful, it will make you better

Since using GitHub for my sample projects, I've found some other significant benefits:

  • Easy to email & share - When a coworker asks how to solve a problem I've already solved, I'm able to look at my GitHub account, even if I'm on my phone. I can grab a URL of the relevant file, and email a link.
  • Free backup - Over the years, as I've switched computers, I've lost a lot of code I wish I had saved. Putting it on GitHub, ensures that I can access it at any point in the future without having to worry about keeping backups.
  • Work from multiple computers - I've found it extremely helpful to create a proof of concept on one machine, and then pull it down to another as reference.

Stop making excuses. Contribute back to the community.

Like this post? Please share it!

See a mistake? Edit this post!

Jason Young I'm Jason Young, software developer at heart, technical evangelist for Microsoft by day. This blog contains my opinions, of which my employer may not share.

@ytechieGitHubLinkedInStack Overflow