Saturday, July 8, 2017
Wednesday, March 18, 2015
Checking Framework Vulnerabilities Using Maven Plugin
Chances are your application depends on certain open source libraries. Typically these libraries are not updated frequently for different reasons stability et al. However, it makes sense to be notified of security issues in our dependencies so that one can take corrective action.
Would it not be so good if our build fails when a new vulnerability is discovered in one or more of our dependencies.. Enter Mavendependency check plugin which identifies project dependencies and checks if there are any known, publicly disclosed, vulnerabilities.
How to use
<plugin>
<groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>1.2.9</version> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions>
</plugin>
It is recommended to read the associated document to understand the working of this plugin.
Performance Note: First time execution may take longer but all future checks should take only few seconds if executed once in few days.
Friday, February 27, 2015
Interpret Page Fault Metrics
A page fault occurs when a program requests an address on a page that is not in the current set of memory resident pages. What happens when a page fault occurs is that the thread that experienced the page fault is put into a Wait state while the operating system finds the specific page on disk and restores it to physical memory. It is important to distinguish between minor/soft and major/hard page fault;
- Minor - occurs when the page is resident at an alternate location in the memory. It may happen becasue the page is no longer part of the working set but not yet moved to disk or it was resident in memory as result of prefetch operation
- Major - occurs when the page is not located in physical memory or in the memory mapped files created by the process.
Why bother?
- Poor Latency - You may ignore minor faults however, major faults can be detrimental to your application performance in the presence of insufficient physical memory and excessive hard fault and as such needs to be fixed immediately.
- Poor CPU utilization - as a direct result of thrashing
What next?
- Increase physical memory - this might be the easy one to start with, although, if you already own a large real estate chances you need to go back to design room as this might just delay the problem
- Reduce overall memory usage - think right data type, de-duplication, effective (de)serialization
- Improve memory locality - think about your choice of algorithm based on data access pattern to reduce page fault
Wednesday, February 25, 2015
JVM Pressure - Context Switching Overhead
Context Switching (CS) is a valuable service provided by the underlying Operating System. It prevents greedy processes from CPU hogging, time-shares CPU between multiple threads/tasks/processes to create an illusion of continuous progress. However, the suspension of the first process and scheduling of the second one requires the kernel to store the state of the first process and load the state of the second one. The overhead and time required for the same is referred to as context switching overhead.
Why bother?
- With increasing context switching the probability of context data available in CPU's cache is small and therefore needs to be fetched from main memory which is way more costly operation than fetching the same data from CPU cache. Further, the currently resident data in CPU cache needs to be committed to RAM. Together, these two operation per context switch make the problem grave.
- Increases the general user space processing. A typical user space that requires instructions and data from CPU L1/L2 cache will now need to fetch the same data from main memory.
- Increases latency for the process as explained above.
How to interpret data?
CS can be classified as below;
- Voluntary - context switch can be triggered by the process making itself unrunnable, such as by waiting for an I/O or synchronization operation to complete. Thus, this value can be used to infer frequency of blocking calls in your application process.
- Hints: think non blocking, asynchronous, reactive modes
- Pre-emptive/Non-Voluntary - signify processes contending for the CPU and having to be switched out even though their task had not completed. Simply put, there are far too many threads than necessary.
- Hints: reduce threads, use thread pools, reduce task granularity
Wednesday, January 28, 2015
Monday, January 26, 2015
Wednesday, September 26, 2012
Pass maven properties to maven-antrun-plugin
Problem:
You want to bundle a your application jar files with other software artifacts but as maven names your jar file as magic-app-${project.version}.jar your maven-antrun-plugin fails to pick it up on its own.
Solution:
This was a persistent irritant as every time we upgraded our applications' version we needed to manually enter the same version name to build.properties and only then we can package latest jars for release.
After exploring certain unsatisfactory solution like;
Update your pom as shown below to export maven properties to ant build at run time.
You want to bundle a your application jar files with other software artifacts but as maven names your jar file as magic-app-${project.version}.jar your maven-antrun-plugin fails to pick it up on its own.
Solution:
This was a persistent irritant as every time we upgraded our applications' version we needed to manually enter the same version name to build.properties and only then we can package latest jars for release.
After exploring certain unsatisfactory solution like;
- using-maven-to-output-the-version-number-to-a-text-file
- how-can-i-get-maven-to-write-a-property-into-a-property-file-at-package-time
Update your pom as shown below to export maven properties to ant build at run time.
<plugin>Hope that helps.
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<property name="release.version" value="${project.version}" /> <ant antfile="build.xml" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
Friday, June 15, 2012
SBAs - Search Based Applications
Googling for the above term (as of this day) does not returns quality results. However, if you search for Search Based Applications (SBAs) you will hit a wikipedia entry and certain other articles which have used the similar term. You will even find a book by the same name on Amazon. To sum, it simply means that my thought process is cutting edge ;) ...come on, this is my blog, I can brag!
But, I'm not kidding, the idea in itself is very simple... just use right data-structure(inverted indexes) for read-intensive jobs and it dramatically simplifies your application architecture and brings God sent agility to your deliveries. Let me try to explain that...
In traditional database-centered-applications data stored in relational databases can only be retrieved through SQLs, which is a good thing as it standardizes the information access. However, let us try to contrast them with SBAs;
- If the desired information is too complicated to derive from the existing data, think query complexity, frequency for the requested information, scalability, while SBAs can process both structured and natural language queries and then provide faceted navigation which allows users to slice-n-dice data in innumerable ways.
- If the needed query does not exists and as such users will need to wait for the completion of next sprint while in the other case if you have indexed the data, the information is mostly available. Think fast time to market, high agility!
- Forget mulitple tables, think about a scenario where in you need collate information from multiple data sources read emails, blog entry, cvs, pdf, office documents, simply put if you can groke text SBAs can digest them to seek intelligent information later.
As if it was not enough motivation for us to experiment more with SBAs here is some more;
- SBAs are more fault tolerant to user queries and can make spelling suggestions, return results for synonymous queries
- You can integrate your SBA with some statistical based system to identify popular entries or make recommendations using clustering and collaborative filtering
- You can even filter results which are not suitable for user think access permissions, adult content, exclusively for club members
Mind you all this talk is not just about 'search text box' generated results the usage can be more implicit based on user's context which may be driven by application specific use cases like content browsing.
Today I've just scratched the surface, more later..
Do let me know your queries and feedback.
Friday, June 8, 2012
REALSEX
REALSEX a.k.a REAL eState EXchange
Oh! so you finally ended up being inquisitive.. You Peeping Tom!! Never mind, I was just experimenting with the idea of putting some thing scandalous as the blog title to attract readers.. Gotch Ya! :)
This blog entry is actually about my new found big ticket Startup !dea. Well for those of you who know me might frown.. isn't it? You see for past few days I'm observing that there is rising trend of this particular keyword being thrown upon me from all sides to such an extent that if you ask me to summarize my day today in one word I would say "START-UP".
Allow me to explain, I learnt a tonne about start-up, venture capitalist, incubation, mentor, angel investors at break-fast and then later in the day, all the way to my office I came to learn about Karnataka Government's initiative to bring fresh investments in the state through smiling faces of our CM on roadside-makeshift-hoardings, as if that was not enough my kiddo-colleague declared his next job title is going to be CEO of his new found organization. Wow!
Well I'm trying to scratch the personal itch of identifying a spot for constructing my house in Bangalore, but I discovered that not only it is painstakingly difficult identify properties which are up for sale it is all the more difficult to verify and validate all the meta-data (read ownership, water source, sanitation, future prospects etc.) associated with the property to ascertain its purchase worthiness. One would have to run pillar to post to collect minimal data (read land records) to seek loan from banks however other information as I mentioned above is at best adhoc in nature and is definitely not available at one window.
Real estate portals in its current form cater to information need for availability of properties and related news about Govt. policies (taxation etc) and proposals (read upcoming metro or an IT park) which might affect the property prices in the region. However, it is all left to the user to make intelligent decisions without really providing an avenue to collate this information in a digestible format, so that it becomes difficult for dummies like me to correlate all the information and generate some sort of index which I may use as pointers to make purchase decision say should I go Bangalore North because future lies with 'Aerotropolis' or should I go South because "Kanakpura Road is the new Jaynagar!!"
Would it not be better if we had a single-window-trusted-source-of-information where in we can seek answers to our queries?!
Let us now think about developing one such user platform in a phased manner;
Oh! so you finally ended up being inquisitive.. You Peeping Tom!! Never mind, I was just experimenting with the idea of putting some thing scandalous as the blog title to attract readers.. Gotch Ya! :)
This blog entry is actually about my new found big ticket Startup !dea. Well for those of you who know me might frown.. isn't it? You see for past few days I'm observing that there is rising trend of this particular keyword being thrown upon me from all sides to such an extent that if you ask me to summarize my day today in one word I would say "START-UP".
Allow me to explain, I learnt a tonne about start-up, venture capitalist, incubation, mentor, angel investors at break-fast and then later in the day, all the way to my office I came to learn about Karnataka Government's initiative to bring fresh investments in the state through smiling faces of our CM on roadside-makeshift-hoardings, as if that was not enough my kiddo-colleague declared his next job title is going to be CEO of his new found organization. Wow!
Well I'm trying to scratch the personal itch of identifying a spot for constructing my house in Bangalore, but I discovered that not only it is painstakingly difficult identify properties which are up for sale it is all the more difficult to verify and validate all the meta-data (read ownership, water source, sanitation, future prospects etc.) associated with the property to ascertain its purchase worthiness. One would have to run pillar to post to collect minimal data (read land records) to seek loan from banks however other information as I mentioned above is at best adhoc in nature and is definitely not available at one window.
Real estate portals in its current form cater to information need for availability of properties and related news about Govt. policies (taxation etc) and proposals (read upcoming metro or an IT park) which might affect the property prices in the region. However, it is all left to the user to make intelligent decisions without really providing an avenue to collate this information in a digestible format, so that it becomes difficult for dummies like me to correlate all the information and generate some sort of index which I may use as pointers to make purchase decision say should I go Bangalore North because future lies with 'Aerotropolis' or should I go South because "Kanakpura Road is the new Jaynagar!!"
Would it not be better if we had a single-window-trusted-source-of-information where in we can seek answers to our queries?!
Let us now think about developing one such user platform in a phased manner;
- Aggregate data available from dependable public sources like rainfall patterns, vegetation, soil type, depth of water table, civic amenities and put them on map after geo-encoding.
- Create 'event-listeners' to collect data from events like news feeds, user forums, govt plans and establish intelligent correlation with above mentioned slow changing data to determine actionable information. For e.g. Govt. approved a new metro station at 'X' now if you overlap this information water availability in the area on a map it becomes pretty useful isn't it!
- Create property index.
- Rank them for different purposes and ensure environmental sustainability in your recommendations.
- Cultivate a community of users, information seekers, who would like to learn from your applications' knowledge-base.
- Create avenues for these user's to provide feedback/contribute to the community. Gamify it.
- Allow users to publish/search individual property.
- Motivate users to provide meta-data, like do you have rain-water harvesting in your premises, give them more points for that .. improves value on property index.
- Suggest corrective actions to improve property ranking, may trigger improvements at a macro -level. Like if citizens in a particular locality identify that improving cleanliness in their locality will fetch better returns for their investments, might as well improve general hygiene in the entire locality.
- ...
Simply put the platform is required to ensure high quality governance of the eco-system so created.
Now the impatient among you might already want to return from the inception point and see money. OK, let me try my hands in explaining the business plan as well.
- Free for all, always!
- Multilevel premium charges for activities like identifying (organic recommendation i.e. no promotions) potential properties, generating reports based on fact (advisories) on identified properties etc.
- Advertisements
- Service providers say plumbers or builders
- Classifieds
Was it too big for an elevator pitch? Nevertheless, it feels good to see light at the end of the tunnel. I feel like God! .. err I must sleep now as I have a job to keep tomorrow in lieu of 'Bharat Bandh'
Do share your feedback, because it is important.
Thursday, June 7, 2012
Mongodb Paging Item Reader
Here, is a sample..
package org.zero.index.batch.read;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.database.AbstractPagingItemReader;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.util.Assert;
public class MongodbPagingItemReader<T> extends AbstractPagingItemReader<T> {
private MongoOperations mongoOperations;
private QueryContext<T> queryContext;
private boolean strict;
private static final Logger LOG = LoggerFactory
.getLogger(MongodbPagingItemReader.class);
@Override
protected void doReadPage() {
if (results == null) {
results = new CopyOnWriteArrayList<T>();
} else {
results.clear();
}
final List<T> result = mongoOperations.find(
queryContext.getQuery().limit(getPageSize()).skip(getPage()),
queryContext.getEntityClassName(), queryContext.getCollectionName());
if ((getPage() == 0) && result.isEmpty()) {
if (strict) {
throw new IllegalStateException(
"No matching documents found (reader is in 'strict' mode)");
}
LOG.warn("No matching documents found");
return;
}
results.addAll(result);
}
@Override
protected void doJumpToPage(final int itemIndex) {
// do nothing
}
/**
* @param mongoOperations
* the mongoOperations to set
*/
public void setMongoOperations(final MongoOperations mongoOperations) {
this.mongoOperations = mongoOperations;
}
/**
* @param queryContext
* the queryContext to set
*/
public void setQueryContext(final QueryContext<T> queryContext) {
this.queryContext = queryContext;
}
/**
* @param strict
*/
public void setStrict(final boolean strict) {
this.strict = strict;
}
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
Assert.notNull(mongoOperations, "mongoOperations is null");
Assert.notNull(queryContext, "queryContext is null");
}
}
Monday, April 2, 2012
Hausla Buland
जैसे कंधे पे इक दोस्त का हाथ हो
जैसे लफ्ज़ो पे दिल की हर एक बात हो
जैसे आखोँ से चिंता की चिलमन हटे
जैसे मिट जाए हर ग़म कुछ इतना घटे
जैसे राहोँ में सपनो की कलियाँ खिले
जैसे दिल में उजालो के दरिया बहे
जैसे तन-मन कोई गीत गाने लगे
जैसे सोई हुई हिम्मत अंगडाई ले
जैसे जीना ख़ुशी की कहानी लगे
जैसे खुल जाए रस्ते अब तक थे बंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला जैसे आस्मां से हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला जैसे आस्मां से हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हो बुलंद.....
कवि -- श्री जावेद अख्तर
You like to grab your own copy here
जैसे लफ्ज़ो पे दिल की हर एक बात हो
जैसे आखोँ से चिंता की चिलमन हटे
जैसे मिट जाए हर ग़म कुछ इतना घटे
जैसे राहोँ में सपनो की कलियाँ खिले
जैसे दिल में उजालो के दरिया बहे
जैसे तन-मन कोई गीत गाने लगे
जैसे सोई हुई हिम्मत अंगडाई ले
जैसे जीना ख़ुशी की कहानी लगे
जैसे खुल जाए रस्ते अब तक थे बंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला जैसे आस्मां से हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला जैसे आस्मां से हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हौसला हो बुलंद
हो बुलंद.....
कवि -- श्री जावेद अख्तर
You like to grab your own copy here
Sunday, April 1, 2012
Spring Managed DI for Quartz Jobs With Dependencies
Problem Statement:
Quartz scheduler (v 2.1.3) triggers a job which has its own dependencies which needs to be managed using Spring (3.1.1.RELEASE+)
Solution:
The Job
public class HttpDealsDownloadJob implements Job {
// NO DEPENDENCIES HERE
@Override
public void execute(final JobExecutionContext context)
throws JobExecutionException {
final JobDataMap jdm = context.getJobDetail().getJobDataMap();
// EXTRACT YOUR DEPENDENCY FROM JOB DATA MAP
// EXTRACT YOUR DEPENDENCY FROM JOB DATA MAP
final HttpFileDownloader delegate = (HttpFileDownloader) jdm
.get("job.delegate");
delegate.apply(context.getJobDetail().getJobDataMap().getWrappedMap());
}
}
Spring Context
<bean id="mySchedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="file:quartz.properties" />
<property name="jobFactory" ref="springBeanJobFactory" />
<property name="triggers">
<list>
<ref bean="myCronTriggerFactoryBean" />
</list>
</property>
</bean>
<bean id="springBeanJobFactory"
class="org.springframework.scheduling.quartz.SpringBeanJobFactory" />
<bean id="myCronTriggerFactoryBean"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="cronExpression" value="${my.cron.expression}" />
<property name="jobDetail" ref="myJobDetailFactoryBean" />
</bean>
<bean id="myJobDetailFactoryBean"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobDataAsMap">
<map>
<entry key="source.url" value="${my.deals.url}" />
<entry key="job.delegate" value-ref="httpFileDownloader" />
</map>
</property>
<property name="jobClass"
value="org.zero.gb.acequia.scheduler.HttpDealsDownloadJob" />
<!-- INJECT APPLICATION CONTEXT -->
<!-- INJECT APPLICATION CONTEXT -->
<property name="applicationContextJobDataKey" value="appicationContext" />
</bean>
<!-- THIS IS THE CLASS WHICH ACTUALLY DOES THE WORK -->
<!-- THIS IS THE CLASS WHICH ACTUALLY DOES THE WORK -->
<bean id="httpFileDownloader" class="org.zero.acequia.integration.http.HttpFileDownloader">
<!-- your dependencies here -->
</bean>
Wannabe Architect 101
I feel fortunate to be a professional Software Engineer as no other career option would have given me the luxury to contribute in myriad different ways and power to change them for good. But, with power comes responsibility and to conduct one self in graceful manners in adverse situations. Today, I'm going to share some of my first hand experiences working in technical leadership role;
- you do not have authority - get this straight into your head, as it sets the foundation for our discussion.
- you have to sell/evangelize your ideas - as you are not a manager you cannot (should not) try to force your ideas/opinions. However, you can evangelize the choice framework/ technology/ language options by providing a working proof of concept (be ready to trash it, if it doesn't works though!). Make note to address people's concerns like difficulty to comprehend the "new" thing or may be to help them appreciate the concerns you have about the existing thing. Remember, any change forces people to come out of their comfort areas. The change you are trying to accommodate must not be intimidating for PEOPLE
- assert without being blunt - although i have no right to preach this but people who have worked with me be known that I'm very working aggressively on ways to put things in improved context. Although, I still favor shared objectivity as it helps me focus on task at hand.
- invest in your relationship - "If someone is strongly disliked, it’s almost irrelevant whether or not she is competent; people won’t want to work with her anyway. By contrast, if someone is liked, his colleagues will seek out every little bit of competence he has to offer."
- people have short impression and long term memory - use it in your favor - it is never too late to start afresh lead by example, people will copy "as it works" and chances are some of them will eventually appreciate the concepts. You want your team to write unit tests, show them how you have written for some of the components in the current project and then tell them how it helped being productive, rather than the other way around. If you go gaga about DIs and AOPs and FPs or any other alphabet soup and tell the benefits chances are people won't practice it however if you just do it and others in the team start identifying the improved productivity the smarter ones will copy. Be ready to help them without being preachy or The Guru.. you have created your community of users!!
Top it all be stateless! like one of those web-services which you might design yourself. Do not carry the emotional backlog you created with working with people you cannot stand or plain incompetent. Start afresh, it helps to travel lite.
Sunday, September 4, 2011
Learning Resources for n00bs: Coding & Problem Solving
Although a quick search would fetch you tonnes of learning resources. Here, are the recommended for absolute beginners like me, into the realms of problem solving;
The best part about both these online resources is that they are sorted in the increasing order of difficulties which is key to learning incrementally at one's own pace.
Also, codechef.com runs a monthly code competition which looks really interesting.
Do share your feedback/suggestions.
Saturday, September 3, 2011
Cosmic Link
Now that free lunch is over the onus now lies on us (read Software Engineers) to gainfully utilize the computing resources available to us. It is now therefore imperative for us to develop and hone our fundamental skill sets and may be stop(OK, pause) running after the next 'big' thing (read technology/framework).
For those of you who have not yet hit the 'dead-end' be warned. It would help you to develop your skills on;
- Problem Solving because no matter what 'flashy' thing you know there will always be some thing new hitting you every now and then. Learning to solve problems not only makes you more employable but also makes you more confident and inspirational for others (think thought leadership)
- The choice of Data Structures and Algorithm you employ in your applications may be all that you need to optimize their non-functional needs and nothing is more satisfying than making your application perform better.
- While argumentatively speaking I do agree that frameworks are making us dumb but that is largely because we are always in a hurry to just complete the task without really understanding the framework internals. In not so distant past, I found it difficult to solve a bug which creeped into my code because of my incorrect understanding of java.lang.String#split(String regex) method. The problem was later identified and was mixed in matter of few seconds by merely reading (after everything else failed, and I decided to raise a bug!! ) the associated javadocs and saved myself from the embarrassment.
- Writing concurrent code is both error prone and difficult and till recently I didn't really face a performance issue, may be the free lunch was still available to me... but no more. Work on it.
The above piece is not only relevant to java developers for us all. Think about it knowing your DB internals(say join algorithm) will help you optimize your queries or may be if you write shell scripts knowing the correct order of filtering might put your script on steroids...
Please do not get offended by reading the above, the tone might sound prescriptive.. but is really a result of my reflections on my recent mis-adventures and is put to public notice lest you repeat them yourself.
Sunday, June 26, 2011
Just dance
Yes, I'm watching the screening rounds on Star Plus.. the candidates are from as diverse a background as one might only imagine.. their energy and sheer enthuthiasm is infectious. I don't have words to express my feelings, however, that's not the point of this piece... but the fact that it is important to be an artist in your profession be it dancing or software engineering.. practice your craft
Monday, March 28, 2011
Leveling the Threat Matrix
Almost serendipitously, I discovered some simple sentences which when put together does makes sense to me...
- Initiative and Responsibility: Very few of us take initiative, while this is an important trait of young, energetic people and should be highly appreciated. More often than not the same people lack responsibility or step back when an avalanche of things start coming one's way.
- Action and Control: Now is better than never, although never is almost always better than "now". One needs to be in control of things... evolutionary, step-by-step improvements keeps one in control and can help steer the direction of future coarse of actions in a more informed manner.
Friday, January 14, 2011
Few observations on my blog readers
... ho ho ho the big brother is watching you!! well not really, but yes as a trained statistician and a practicing software engineer I love to observe "things", a collection of things... and try to create an empirical model of their behavior pattern.. a blue print.. and study them to put them into my knowledge stack that may or may not be used immediately.
My findings;
My two cents. Get leaner!!
My findings;
- It adds to your credibility if you provide references in your write ups at proper places. It only proves that the write has done his/her home work.
- However, merely providing the hyper-link.. like to learn more read here will not necessary be followed by your reader because
- that may break his train of thought
- you might risk to loose your audience
My two cents. Get leaner!!
Sunday, January 9, 2011
Innovation - Generating Ideas: The monkey's view
Not again ..not another hyperbolic session on INNOVATION but these days almost every one in my social circle at least hints about innovation. Not so surprisingly it is a constant endeavour of our species to be introspective and improve continuously, so much so that historians have even classified our cultural heritage in terms of the innovations that have distinguished them viz: the stone age, iron age.. Similarly, the role of innovation at enterprises is pretty much tied with their sustainability and even existence.
The dictionary defines the term in a rather half baked manner (blasphemous?!!) while it does appreciates creating the "new thing" it safely discounts the efforts gone into continuous improvement of existing "thing". Sadly the incremental or the continuous improvements made with the existing "things" meets the same fate and goes unnoticed at our enterprises.
Also, we tend to focus more on the fruits of innovation, that is, the "product" itself and do tend to take the process part for granted and much worse "a necessary evil" at least in my software industry. It is only timely that much work of art is already published (think continuous delivery) but they are yet to make to the mainstream howsoever "agile" the enterprises may like to call themselves.
I understand by now must have already read my mind and must be wondering if I'm really going to add any value... some of the ways I think can make a good start can be summarized as under;
- Become a producer of content.. in my limited scope of understanding I feel most of us do not write or express ourselves or take stand for the fear of being judged. Let's change that and start putting our thoughts in black and white here on blogs, comment on others blogs.. connect. Not many of our experienced leaders write. Writing is such a powerful medium that one can reach out to whole bunch of people at one time which is boon for our time-pressed industry leaders.
- In one of my earlier post I discussed the challenges I faced to share knowledge. Some of the ways sharing knowledge can help is to come out of our stove pipe modes and satiate our higher needs of self actualization. There is this nice article which covers the subject in greater depth and also provides the relevant background knowledge. You will do good to read it for yourself.
- Management determines the organizational climate. It can send a clear message through rewards, mentor employees to participate in open source software products, participation at technical conferences, taking engineers to customer meetings, sales team to participate in test cycles...
- The above mentioned set of activities create and encourage the cross-pollination of ideas which can create magical results.. you never know when that bulb glows in someone's head, the EUREKA moment!!
- Support innovators as per Seth Godin if you don't support and nurture them it simply puts spanner into the innovation engine even before it gained any considerable momentum.
Innovation is critical to our growth and generating ideas is critical to innovation itself while thinkers must understand their responsibilities have just begun. Here I made an attempt to showcase some of the problems which should be addressed to create value added services to serve our society.
Subscribe to:
Posts (Atom)



