A day in the life of one Spring developer
Recently I have been cheering each day that I wake up and work on the Spring team. I was also inspired by Ollie’s recent slide show that explained many of our tools we use to build professional grade, open source software. So I thought I might capture my own version of why it’s so exciting to work with this team by walking through a single day – today!
I usually wake up between 7:00 and 7:30. I mozy up to get both of the kids and bring them downstairs. I put together some breakfast. After they start eating, I begin sipping my first cup of coffee and check for new email on my iPhone to see what big things I need to look into.
At my old job, I would have been heading out the door by 6:00 and joining the great commute to get across town. Now I get to cash in on that spare time with more sleep. And since most of my colleagues work in different time zones, there’s no rush as to when I start working anyway. Nice!
I saw an email from Gunnar about blogging the new release of Spring XD 1.0.0.M4. I figure when I get back from dropping the kids off at school that I can post some extra tweets to his blog post as well as the new guide I updated to go along with that release.
After I vote up his blog post, I go to my office upstairs, because there’s a 30-minute internal tech talk from Jon about Reactor. It recently went GA, so I’m interested to catch this! I connect to a webex session and then let the meeting call me back on my phone so I can listen in. Pretty neat stuff! I saw his talk at SpringOne and kind of enjoyed that even though it’s Java, he is deliberately using some radical tactics to write terse code (like a statically imported ‘$’ function!)
First real task of the day
Having finished that quick presentation on Reactor, I finally have some space to work on a more detailed issue. Thomas Risberg has posted details about one of our historical announcements of Spring for Hadoop that seems to have been lost while converting the website. There is a detailed discussion on a github issue with everything I need to know. Since they couldn’t find the legacy content, but did find a forum article with the same content, the decision is made to create a permanent redirect to the forum article instead of combing through database backups.
Time to get cracking. I’ve been reading a lot about hub, the handy CLI tool that empowers git to work with github repos. (Get it? git + hub = github.) One of my co-workers told me how incredibly efficient it was and also that it hasn’t caused any issues, so I figure this is a good opportunity to try it out.
Since this is a redirect from the old domain, I have to patch the redirect app, not the website itself. I clone the official version of the redirect app to my laptop. After making sure the gradle build passes with flying colors (with no edits), I then fire up IntelliJ and import the project. It appears there is a handful of automated tests, with one assert for each redirect. Using the info from the github issue, I write a new test case, asserting that the old link permanently redirects to the new one and run it. It fails (as it should). Then I open up the redirect rules file and add a new one at the bottom. The test passes. Yeah!
Time to commit the changes. git + hub is turning out to be pretty neat. I basically craft my pull request right from the command line. I switch over to github and merge it. Chris has already setup a CI job so that when it passes, it automatically deploys it into our cloud foundry production space, and I hear a nice “ding!” on HipChat reporting a successful build. Then I test the old link, and I get nicely forwarded. Since I had embedded “Resolves <issue number>” in the title of the pull request, the issue itself it automatically closed. I delete my branch, and “git pull” to update my copy. Mission accomplished! I flip over to our http://waffle.io project manager (something we started experimenting with) and move that issue into the “Done” column.
Work on my issue management prototype
Another thing I’ve been hacking away at for a couple weeks is the means to manage issues from multiple repositories. Roy, Craig, and I spent the entire summer writing 40+ getting started guides, each in separate repos on github. Since we launched all that content at SpringOne, we’ve had people report issues and also submit pull requests to help fix things we missed. The trick is, each guide is in a separate repo. Going from repo to repo to check the status of these issues is cumbersome.
My app uses Spring Boot and Spring Social GitHub to gather a stack of issues and cobble together a web page. It’s still in the infancy stage, but hopefully this can become a handy way to keep tabs on open issues surrounding all the content we have crafted, especially since more guides are being drafted. I can see on HipChat that Dave has responded to my issue with templates and in fact figured out why they weren’t working. He offers a temporary work around. I check it out and it works great! Now I can start making the pages look half decent. (Not being a UI expert myself, I think I’ll use https://spring.io/guides/gs/serving-web-content/ as a tip on how to get started with Thymeleaf templates).
In the process of building my issue management template, I go ahead and submit a pull request to add “html_url” to GitHubIssue. This PR provides a quick way to jump to the issue instead of looking at the HATEOAS-based record. Wow. Again, using git+hub makes submitting this PR fast! I think I could get used to it. BTW, I’ve been getting to grips with HATEOAS, realizing it’s a fundamental piece of REST that is not yet heavily adopted by many. (I’m going to need it when I finally clear enough off my plate to focus on Spring Data REST.)
Time to run some errands, but I stay connected
It appears the clock has rolled around where it’s time for me to pick up the kids from school. I close my laptop and stuff my iPhone in my pocket. I get there a few minutes early, so I check tweetbot and HipChat for any new traffic. I see a few tweets about how people are noticing that Spring talks at the Spring Exchange in London seem to be tilted heavily towards pure Java and no longer sporting much XML. This is nothing new and has been going for several years. But people still seem to assume Spring is heavy on XML!
Nothing important on HipChat. Oh well. I know that if anything critical comes up and someone @’s me on HipChat, my iPhone will chirp, so I don’t feel disconnected. Much better than Skype on the iPhone which zings me every time a message is sent on any discussion channel. We’ve been using HipChat for six months and it’s awesome.
Even though picking up the kids is a forty five minute round trip, it’s no real bother since I feel like I don’t waste my time with endless meetings and instead focus on getting quality software built when I’m at the keyboard.
After getting back and putting the kids down for a nap, it appears one of my colleagues has a new release of Spring for Apache Hadoop. It elicits a chain of “congrats” emails on our developer email list. We often “high five” anytime a new release is put out to the community. Since our team is spread across 12+ countries, it seems like a great way for our team to celebrate releasing early/releasing often.
Other issues crossing my desk
Another issue seems to have popped up a couple nights ago, appeared again this morning, and was finally resolved this afternoon. Our website serves up project information from each project’s gh-page branch. This lets each project manage that content and not require a redeploy. It’s a feature provide by github. You can use anything you want, even hand written HTML, but many people use Jekyll and so do we.
Gunnar first spotted it when he was updating Spring XD’s project page. Spring Gemfire also made a release and saw some issue. Dave has figured out that github made an update to the versions of libraries they were using to render page content. It appears to expose a bug that we had in our pages.
This issue showed up on my desk because I also had to update the core page with the new version info as well. Naturally, both project leads were asking me what was going wrong with page management. I wasn’t sure, and sent out a team wide alert on HipChat asking for assistance. Later on, Phil comes to the rescue by not only tracking down the specifics (he put together our page templates in the beginning), but proceeds to offer a patch to our baseline templates that all the project leads can use to update their project pages. Basically, it’s an issue with a fix that I didn’t have to solve. I just helped to facilitate the conversation.
I work with a great team
I seriously think I work with some of the sharpest people in the industry. I have come up with some decent ideas and coded things to completion. But everybody I interact with keeps me on my toes. Their skill sets are stellar and they don’t require gobs of management to stay on track. We get together occasionally, either on a Google Hangout or using http://zoom.us for pairing sessions. Everyone is on their A-game for monitoring blogs, twitter, and other sources of information. Relevant blog entries get emailed around the team. Tweets are passed around. I check feedly where I monitor dozens of blogs, and occasionally a blog post that catches my attention. There is a real buzz working with this team.
A couple days ago, I rang up Rob Winch, aka Mr. Spring Security, on Skype for a five minute chat after tracking down a regression that pointed at new CSRF functionality. He quickly pointed out what needed to change so that Spring Security’s new-and-improved CSRF would work properly in the context of unit testing. While I wrote Spring Python’s security module and feel myself well versed in the core concepts behind Spring Security, it shows what I DON’T know. Not really sure I have a working understanding of CSRF. But Rob does. Good thing he’s on the job!
Every time we meet to either brainstorm or pair up and code, I get a renewed sense of purpose and camaraderie. What’s even more amazing is that these people want to hear my ideas as well! I had joined VMware back in 2010, but was working on a different team. Earlier this year, I joined the Spring team (a dream job in my book). I finally got to meet many of my teammates for the first time, face-to-face two months ago at the SpringOne conference. And it’s only been getting better.
We work with state of the art tools, some of the best innovators, and people that really understand quality software with no junk process. This team has good management, not bogus red tape. I’m just hoping the skills and knowledge of my colleagues is rubbing off on me.