Archive for the ‘Software Development’ Category

Entice, Educate, Engage – The Three E’s of Marketing and Presentation

November 19, 2007

A mental strategy for marketing and presentation. This article will focus on how you develop software, web sites, press releases, pamphlets, or marketing copy. Basically, anything you present to the world and want to draw users into.

When offering a new application, a new web site, a new service offering, or anything else you want to drive users to there are three concepts to remember, fortunately they all start with the letter “E.”

  1. Entice
    • First you must entice the user to check your offering out. There’s a lot of ways to do this, think of what works best for you. Offer something for free, coupons, a trial, an interesting tag-line, stellar graphics, pose a question, point out that you can fix a problem in the users life. The enticement has to be short, sweet, and to the point. You have to hook the users attention and you only have a few seconds to do it here.
  2. Educate
    • So you’ve done a great job enticing the user, the next step is to educate your audience about what you’re offering. You have more time to do this, but don’t take more than 30 seconds up to a few minutes of the users time. The nature of your offering and audience will dictate how much user attention span you have here.

      If you have an offering that is compelling, solves a problem, and is scarce you’ll have more opportunity to talk to the user. If you have an offering that is in a saturated market place you’ll have less attention span.Don’t go overboard here, give the benefits and value proposition to the user as concisely as possible. List your features and benefits, provide cost information, testimonials, quotes, or links to further information such as white papers or case studies.

  3. Engage
    • If you’ve gotten the user this far and your offering is compelling you’ve done a great job. Now’s the time to make a call to action. Sign up now, order here, do something, talk to a representative, get a free trial, try the demo. This is where you want to engage your user to an action. Let them explore your offering and learn more.

      Ask the user to make an investment of themselves, even if it’s only a few minutes of their time.Remember to continually engage the user. Give the user opportunities to try different things, learn different aspects, and interact. At this point the user probably wants your offering and they’re making sure it’s something they can actually use. The more engaging your offering the more the user will invest. A positive investment of time and research in your offering will give the user an emotional connection to go with you.

These may seem common sense, I think they are. But it’s the type of thing to keep in mind when writing code or writing copy. If any “E” is weak you’ll lessen your chance of closing the deal and gaining the user. And, of course, having a great offering is the prerequisite to all of this!

Good luck with your ventures!


Fixing “The application failed to initialize properly (0xc0000135)”

August 1, 2007

When attempting to run Microsoft .Net based applications, like many of those available from http://www.lowesoftware.com, you may get the following error on startup:

The application failed to initialize properly (0xc0000135)

The cause of this error is that the Microsoft .Net framework is not installed or is damaged in some way. Therefore applications will fail to launch.

To fix this error you can run Windows Update and find the Microsoft .Net framework update to install. Alternatively, you can download the Microsoft .Net Framework directly from Microsoft.


The Top Three Priorities for Software Development

July 31, 2007

Across industries, across platforms, across technologies, and across users there are three fundamental priorities that should always take the number one, two, and three positions in any software development effort. The three priorities being security, reliability, and maintainability.

These three notions are at the top of my list with every project I begin. They are the montra that I repeat to my teams and to myself all the time. Over many years developing small and large software packages for many industries and many user bases no project can be successful without first meeting these three criterion. And I’ve seen many projects fail for shifting other priorities into this top tier.

There are always business driven goals to take into account while developing software such as speed to market, usability, scalability, portability, globalization, etc. But the security, reliability, and interoperability of applications must be addressed before any other requirements can be met.

What do the priorities mean?

Security is the gurantee that the application will first do no harm. This is number one in any software package. Security of data, of systems, of unauthorized access are the most important baseline needs of any software application. Ensuring that even if the application sucks, crashes, is difficult to use that at least it will not compromize internal or external data and systems is paramount.

Reliability is the number two priority when developing a software product. The product must be available all the time, without lockups or crashes, unexpected behaviors, and down time. An application may be difficult to use, it may lack features, but if its dependable and predictable then users and businesses can depend on what they have got. Maintainability is a priority that you may wonder why it makes an appearance so high on the list. Maintainability means something very specific to me. It means that software is being built by creating blocks that are assembled and not goliath systems. By following good OOP, SOA, and componentized development it ensures that the developed software is flexible to keep up with the always chaning landscape of technology and customer requirements. Componentization is the foundation of nearly all other requirements such as scalability, portability, globalization, etc. Productized components is a way to achieve this.

By keeping these concepts in mind to design, build, and test a secure and reliable componentized foundation I gurantee you’ll see more success in your software development efforts ongoing.


Innovative Interfaces and Usability

July 27, 2007

You use computers and digital devices all the time. Maybe you even write software for these devices. Software is complex and provides a myriad of features to users. While featureset and data increases, device sizes are shrinking. With scarcity of input and output methods, an increase in software features and information, and construction done by engineers what are we to do?

Along with recommending a couple books, The Design of Everyday Things by Donald A. Norman and The Inmates Are Running the Asylum by Alan Cooper I’ve compiled links to some interesting ideas for interacting with our digital devices. Hopefully they will provide some inspiration to what you build. Devices need to become easier to use.

No Mouse Clicks

dontclick.it is a web application with an interesting design feature. It provides no buttons for click. All actions are initated with gestures of the mouse. Of course, the gesture interface is being touted by Apple and the iPhone right now but this example takes it to the next degree.

Buttonless Interface

Spatial Computer Interface

Back in 1999, Microsoft Research worked on a project called The TaskGallery. This is a project that introduces the concept of grouping Windows into tasks, using rooms, pictures, and walls rather than a desktop, and a 3d orientation for it all. Remember it’s from 1999 so the graphics aren’t that great. It has some compelling concepts when it comes to window and document management.

The TaskGallery Interface
Click for an animated view.

Quikwriting

Ken Perlin, someone I admire for the creation of Perlin noise, has a number of computer science experiments. One of those is Quikwriting. Quikwriting allows you to make pen gestures quickly to select letters from regions of a pad. Potentially good for mobile devices as the in-between of handwriting recognition and a keypad.

Quikwriting Example Interface

 Zooming Interfaces

Ken Perlin also has some tools available for the concept of zooming interfaces. These interfaces display heierarchical data and provide the ability to drill down the heierarchy by zooming into graphical representations of the system. Perlin has implemented these interface demos for a few applications.

A Zooming Navigation Interface
For General Computing and Web Browsing.

Zooming Interface on a Phone
For interfacing with a mobile phone.

You can view more examples of zooming interfaces at Ken Perlin’s homepage.

GroupBar

GroupBar is a Window management alternative developed by Microsoft Research. It is an obviously simple but unique way for managing Windows. You can download and install it as an alternative to the start bar. I definately could see uses for MDI (multiple document interface) applications such as Visual Studio, where there are often many windows open concurrently.

GroupBar from Microsoft Research

Surface Computing

Along with the gestures we mentioned above is a new form factor. The table top and surface computing. Microsoft has release a product, called Surface. Here is an in depth sit down demo as well as a teaser commercial. There is also a Linux version in development.

Surface computing is an interesting concept and introduces a new form factor. It provides multiple touches, the ability to recognize real object set on it, a host of gesture based inputs, and new metaphors for computing.

Microsoft Surface Computer

Mobile Browsing

While not completely innovative I thought it was worth inclusion because mobile computing is a huge growth area and something you need to be aware of. 

iPhone

Browsing the web on a mobile phone is a pain. The screen is too small and content never looks right and navigation stinks. This is being addressed by Microsoft with Deepfish and Apple with the iPhone. Providing zooming, scrolling, multi touch, and other mechanisms to interface with the phone, these are technologies that are going to make mobile browsing much more functional and pleasurable.

Jurassic Park

And just for fun, the Jurassic Park interface. You know, the one that annoying girl was using to interface with the Unix machine. Hey, it’s 3d!

Jurassic Park Unix

Conclusion

There are numerous ideas out there for new interfaces to software and computers. While consistency can be important, providing an enhanced interface can shorten the learning curve and increase productivity ongoing. Keep the user in mind, hire interactivity designers, and don’t be lazy about the software you design or write. Taking time to build a good use interface now will save countless man hours for people.

If you have any design ideas or links, please add them to the comments. You can continue your research into Interaction Design on Wikipedia.


Types of Software Developers, What Are You?

July 24, 2007

What kind of software developer are you? There are many types of developers out there, they serve different functions in the development lifecycle, have different skillsets, and have different job titles. Here’s a list of non-job-title types of software developers. What are you and where do you want to be? 

Architects – Architects have a difficult job, they are the ones that resolve the creative, application, business, and technology needs. Architects take thethe problem and deconstruct it to the most optimum pieces. Architects provide plans for the other developers. They are able cross disciplines and vision the code.

Implementers – Implementers are developers with less creative or algorithm development skill. These developers take the components, APIs, and pre-written modules from the Architects and create the final product. Implementers put the pieces of the puzzle together. Implementers work best working with specification manuals and third party development APIs.

Discoverers – Discoverers are developers that test and experiment with things to come up with ideas. These are the developers that hunt and find. They are the ones that have lesser capabilities of developing quality solutions, especially to complex problems. For example they will see an API call and come up with a niche idea to implement that call. These developers solve small puzzles and can be related to a more “procedural” programmer.

Thinker – The thinker is a little bit of a discoverer and an implementer. The thinker creates algorithms but not to the level of the Inventor. Thinkers create algorithms that are simpler… to solve simpler problems. Thinkers work best at optimizing and streamlining code. Thinkers are similar to implementers; the exception being they do not require as much definition in the pieces of the puzzle. Thinkers are capable of developing pieces when the components given to him do not fit optimally (if at all).

Inventors – Inventors are developers that think outside the context of APIs. They think about concepts and ideas, they think in theory, they are computer scientists. They are the ones that come up with encryption, compression, image processing, and other interesting algorithms that enable the discoverers to find the niche applications.