Project/Product understanding activities from CSPO 2010

These are notes from 2010 CSPO course that I want to throw away the paper, but felt I should keep the info :-)

 

Project statement / Elevator pitch

Handy elevator pitch template to work with:

For <target audience> that <attended desire>, <product> is a <solution type> that <main feature>, unlike <current solutions/main competitor> it <main differential>.

 Lousy example:

For smartphone users that want to share music with friends, Bluecast is a mobile app that shares music in real time, unlike sending the music by bluetooth it doesn´t infringes copyright as the music is only shared by streaming and is not stored 

Product box

The idea of creating with the product team a mock box for selling the product, and by doing this knowing if everyone is in the same page regarding objectives and vision. Really, create a box, like a DVD box for a software product, or maybe an app store page for a mobile app. Being able to see it physically gives a sense of direction and ownership towards what is being developed.

Important to have: name of the product, graphics,  key points as bullets, main features, pre-requisites to run the product.

One page release planning report

Objective User Behavior Requisites Restrictions Impact
To... as a... I need... Acceptance criteria Quality attributes Component
 Monitor client purchases waiter register clients

- Validate docs
- Unique e-mail 

- See prototype GUI#22
- Registry mustn´t take more than 3 minutes 
 User registry module and Report module
register purchases

- Validate purchase code
- Unique registry 

- See prototype GUI#24
manager analyze stats

- Search by client name or product type
- Over-time chart 

- Search up to 3.000 registries
- Response time below 10s 

 

 

 

Learning Clojure: Lousy FizzBuzz

Started playing around with functional programming, just for the lulz. Although complex and essentially different from daily OOP, it's definitely interesting and the challenges it presents are fun. 

First time I think my lack of math skills could get on the way of my programming as for what I read it does require some basic understanding of mathematical properties of functions to be able to fly on the functional programming realm.

Also, kids, trying Clojure without knowing Java is probably not the most smart move. But hey, we are all for learning aren't we?

Anyway, here's the first attempt to FizzBuzz, you'll notice it doesn't take full advantage of the language and its concepts, but then again, it was the first attempt :-)

https://github.com/rafaelbandeira3/kata_clj_fizzbuzz

 

Good resources here: http://www.readwriteweb.com/hack/2011/07/free-e-books-on-clojure.php

Let me know what ya think!

Vim screen fun with shortcuts

If you left tabs for buffers like I did and started to get bored throwing :vsp and :spl around, then below are the shortcuts you need:

<C-w-s> horizontally split current window

<C-w-v> vertically split current window

<C-w-q> close current window  

That's it, you probably saved yourself some good and valuable time. Cool?

Ah, at least in linux C means Ctrl. Not sure about Mac.

Welcome Mr. Anderson: Thoughtworks 30 days later, my impressions

Neo-pills
Thirty days ago I made the choice to leave the quiet, secure and promising position I held as front-end engineer for Dell.com and join the fast-growing ThoughtWorks Brazil office, to work in an unknown project with an unknown technology and the assurance to be set out of my comfort zone and into a never stopping learning process, which I've been longing for in the last few months.

I left a 100k+ people enterprise and all its management layers and world wide impact to join a 2k+ people consulting company with virtually no hierarchy and  a big driver of the software development world, two really different worlds, and here are my impressions after a month in the house.

Happiness and Delivery

Are you guys happy? was the question made to the clients after the iteration planning meeting which I basically landed on parachutes right in my first day. That struck me right in the head--while managing several projects as a PO in my last job, it never occured to me that the client happines is actually just as a good metric as the ones carved out of timelines and gannt charts, after all you are certainly trying to meet schedules but you are just as well helping people to run their business and when you do effectively they probably get happy... which is way more inspiring than green numbers.

I am a certified Product Owner and I like to think of Scrum as a good transition tool for big enterprises, but at TW we follow no methodology and we try not to think of it too much--we want to get things done with the set of practices that work better for the product, the clients and the team, the only common denominator is that they all are somehow based on proven concepts, like the agile and lean premises. We appreciate short feedback loops, not only devs, but BA's and QA's and even the recruiting folks, so pairing is mostly natural throughout the office. Same for test driven development, so we can know what's working and what's not earlier in the game. More than anything, we want to deliver things our clients can feel happy with, and that developers can be happy with too.

End-to-End Industry Awareness

From development to analysis, and from management to design, TW is well aware of what great software is made of and a lot of effort is put into keeping the internal people fresh in all these areas while contributing back to the industry as a whole, internal mailing lists are always full of gold and my team is filled with people I admired or had heard well about before.

There's great interest to be seen as an industry leader and the house is oftenly flooded by outsiders in mini-conferences to the tech community, being it girls geek dinner, coding dojos or the now introduced design dojos, TW is pretty open to serve the Software community and do it with great enthusiasm.

So far from perfect

Large windows with great view, great and smart people, geared up kitchen, nerfs are all around, video games and colorful post-its... and still far from perfect, and that's the best part. The local office here in Porto Alegre is a bit older than a year even ThoughtWorks being a somewhat mature company long past its first decade, and thus there's a lot to grow and to stabilize around here, and not only here but in the company as a whole, which is pretty exciting.

Being constantly fed with feedback from the industry, employees and clients, the company is always on the run, in a perpetual state of imperfection which is seems perfectly acceptable, but that can be pretty disrupting for newcomers from big corps, or just stuck companies, as the lacking of a self enforcing management structure demands self organization to get things changed. This is no easy task or environment to get used to, but I get the feeling it's worth all the get used to. Also it means everyone is empowered to step forward and fight for its cause, it's only a matter of having the guts to drive it forward if you really want to see it happening--right now we're getting fruits in the kitchen by the morning: people wanted, they took a look into the supplies buying process, analysed the available budget and went to test a plan of how to make it happen.

Well into the rabbit hole

I'm ready for the next months and plan to tell more about it here! I've been in really different companies in this industry, from university research centers to advertising companies (cancer) and from Enterprise to freelancing and small consulting firms, so I guess I can make some good comparisons here, so watch out!

 

Farming your Cucumber: Benchmark and analyse cucumber steps

With the built-in Usage formatter you can get a glimpse of which steps are being called the most, which are being nested inside others and also how long they are taking. Simply cucumber -f usage features/* to run a pass with it and it will provide a useful output with the steps and its location on files along with duration and indentation to signal nesting.

Isn't enough? Then I suggest you take a look in to the formatters doc to see how to build your own, after studying a bit it's clearly the best option for that, as using benchmarks within Before and After don't seem to take some test setup into account and (at least for me) yield false results.

Delete till character, delete inside parentheses and other deletion goodies in VIM

If you want to delete till a specific character, let's say the next comma, you can use dt[char], it is very helpful to speed up text editing. Another good one is delete inside, like delete the string inside the quotes or the values inside a hash, that you can accomplish with di[char].

Examples below, consider | as the cursor

Delete till - dt

<% link_to |"Messages", messages_path %>
# dt%
ginger.|old_method.chained.with(:right => param)
# dt(

Delete inside - di

self.update(:geo| => [], :name => "nowhere")
# di(
<% message "|I'm not a droid!", :important %>
# di"

Delete combo

You can mix deletion command with repetition prefixes like 3dt: to delete everything till the third :. This also works for other delete combos like 3dd to get rid of the next 3 lines.

Vim themes look different in gvim and terminal, and how to fix

Vim themes look different in gvim and vim in the Terminal, for the Terminal doesn't have too many colors available by default, giving gvim a richer UI. You can workaround it and have pretty vim themes running it in the Terminal by updating your ~/.bashrc to register 256 colors, giving terminal better color support, with the following snippet:

if [ -e /usr/share/terminfo/x/xterm-256color ]; then
        export TERM='xterm-256color'
else
        export TERM='xterm-color'
fi

Just reload your bash and you are set!

Short story, long

Far from big fan of vim's default theme (oh those red strings...), I was looking around for something easier on the eyes. GitHub theme and Monokai clone are good options, so jumped into it only to find they looked bad and pretty different from screenshots.

Just for the sake of it, decided to pull them up in gvim, where they looked pretty neat with the actual colors they were intended to have. Terminal shouldn't have all those colors enabled, I quickly figured out. Browsing around I found that's related to couldn't-know-less-about XTERM, and the fix was available on vim.wikia.com.

So, gvim has more color than Terminal, which makes themes look better in gvim, but there's a fix for that.

How to frustrate developers and alienate teams: Enterprise sins to make programmers miserable

Have you ever wanted to make someone's life miserable, to make it flee in despair or bang its head against the desk? Maybe not, but deeply in your heart you might have wondered: does a programmer cry like a puppy? If you want to find out, follow close!

When it comes to huge companies there are lots of things you have to put up with: bureaucracy, long meetings, complex org charts and enterprise software architecture that has more hidden treasures that any pirate map. That we all know, and if not, sorry to tell you the truth. It's not all that bad, really, but sometimes seems they try hard to mess with your motivation. And by living it up I got to learn some interesting tricks on how to produce this... this developers helplessness, and that's what I'm here to share:

Neglect any and all control over the tools for development

Send environment maintenance off-shore, keep the codebase in a shared server with ordinary access level, implement layered architectures that prevent any quick access to data, design high attrition processes to audit any request for third party tools that do not meet enterprise standards of $10K month support, provide only slow workstations and bloated IDEs, attain to whatever corporative tools are used company wide -- even if they do more harm than good. You get extra suffering if your company has ancient tools built on top of ActiveX, yes they'll complain more to change, but hey, there are automated solutions for this

Create strong cross team dependencies, and provide different goals for each

Partition the application in: front-end, back-end, cms, services, databases, search, multimedia -- if there are more suitable or possible divisions, strive for that! Make sure you put all teams to work in different paces, and give them different customers, which will inevitably lead to different goals to seek, and you are set to a dependency pandemonium that will not only put developers down, but you might even get a shot on pissing off those suited up business folks with overdue deadlines and half-arsed functionalities.

Use obscure hiring processes and choose graduates with no real world experience

Throw genius-in-theory to take sides with the veterans, and no morale shall live another week. If possible, give higher grades and better promotion possibilities for the graduates. Make the team accept that a 9 months ramp-up is in fact acceptable, and make them busy putting up as much training sessions as required. Get extra bonuses if you can find best-practices evangelists that will question each and every beat of implemented code before getting to work.

Be nice too: tell them they are special, and implement no industry standard practice

Read Malcom Gladwell's Blink and review and rewrite the process whenever you feel like it's not working. Trust high risk bets over Kaizen, and mix in a grain of randomness on the practices chosen each time. Still, get experience from the outside: hire consultancy (the only ones that seem work are those on 6 figures bills) and fill up a few weeks with intense training -- bonus for remote sessions over the phone; Be clever just to pick the specific details that you believe will optimize the delivery capability of the team, and make sure you use these words to explain that. Now they'll get pissy.

 

Yes, yes, you might be thinking, "but now they're going to flee!!", that's when I tell you, "wait up and thou shalt see". Give generous bonuses and pay for the pizza, allow some time off and be flexible: self helplessness comes with time. Beat them to the ground and there they'll stay. Lesson learned?

You should not complicate things by using CSS image replacement, just use the @alt on

You have been there: thousands of pixels in a negative indentation, hidden content overflow, tiny font sizes and line heights, a background... all this just to show a simple logo. Now, why not just place the image in there and get the alt attribute in place? No, don't answer yet, watch Matt Cutts -- Google search engineer, and keep it for life.