archcoder

Taking on the cargo cult coder.

The Coffee Cup

| Comments

I recently saw something seemingly ridiculous: someone holding a coffee cup with the handle out. Initially I thought how could he go against the very fabric of social coffee drinkers but then I thought… “who knew?” The guy who built the handled cup obviously created it to be used a “certain” way. Reflecting on software, we build our apps with opinions - rightfully so, you should have opinions built in otherwise developers are forced to roll big ball of mud just to support business requirements. So if you look at the software you create as a coffee cup:

  • Your app: using the handle
  • The API to your app: breaking the handle off, Burger King style

{get to know more about that strapping young coffee cup crusader =>}

Doing “the What Is” in Agile Architecture

| Comments

Build for what is, not what if. We are not building buildings (the seeming immutable and hard to change), we’re building software.

It seems to me that more often than not we end up having technical debt; not because of crappy code or inattention to detail (though those do contribute) but because we spend too much time on the fringe. Have you ever known a successful golfer that spent an obsessive amount of time “figuring out” the fringe - no, they pay attention to the fairway, the green, and the traps to avoid - not “how do I play the fringe?”

As ridiculous as it may seem architects spend an inordinate amount of time talking about the “what if,” instead of doing the “what is.” We get hung up on some random business requirement and tout that the solution will fail every time because that requirement cannot be met.

Rather than building roadblocks, we seek to improve our ecosystems through refactoring and iteration - peeling away technical debt, right? So why should new functionality be any different? Instead of eating the elephant by running at it with your mouth open, brake it up, deliver reality, check out the results, then re-factor or add to it.

Rinse and repeat. It’s not difficult, but it can be perceived as boring or mundane. To that perception I say pfffft! I seek opportunities where people tell me “it can’t” or “it won’t.” Really!? I don’t buy it. If you’re sticking to a real need based on real things then why can’t it be better than it was before, and why can’t achieving that be exciting.

If you’re thinking leave refactoring for someone else to do, I’ve got future stuff to do, architect guy stuff - stop right there and get real with yourself:

When was the last time you blueprinted something that: 1. Made it to prod, into the customers hands, 2. Never had to be re-factored

Much of what we do is make mistakes, not always but some times more often than not - so why not approach the problem with that in mind; making the static “x” really good. Then go stomp around the what if (variable “y”) and if something shakes out then at least you have something solid to try it against.

I’m definitely not suggesting we ignore the “what if,” just don’t use it as a crutch to stop you from doing the “what is.”

{end-of-line}

On the Ground

| Comments

Being an architect does not mean being separated from the team. Ivory tower architects should be left in fantasy movies and books keeping common company with trolls. It doesn’t work. Not at all. To think that a person who is responsible for the entire ecosystem of applications in a given platform would not sit with, code with, win and fail with the team is to not think at all.

Do you know what code just got checked in? Did you know that the quiet dev in the corner just slammed out an awesome bit of code that could change the face of your platform? Did you challenge anyone today; did they challenge you? Did you know if you asked the team their opinion on a blueprint you created it could’ve saved the company millions? Did you know that many devs don’t understand why they should be test first developing? Know your team, and use them as an instrument of architecture.

Spending time connecting and coding with your team is what makes really great apps. Leave the magic bag of architecture terms, methodologies, notions, assumptions, and pride in the fairy tail - build, plan, and do.

{end-of-line}

Cd vs. Cd

| Comments

Continuous delivery is…

  • the ability to put the release schedule in the hands of the business, not in the hands of development or operations; making sure that any build could potentially be released to users at the touch of a button using a fully automated process, quickly.

A continuous delivery ecosystem…

  • relies on comprehensive automation of the build, test and deployment process
  • needs a high degree of collaboration between developers, testers, DBAs, DevOps, users and the business
  • consider code as “done” when it is working in production
  • does not use testing or deployment “phases” but rather releases software features as they become complete and not as packages
  • individual stories have had the entire test suite run against the build containing them
  • has tests at the unit, component (integration tests) and acceptance level
  • has stories that have been demonstrated to the customers / POs from a production-like environment
  • is a system where there are NO obstacles to deploying to production

Continuous deployment (release) is…

  • the ability and behavior of shipping your code to users as often as possible, ensuring that you just don’t “think” you have a shippable build but that you have a shipped build.

A continuous deployment (release) ecosystem…

  • has developers with the ability to push to production
  • has an implemented “feature dark” framework where the business can turn on and off features at will
  • has quality gates that prevent most issues getting into production
  • builds mainline continuously and measures quality and records metrics
  • runs all tests all of the time

Resources:

Timothy Fitz on Continuous Deployment

Jez Humble on Continuous Delivery vs. Continuous Deployment

Continuous Delivery by Jez Humble and David Farley

Updated…
Jez Humble on Organization of Continuous Delivery in an Organization

Renaissance Realized

| Comments

I listend to this podcast on the way into work a few days ago. It’s about inspiration. It kinda hit me the other day, the morning started really rough then progressively got worse and to top it off the team was having one of those issues, you know the ones that have no explanation, but was introduced by you because you had an idea to make something better for a dev’s life. Grrrrr!!! In fact the last time we ran into this issue it took us 5 days to fix it!!! Have we learned nothing (pan to guy shaking his fist)?

Recently our dev team and TechOps guys have become attached at the hip to do the “right thing.” Completely ripping out the plumbing and replacing every bit of hardware and software from our local boxes to production. Not only that but we are taking on two significant engineering changes: 1. Continuous delivery and 2. Test first development (TDD). We basically took everything we’ve done and how we did it over the past 7 years and flipped it on its head - we knew there would be roadblocks and pain during and after. This flurry of blows really pushed hard on me…

And then it happened; you know that moment of clarity when you say it really does not have to be this hard… much like when I started using Ruby and it just felt right. Yeah that’s what happened; we realized that since we have a working environment based on our new setup, the local environments were patterned after them, and that everything was scripted - we must have missed something, right. Not do dig a hole with my tech shovel and drone on about the details of what happened, we found the issue within an hour and everyone was up and running. Bam!

Before we decided to take the hit and correct many of the things that we’re creaking in our app stack, I am pretty sure this issue would’ve hijacked the sprint and been yet another technical beating - being a configuration blackhole. Because we were inspired by the potential of doing the right thing with the focus of serving our customers and everyone in the organization we have revolutionized how we do what we do - the Renaissance realized.

Weekly Dev Stuff 006

| Comments

Sorry for the delay on the weekly links, the archcoder fell ill last week - too many bugs… lame I know.

Ruby on Rails

.net

Code Theory / Engineering / Tools

Productivity

Weekly Dev Stuff 005

| Comments

Ruby on Rails

.net

Database / NoSQL

API

Code Theory / Engineering / Tools

Weekly Dev Stuff 004

| Comments

Ruby on Rails

.net

API

Database / NoSQL / Storage

Code Theory / Engineering

Productivity / Tools

Weekly Dev Stuff 003

| Comments

Ruby on Rails

.net

API

Database / NoSQL

Code Theory / Engineering / Tools

Productivity

Sources:

programmableweb.com
lifehacker.com
blog.wekeroad.com
devshow podcast
rubyshow podcast

Weekly Dev Stuff 002

| Comments

Ruby and teh’ Rails

teh’ .NET

API:

Code Theory / Engineering / Tools:

Productivity:

Sources:

programmableweb.com
lifehacker.com
blog.wekeroad.com
devshow podcast
rubyshow podcast
progit.org