Skip to main content

First month of work done!

So! As I blogged about previously, I've begun working at a new company right after New Year's. I figured I'd get some thoughts out on how the first month has been.

Usually, when someone begins in a new job they're excited, nervous and above all very humble towards the existing practices that exist in the new workplace. Of course, I had these feelings, but being an agile fanatic, I was pretty sure that I would be able to find some improvement points. Here are some of the specific steps I took during my first weeks.

Step 0: Start writing a diary

I don't think an honest worker was ever harmed by being transparent in his work. A practice I've been doing ever since I started working is The Diary. Basically, just a personal wiki-page where you note down a few lines each day on what you're working on. Apart from being a good way to keep focus throughout the day and being a nice place to paste notes and code, it sends out a message: that you're interested in letting others know what you are working on. I'm going to be asking people what they're doing a lot, so being transparent in my own activities is a good start.

Step 1: Get Continuous Integration set up

One of my first reactions when I went to work on the code was a certain sense of claustrophobia. Here there were about twenty developers working on the same code base, and I really didn't have any feeling of who was committing what when. I first tried to get commit-mails set up, but due to some issues with commit-hooks in their Subversion setup, we couldn't get that working right away. So I turned to set up continuous integration with Hudson. My hope was that the CI changeset pages could work as a temporary commit-mail replacement, and since there already was a ViewSVN installation running, this worked out quite nicely.

From Drop Box
Note that the screen shot is not from our place, but from Sonatype's CI farm (tip o' the hat to Alf!).

Not long after that we were able to also get a nightly deployment of the build to the testing server, so now testers and designers can always experience the latest running on some local servers.

Note that getting this far in a couple of weeks would never had been possible in a traditional company (in my experience). The credit of this smooth setup belongs to some of their developers and admins, who put together the necessary scripts and server setup in record time. They actually had a continuous integration already, running the build each night as a cron-job. All I did was drop in the idea of using Hudson, and running the build on every commit.

Step 2: Do some agile preaching

I wanted to give the other developers some agile 101 very early, and luckily a slot opened up in our second weekly team meeting. I did this somewhat critical presentation on Scrum, so now when I accidentally throw terms like velocity and backlog around, they will have an idea of what I'm talking about.

Step 3: Whiteboards, whiteboards, whiteboards!

One of the things I did the first week was to get some large whiteboards ordered. I am of the opinion that you can never get enough whiteboards, and management agreed to spend a small fortune on this (again, something that wouldn't be easy in a traditional company). They finally arrived last week, and on Friday we finally got our team-lounge set up:

From Blogger-bilder
It's quite neat, I think. My plan so far is to use the far-left one for backlog stuff, the two horizontals for Sprint-charts, and the one on the right for anything else people would like to draw, be it architecture or obscenities ;)

It will be quite interesting to see how this works out. Some of the developers were speculating that the setup will be working for the first few weeks, and then fade away and people won't bother any more. Well, if people don't need this amount of communication in order to work efficiently, we will of course not force people to participate. I think everyone is better off if they spend 10 minutes of their day with the rest of their team on a daily standup in front of these whiteboards, but if people still don't like it after giving it an honest try, we'll remove the practice. After all, that's what being agile is all about.

Popular posts from this blog

Encrypting and Decrypting with Spring

I was recently working with protecting some sensitive data in a typical Java application with a database underneath. We convert the data on its way out of the application using Spring Security Crypto Utilities. It "was decided" that we'd be doing AES with a key-length of 256, and this just happens to be the kind of encryption Spring crypto does out of the box. Sweet!

The big aber is that whatever JRE is running the application has to be patched with Oracle's JCE in order to do 256 bits. It's a fascinating story, the short version being that U.S. companies are restricted from exporting various encryption algorithms to certain countries, and some countries are restricted from importing them.

Once I had patched my JRE with the JCE, I found it fascinating how straight forward it was to encrypt and decrypt using the Spring Encryptors. So just for fun at the weekend, I threw together a little desktop app that will encrypt and decrypt stuff for the given password and sa…

Always use git-svn with --prefix

TLDR: I've recently been forced back into using git-svn, and while I was at it, I noticed that git-svn generally behaves a lot better when it is initialized using the --prefix option.

Frankly, I can't see any reason why you would ever want to use git-svn without --prefix. It even added some major simplifications to my old git-svn mirror setup.

Update: Some of the advantages of this solution will disappear in newer versions of Git.

For example, make a standard-layout svn clone:

$ git svn clone -s https://svn.company.com/repos/project-foo/

You'll get this .git/config:

[svn-remote "svn"]
        url = https://svn.company.com/repos/
        fetch = project-foo/trunk:refs/remotes/trunk
        branches = project-foo/branches/*:refs/remotes/*
        tags = project-foo/tags/*:refs/remotes/tags/*

And the remote branches looks like this (git branch -a):
    remotes/trunk
    remotes/feat-bar

(Compared to regular remote branches, they look very odd because there is no remote name i…

Managing dot-files with vcsh and myrepos

Say I want to get my dot-files out on a new computer. Here's what I do:

# install vcsh & myrepos via apt/brew/etc
vcsh clone https://github.com/tfnico/config-mr.git mr
mr update

Done! All dot-files are ready to use and in place. No deploy command, no linking up symlinks to the files. No checking/out in my entire home directory as a Git repository. Yet, all my dot-files are neatly kept in fine-grained repositories, and any changes I make are immediately ready to be committed:

config-atom.git
    -> ~/.atom/*

config-mr.git
    -> ~/.mrconfig
    -> ~/.config/mr/*

config-tmuxinator.git  
    -> ~/.tmuxinator/*

config-vim.git
    -> ~/.vimrc
    -> ~/.vim/*

config-bin.git   
    -> ~/bin/*

config-git.git          
    -> ~/.gitconfig

config-tmux.git  
    -> ~/.tmux.conf    

config-zsh.git
    -> ~/.zshrc

How can this be? The key here is to use vcsh to keep track of your dot-files, and its partner myrepos/mr for operating on many repositories at the same time.

I discovere…

Automating Computer Setup with Boxen

I just finished setting up a new laptop at work, and in doing so I revamped my personal computer automation quite a bit. I set up Boxen for installing software, and I improved my handling of dot-files using vcsh, which I'll cover in the next blog-post after this one.

Since it's a Mac, it doesn't come with any reasonable package manager built in. A lot of people get along with a combination of homebrew or MacPorts plus manual installs, but this time I took it a step further and decided to install all the "desktop" tools like VLC and Spotify using GitHub's Boxen:

  include vlc
  include cyberduck
  include pgadmin3
  include spotify
  include jumpcut
  include googledrive
  include virtualbox

If the above excerpt looks like Puppet to you, it's because it is. The nice thing about this is that I can apply the same puppet scripts on my Ubuntu machines as well. Boxen is Mac-specific, Puppet is not.

It was a little weird to get started with Boxen, as you're offered…

Considerations for JavaScript in Modern (2013) Java/Maven Projects

Disclaimer: I'm a Java developer, not a JavaScript developer. This is just what I've picked up the last years plus a little research the last days. It's just a snapshot of my current knowledge and opinions on the day of writing, apt to change over the next weeks/months.

We've gone all modern in our web applications, doing MVC on the client side with AngularJS or Ember, building single-page webapps with REST backends. But how are we managing the growing amount of JavaScript in our application?
You ain't in Kansas anymore So far we've just been doing half-random stuff. We download some version of a library and throw it into our src/main/webapp/js/lib, or we use it from a CDN, which may be down or unreachable when we want to use the application..

Some times the JS is minified, other times it's not. Some times we name the file with version number, other times without. Some times we get the latest library of master branch and name it with the commit-id in the fi…