Idealism or Professionalism, which are you pursuing?

“You pushed your ideas.”

Have you ever heard this? I have, and as a negative. We as developers work in a very collaborative way, so at first it’s understandable where this could be viewed poorly. However, when developing products for a client, how does one know when they are pushing idealism vs. professionalism?

In the world of JavaScript development there is no lack of developers with ideas. Looking to our predecessors in previous languages every community starts this way. As the language evolves and standardizes we see at least 2 schools emerge: One whose idealism helped evolve the language, providing the language its individuality. The other, built tried and true development strategies. Although this second school may adopt slightly different syntax or names for these structures, it always finds its roots in architecture, both software and real world. Both these schools can build great things, but effectively very differently.

So I posit: Idealism builds brand new things. Professionalism builds those things right.

These are by no means mutually exclusive, but as my posit reads, they do have an order when considering your client. In this example (my situation) the client is a large enterprise re-engineering their entire control infrastructure. To make things more interesting, my group was brought in to create the user interface for this project, and I was hired as their JavaScript expert. The current staff was mainly UX and UI designers with a couple decent JS developers, both of which admitted it was not their first language, and they hadn’t the advanced experience to complete the project. This is obviously an extreme example, but I feel confident in stating that most shops are looking for their developers to implement known, learned techniques, not create extremely brand new things. I took this as a teaching opportunity, with the understanding that as a UI group with a Java backend team that JS was of a bit wild-west middle ground, and our input would be appreciated.

After review of the code, having recently moved out of Dojo to Durandal, the code was structured, but fractured. Nothing was testable (a quality desired by both client and team). My answer was to bring in solid architectural principles based on the design of AngularJS. The shop was already using Durandal with future plans to move to Angular 2.0, so it seemed natural. I offered the ideas, was encouraged to share, and gave an informative (albeit direct) presentation to the back-end and front-end developers of what I dubbed a “client side data layer” to handle our communications. The Java developers grilled me hard, but we all agreed this was nothing more than a back and forth about understand the fullness of the design, not an argument. My team disagreed, thinking I had pushed too much. I later confirmed with the Java team this wasn’t the case.

Pause

Idealism or professionalism, what have I delivered here? This design was radically new to the client’s team, still in the phase of JavaScript mistrust. My team understood some of the concepts, had some reading to do, but could definitely complete it. We had documented practices and code to follow from examples I provided and a great Angular code-base & community.

Until I got push back, from my own team.

Unpause

2 iterations after being allotted sprint time by the client my team lead had still been reallocating my time to bug fix tasks. I don’t mind helping, but 2 sprints of fixing bugs after such a successful start can be, truthfully, annoying. Along with other personal problems my work time suffered. The UI firm and I parted ways. Aside my time, “You pushed your ideas”, was the only other thing mentioned.

Idealism or professionalism, what have I witnessed? Should a developer strive to provide the solutions to the problems presented him, or should they earn money from the client through hand holding the client while they decide what they want? The first I truly know to be a right way. There are honest people that earn money doing the second. Is their title “Developer”, “Architect”, or “Programmer”? It’s obvious my opinion is no. I believe my experience is exactly what I am hired for, and in a niche where misinformation is rampant, clarity is key.

I understand many UI firms have a certain image they promote: “Creative Support” I like to call it. Help them believe your ideas are their own. I see a fundamental flaw when this approach is applied to code development.

Art is subjective, JavaScript used to be. Professional JS developers know better.

What are your thoughts?