Monday, July 22, 2019

Building great software while keeping the client involved.

The process of designing and building software is an invention process. 

Like inventors, software builders define a problem, refine it, pivot and sometimes regretfully devolve.  Like inventors, developers respond to that same problem with constructs, architectures, models and components. The most important thing to remember as we build software is to give ourselves space to fail and pivot.

For years well planned and theoretically well thought out projects would go astray. They were over budget, out of time, and bloated beyond belief.  Out of this grief ridden world of failed projects, a little idea, that of "extreme" programming and later "Agile" development began to take root.  In essence, developers and development leaders began to embrace the "pivot".  At its essence the idea of "Agile", was that software development was an invention process.

In those days, and sometimes now, in the most constrained environments, developers might have been told to "stay focussed", "just implement it", and "do what you are told".  Today we understand that developers hold the key to understanding not just the "what must be built" but also "the how" and sometimes "why something might be better if built a different way".  Developers are intimate with the algorithms, with the core issues and often even with the humanity of a solution.  In other words, as they work through the problem, developers begin to understand the core tradeoffs at the root of the solution, including those that directly affect human experience.

At this moment, in stand ups occurring around the world, developers are explaining the revelations they have found as they explore their working domains. Because stand ups are daily, developers are able to slowly inform teams about their explorations and also their inventive solutions.  As they work, developers are identifying key problems, inventing new solutions, and refactoring both ideas and code, until the overall goal is met.

The stand ups of one team working together day after day creates a synchronicity, though imperfect, it is tight. And this rhythm leads to the invention of new solutions. This is the pulse of agile and the pulse of invention. New software is derived from the steady pulse of problem solving, creativity and the flexibility to follow the problem solvers to the solution.

This is the process of invention and it has overtaken the world.

Too many tabs! Mastering the many tasks of life, programming and entrepreneurship

I'm guilty!  Too many tabs all the time.  In my mind and in my browser.  But I just (finally!) found an amazing way to organize all those tabs (at least the ones in my browser).  I'm loving it so far so I thought I would share.  If you take a different approach, I'd love to hear it too.

What I love most of all about this is 
  1. I won't have to reorganize my tabs every morning to get myself ready to work!
  2. Tabs can be saved where I've left them (or moved somewhere else). Thus each section is essentially both a workspace and a reminder space. For example, seeing the 'Harvestapp' tab reminds me to log my time in Harvest.
  3. It is free (so far).  

This is a chrome extension called Workona.

p.s. -- I don't have a relationship to these folks, but I think they may have just changed my life, so sharing!  The reviews are solid -- check it out!

This blog was first posted on ZebrasUnite

Tuesday, December 29, 2009

Designing Queries: A user interface challenge

Old problems never die, they just come back in new forms.

I'm working on how to design an extremely usable and flexible user interface for a query tool. The challenge is how to enable the user to write complex sql queries while scaffolding them in a way appropriate to their existing knowledge. This reminds me distinctly of the work Brian Reiser did with Anderson on visual programming languages -- a system I worked on part time in grad school. From this link I've come up with a couple citations and I may now have to invest in an ACM digital library membership (which I've never needed before) -- but these problems are hard enough to want to see what other people have done.

A graphical programming language for an intelligent LISP tutor. BJ Reiser

A teaching system for SQL

Dynamic queries for information exploration: an implementation and evaluation

I also came across this useful link summarizing Shneiderman's Eight Golden Rules

Any other suggestions?

Thursday, December 10, 2009

Leaving a job you love...

Today is my last day at this job...
My new job is in a new city.
The headhunters still call, but I feel bitter about their calls, they should have called sooner, because now I have decided.
I am uncertain if it will work out.
Will I be able to shine in this new place?
Will it be fun?
Will my personal life interfere?
I can't wait to get there, but I don't want to leave here either.

They forgot to drop off my swag and for some reason, I really care.
They didn't invite me to the holiday party, and I am miffed, even though I'm leaving.
I really did love this job, but it was unrequited.
Time to move on.

Wednesday, October 21, 2009

Distributed Computing 101

Ok, so I've been a "thick application" programmer for as long as I can remember. In fact, that term wasn't invented until I had 10 years of experience building applications. Along the way, I built a couple of two tier systems. But clearly when I wasn't looking the world went crazy.

The new architectures are huge and complicated and I need to understand them better. So for at least a while, I'm going to be posting the best lessons I find on distributed computing right here. And maybe that will help someone else -- or at least it will help me. If you have suggestions please let me know.

Now when I'm stumped about a topic, I have a simple rule. Start with wikipedia.

Monday, September 7, 2009

Software Developer Mom's

I was having a moment of doubt about being the only software developer I knew who was also a Mom. It is hard to be the only one of anything. Thank goodness for Google and O'Reilly, after I found this page, I didn't feel as isolated and I even felt a little bit uplifted [even if the discount is long past].

As a Java developer, when I first learned Javascript, I wasn't too keen on the hodgepodge nature of Java's sister language. Now while retraining as a web developer, I'm needing to exceed expectations as both a Java and a Javascript developer. Here are some web pages I've found helpful for updating my Javascript skills.

Advanced Javascript Tutorials and Postings