iPhone App Translates Baby's Crying
Is your baby hungry? Bored? Tired? Annoyed?
When babies cry, even the most attentive parents often struggle to figure out why. But a new iPhone application claims to help new moms and dads decipher the wails and howls of their newborn children.
Launched this week by Barcelona-based Biloop Technologic, S.L., the Cry Translator uses sound analysis technology to identify one of five emotional states -- hunger, fatigue, annoyance, stress or boredom.
"There is a tremendous amount of research supporting that babies who are responded to consistently and appropriately will cry less and develop stronger social and cognitive skills," Pedro Barrera and Luis Meca, the application's creators, said in a statement.
Within 10 seconds, the app translates the sound and identifies the emotion, and then gives parents a set of tips to calm the child. The company says its technology is 96 percent accurate and works for any child, regardless of culture or language.
However, the application is hardly a steal. Until Nov. 11, the application is $9.99 in Apple's app store, and after that it will jump to $29.99.
The Cry Translator is just one of about 100,000 applications available in Apple's App store.
Here is a sampling:
Virgin Atlantic App Helps Fight Fear of Flying
If a fear of flying keeps you grounded, Virgin Atlantic has a new iPhone application just for you.
Launched in partnership with developer Mental Workout, the new application is based on (and named after) the airline's Flying Without Fear course, which the company says has a 98 percent success rate.
The application, available for the iPhone and iPod Touch, includes relaxation and fear therapy exercises, frequently asked questions and a video that explains a flight from start to finish.
It even features a "fear attack button" for emergencies, with breathing exercises and quick tips.
"Our first iPhone app will bring the benefits of our successful Flying Without Fear course to millions of people around the world who are now using mobile technology to make their lives better," Sir Richard Branson, Virgin Atlantic's president, said in a statement. "The app will put many travelers at ease and enable them to prepare for their first Virgin Atlantic flight."
At $4.99, the it's on the pricier side for iPhone applications. But as proof that the app is based on a sound program, Virgin Atlantic said its Flying Without Fear course recently helped Whoopi Goldberg overcome her fear of flying.
"The program works, I was a skeptic. I hadn't flown in 13 years but after doing their program, I understood that while my fear was real, there were many things I didn't know or had misinformation about, which they were able to clear up," the actress said in a statement. "So what happened? I now fly. It's that simple."
Win a Car With New VW Application?
Play an iPhone game, win a car? It sounds too good to be true.
But to launch its new 2010 GTI hatchback, Volkswagen is relying solely on a free iPhone game. If you play it, you could win one of six limited-edition GTI models.
Available in Apple's App Store starting today, Volkswagen of America, Inc.'s Real Racing GTI App challenges players to race virtual GTIs around a racetrack. The more you play, the more points you build up. And each week for six weeks, the company will reward the week's top player with his or her own real car.
As they compete, players can share videos of their game play with friends on YouTube. They can also carry the competition over to Twitter and send messages to other players.
In an effort to reach a young, tech-savvy demographic, Volkswagen hopes the iPhone and iPod Touch will be more effective than traditional Web and TV ads.
"With the personalization of media and the challenges inherent with reaching constantly connected consumers, we tasked ourselves to rethink the way we launch vehicles in order to engage our consumers in a meaningful way," Tim Ellis, vice president of marketing for Volkswagen of America, Inc., said in a statement. "Launching the all-new 2010 GTI via the Real Racing GTI App allows us to connect with this savvy GTI consumer within his or her everyday life in a way that no 30-second spot ever could."
Volkswagen isn't the first to use an iPhone application to launch a product. The sports clothing company PUMA has released an iPhone app to promote its new line of bodywear. And, earlier this month, Pepsi released a controversial app that claimed to help men "score" with women to help generate buzz around its new energy drink.
Why is facebook making it, while the others are not
and it has nothing to do with technology, and yet everything to do with technology...
1. The user experience:
- Picture Profile: Seeing your picture as a way to identify yourself adds so much to a personal experience.
- Layout of the Feeds: The layout of the feeds is so friendly, you can see less or more depending on your choice.
- The menus: The top menus stay so consistent within the user's experience, while the 2nd level menus are context dependent.
2. The technology:
- An open platform: The ability to create new facebook applications by third parties is such as huge strategic success that facebook has over the competition.
Facebook has the momentum to become the greatest web company ever, but the following are key challenges that it needs to address:
- Advertising program: Its Ad-program is quite weak and ineffective to say the least. The ads look cheap, and often times irrelevant and out of context.
- Mobile experience: Facebook has a set of mobile features, but there is a whole new world of features that are waiting to be exploited with location, context and network enablers.
- Business model: Can facebook sustain the cost of the explosion of its user-base and usage, with its existing ad-based and VC funding. There is surely a lot of thought been given to this.
If facebook can overcome these challenges, it has the momentum to become the greatest web company ever...
Component Architecture for High Performance and Clustered Web Services Based Implementation
The Diagram shows the Component Architecture for High Performance and Clustered Web Services Based Implementation.
See Full Image on Gliffy
SOA: Component Interaction Framework
SOA Based Framework creates a system with open and flexible components.
It supports needs of Business Agility, by organizing Services based on:
- Business Terms
- Loose Coupling
- Division of Responsibility
- Creating Agile Platforms that can support greater Reuse and Pluggability.
What does SOA mean to you for the Enterprise
SOA is the Integration Enablement that promises the solution to Application Integration in an open, global and loosely coupled manner.
SOA Enables a Loosely Coupled Infrastructure for creating an overall Architecture for the organization. It enables flexible and open applications integration options across applications within the organization and between organizations. SOA also promotes standards for business and process oriented systems, that are language and platform independent.What are the key characteristics of a SOA based System- System based on Services: The Architecture of a SOA needs to be designed around services that address a business domain, rather than the specific application. The specific application quarks need to be encapsualted either within or outside the service, so that the service can be used in other contexts, can be combined, and reused.- System Based on messaging: Services need to interact based on messages being passed, whether they follow a Asynchronous or Synchronous protocol for interaction. XML offers the ideal solution for this.- Self-Descriptive messages:
Messages being passed to the service methods and results from the service methods need to be self-descriptive. The Request/Response paradigm of HTTP is extended to a SOA Architecture, and is needed to achieve long-term reusability, and manageability considerations.KEY PATTERNS:
- Loose coupling within the web-service: The implementation code for the webservice should not be dependent on the webservice itself.
- Coarse Service: Not only is this easy to maintain, but the key benefit is performance. A coarse grained service will take only 1 parsing of the input parameters/document with business rules, thus delivering the performance benefits compared to multiple roundtrips.
- Alighment with Business processes: Companies need to think about themselves as service providers(and can merge, acquired over time), services can be combined over time, and need to have the architectural vision to be extensible over time.
- ESB Features: connect systems to a central SOA (Transformation, routing, adoption of different transports), registry, transform, management of services.
Requirements to Design: Relationships of System Needs and Architecture Artifacts
This diagram reflects the Types of Requirement documents, and how they are used as inputs for technical specifications, from which Architecture and Design artifacts are built.The Four key Architecture Artifacts are the:
- Module View
- Runtime View
- Deployment View and
- Data Model
PS. The diagram is created using http://www.gliffy.com
Its an excellent tool to create and publish diagrams.
Challenges of managing and planning a application architecture in a large enteprise architecture environment
Architecture Planning and Managing Challanges:
- Addressing all critical needs(Lifecycle, Security, Networking, Identity, Integration) of architecture for maximizing reuse, consistency, performance and maintainance.
- Recognizing and Encompassing the varied needs(Legacy, Current, Future) of the organization.
- Managing varied needs of the Applications, and yet building common frameworks for systems manageability.Solutions:
- Reference Architectures and Blueprints need to be available for multiple aspects including Overall Enterprise Architecture, Frameworks, Development Tools, Service Management, Application development Layers.
- Governance is key to maintainence and diagnostics, including inbuilt SLA support, Auditing and Reporting.
- Supporting a common dashboard for monitoring and managing key aspects of All applications uniformly, and application support for dashboard(such as common logging and reporting, ESB, etc)
- Common Standards for Multiple Technologies supported and Approved for the Organization needs, along with Flexibility for bringing innovation and new technologies to the Architecture stack.
Facilitation of Brainstorming sessions
This posting discusses some key ingredients that help deliver outstanding results from Brainstorming sessions.
As a Facilitator, your role is to lay a platform for discussion, encourage participation, keep the discussions on track and synthesize the most important decisions.Preparing for the Session:
- Create some flip charts which layout the main focus of the session.
- Categorize the problem space into smaller sections(as needed), and layout the levels of the solution before building the potential solutions.
- If you are expected to find some specific solutions to a problem, a good idea is to define 2 or 3 possible direction, and create a picture of the same(by Category).
- Draw the potential figures on the charts(or draw in Visio and stick om the chart), and point out the key items that need to be decided.
- Define a process for the Session, so you have a mental image of how the discussion will be conducted.At the Start of the Session:
- Set the right expectation for the participants about the scope of the Session.
- Layout the details about the process to be followed in the Session.
- Set some ground rules that will help the session. A couple that work great include telling everyone that (1) "I will wear a couple different hats during the session, and make this a fun and productive session for everyone"; (2) "There is no wrong idea, so keep them coming"
(3) "We will set a priority for the decisions made in the meeting"
- Use humor freely.During the Session:
- Ask questions that trigger ideas from the participants
- Give some key roles to other participants, so you have support in the meeting
- After every key decision, go back to the flip charts and make any necessary adjustments to the initial assumptions
- If you get conflicting opinions, try to raise questions that would justify one point. Additionally try to see which parts of the points can be taken into consideration, and sort of pick the best from both sides.
- Encourage participants to voice their opinions, but keep an open mind.
- Be calm, funny and firm all at the same timeAfter the Session:
- Synthesize the results into tangible decision items.
- Layout a plan for the items that could not be resolved.
- Note down the next steps based on the results from the session.
- Note down what is expected as the next steps from the various participants.
It is best to get as many decisions as possible in the session.
Facilitation can be a fun, productive and effective way to bring out the best results from teams. Proper planning, execution and followup are the key steps to a successful brainstorming session.
Software that lasts...
There are plenty of concerns that IT Business Strategists and Architects address. On the business side dealing with the value, risk, budget and schedule are important.
On the Architecture side, building flexible, reusable and high perfrormance software is critical.
In many projects the constraints of business and technology lead to many compromises in building truly open software over time.
So what are the 2 critical aspects that projects need to address.
Those 2 things would be PERFORMANCE
of the software and MAINTAINABILITY
of the system. If Software does not perform well, users will not use it and the project will be dead.
If the software is not maintainable, it will take too many resources to be sustainable.
So how does one always stay on top of these 2 critical elements and adopt proactive infrastructure in the project?- Performance:During Business Analysis:
* Define SLA's for the project, and build Proof-of-concepts to give some justification to those SLA's (Something that is more tangible and proves that those SLA's are achievable).
* Identify the key functions of the application that are business critical as well as high risk from a technology perspective.
* Build Blueprints for building high performance systems.During Development: * Build infrastructre in the code so the start/end times of functions are automatically logged.
* Write code with Performance as a critical need(but balance with maintainability in mind).Check out my other blog with some specific tips on coding for performance...
* Build automated scripts that track and fetch timings of methods, and report on methods that take up high CPU usage, and perform slower than the SLA's.- Maintainability: During Business Analysis:
* Identify the best Arcihtecture team to build a design to last
* Business Analysis can best identify which business functions are the most critical to be flexible and which are less important to the business.During Architecture/Design:
* Design to focus on high cohesion between related features, and low cohesion between unrelated features sets the foundation for building maintainable code.
* Formulating Standards for Vertical and Horizontal elements for the project is the key to maintainable code.
* Some Horizontal elements include Logging Strategy and goals, Exception Handling, Constants, Date functions, and other common features in the application.
* Vertical elements include standards and reusable components for business specific features.
* Build best practices and prototype code for the software is critical for consistent and maintainable code.During Development:
* Reuse: Features that have already been built should be reused, rather than be built again.
* Patterns: Use a consistent style for doing a specific features. This is the key to maintainability. So have a consistent way to get data from the session, use Math libraries, use same validation style.During Production:
* Automated test cases and continuous builds and tests is the key to maintaining robust applications.
Critical to Customer: The Value Triangle.
Build applications is an art as much it is a science. A key ingredient of a successful application is listening to the customer and building features that will meet the key needs of the customer.
Customer needs are like the "Human Needs Triangle". So as we in life need the basic needs such as food, clothing and shelter, and then value needs, emotional needs, satisfaction, etc; applications need to fulfill the same. What makes it complex is that different audience have a different pyramid, so making a perfect pyramid for each customer type is difficult. So creating the right balance is critical.
Here are some common basic needs that customer needs in most applications:
If it aint fast, its not worth it.
Quick access to information is critical.
If its not intiutive, its not usable.
If it cannot be searched, it does not exist.
Some solutions to achieve these basic needs:
1. Multiple Views:
Plan on providing multiple views to users. Use system by usertype, functions, etc.
Provide features to customize.
Get early and often user feedback with a working prototype.
Build simple interfaces. Add complexity for advanced users.
5. ALWAYS remember the pyramid:
Basic needs are always needed, when providing cool & complex features.
Open Source Technology Implementation
Here is an example of what an opensource implmentation can look like:
Servers powered by Debian Linux
Database powered by MySQL/InnoDB
Web site powered by Apache
Servlets powered by Tomcat
Search powered by Lucene
Search highlighting powered by Mark Harwood
Recommendations powered by CoFE
So opensource implementations have definately been successful in the marketspace, providing fast, reliable, extendable, and robust solutions. So why should companies purchase software?
In some cases opensource solutions provide a no-brainer options, such as using Linux, Struts. In other cases(which occurs more often) the pros and cons are much tricky.Here are some perspectives
that should be considered while making critical decisions on off-the-shelf versus opensource purchases:
- Technology: Do you have technical expertise to support the opensource implementations?
- Support: Is there a support vendor for the product, and how will it be maintained?
- Company: What are the future plans, and supportors of the opensource product?
- Price: How expensive is the off-the-shelf equivalant of the opensource solution?
- Features: What additional features does the off-the-shelf equivalant provide?
Please share your opensource experiences.
The Pragmatic Web
Websites can be complex, confusing, overwhelming, or simply unusable.
A pragmatic website will have the following bare essentials:
- Keeps the need of the users in mind, rather than just look at the information available.
- Gives intiutive suggestions to user, so the interaction is a learning experience
- Is Predictable and Consistent, so similar actions behave similarly throughout the site
- Gives the user some easy paths to navigate, and option to explore complex features
- UI Looks robust and clean. Simple colors, but various sections are well separated by tabs, tables, colors
- Bread Crumbs indicate where the user is, and what the page is displaying
- Search is simple, and results are customized based on needs of the users
- Menus are divided based on usage of site, so overall options for users are manageable
Problem Solving Techniques
Techniques to help solve problems that are difficult to solve, or have multiple solutions:
- Think from Fresh Perspective
- Talk it over with a colleague
- Think simple
- Think possibility & probability of error. Solution base on that
- Ask yourself questions
- Throw What-if scenarios
- Consider your instinct
- Think about what worked in the past, and what failed
Resource Management: Keep 'em motivated
is as tactical as it is strategic. Here are some techniques that are sure to keep the productivity of the projects very high, and the motivation of the resources at top-notch levels.
- Start Right:
Key to Managing resources effectively, is to identify and hire the right set of resources. Scenario and use-case based interviews, go a long way in achieveing that.
Plan out as far ahead as possible. Sometimes it could be 2 weeks, other times it could be 6 months or longer. Planning translates to focus and direction for the teams
, thus giving the right momentum for project success.
-Balance project and team interests:
It is critical to create a balance between what the demands and needs of the project are, versus what the team members thrive on. Note that different members may have different motivation points. Find those out, and see how the project needs fit with those. Negotiate the 2 to eventual project success. If there is a big disconnect in the two, some changes need to be made.
- Set incremental goals, targets and deadlines:
Team members thrive on getting clear targets and delivery times. Fulfill those needs, by giving clear incremental deadlines that are agreed on.
- Set quality Standards:
With standards for quality, setting delivery goals will be ineffective. Set uniform standards for the teams and monitor progress.
Identify which elements motivate your team members, and work towards finding ways to meet those. Google encourages its members to spend 20% of their time in innovating on new products that can help the company. Project lenghts are 3 months or so. Every team and company does not have the luxury of achieveing these scenarios, but brainstorm on what you can do in your given scenarios. You might be surprised.
You cannot predict, but you can plan: The Loop Effect...
What are the key Milestones of planning a project or a product. Here is the approach that I call as "the loop effect".
The basic concept in project planning and execution is to have a clear vision about the End Result of a Project, much before the start of the project. Thus a "loop effect".Here are the key milestones and unique features at each milestone:1. Defining the project/product goals, and having a clear vision of the end result.Note: Its vision of the end result, not the exact path or techniques to get there. That you will learn along the way. For example: We want to design a new car that will have a high mileage OR we want to design a mobile-web tool which helps user to easily get informaion on traffic delays and use alternative routes easily. 2. Define key features and key contraints
This is very important early on in the product/project development lifecycle. Key features will lay out the benefits as well as the complexity of the project. The contraints will lay out the feasibility of the plans, and lead to innovative solutions, alternative planning, building roadmaps and creating a successful strategy.3. Define Alterative solutions and their strengths/weaknesses
You will probably have 2 to 4(or more in some cases) potential solutions. Make a list of strengths and weakness of each solution. A common trend will start of appear at the end of this, and you will discover some patterns. For example, if we use this technology we have a high risk of maintainability, or this solution will give us all the flexibility we need but no product differentiation.4. Pick Top 2 Solutions and Explore details (Prototype, test cases)
For all practical purposes, you will have time to pick at the most 2 potential solutions to experiement with. Build prototypes and proof of concepts to target the high risk and high impact areas.5. Select the winner or Eliminate 1 or both. The project enters a tricky phase. If you have a Clear winner, you are golden to move forward.Most likely you will have issues with both solutions, but one with a edge. Verify that the contraints with the solution are not conflicting with the Vision of the product.Otherwise!!
Go back to the drawing board at this stage!! (Back to Step 3, or 2 or 1 in some rare cases).
6. Detail plans and Execution.
All the planning of steps 1-5 will pay huge dividends here. The path to detail planning and execution will have far less issues.
Note: Monitoring Progress will be very important in this phase of the product.7. The final countdown.
The project is very close to launch. This is a special time in the project. A typical scenario: Time is running out, many pieces are falling into place, but there are some glaring issues.
Note: Plan with the Expectation to make some major changes during the last stages of the project.
The loop finally closes, and hopefully the vision becomes a reality.
These general guidelines help in giving structure and a starting point for product and project planning.
Future of Struts Framework?
Struts has competition: Java Server Faces, Spring MVC model.
Mainstream Enterprise scale Applications in the industry are adopting the new frameworks, while also mostly maintaining existing structs applications.
In this environment what is the future of Struts? Will it evolve, merge, or start to fade?
This raises a bigger issue about use of frameworks and their maintainability. What can application architects do to keep the balance between current(better framework) and future needs(maintainability, flexibility)?
What can designers of the frameworks do to keep the future in mind. Technologies mature, business needs mature, the markets mature. The best example of this is Spring Framework. It is designed to keep the dependence on the framework libraries to be very limited. What else can be done?
Applying messaging in the enterprise and beyond
I wrote these comments to a post about the Need for Messaging:http://blogs.tedneward.com/CommentView.aspx?guid=31fcc3d5-d370-491c-a96d-f0dba73c1d6fThe comments are as follows:
The benefits of Messaging are in Asynchronous processing. The advantage of better dealing with Network Unreliability and Loose coupling of applications, comes with an overhead of extra processing(and possible delay in the results), and complex programming model(including troubleshooting and maintenance).
In my experience, the applications that well suit to Messaging include Web Applications to Legacy Integration(Loose couling, resource management), Distributed Workflow applications (Which are loosely coupled inherently and need the extended transaction support). Messaging is more a binding technology, rather than a enabling technology.
Some of the examples that are cited in the slides, do look applicable for messaging, but I would like to raise some caution over the side effects of some of those. eg. "Granting High priority to some clients": Would this come with a price of a much complex infrastructure to maintain. How about having a separate dedicated machine for high priority clients, and a router to route the traffic to the server(s). "Handling huge bursts": Messaging can potentially slow down the regular processing of requests, so the design should keep that in mind. "Remote Flaky connectivity": Most applications might need special applications to handle this situation in any case. It would probably take more than messaging for this one; such as A local datastore, sync features and more.
Excellent slides overall. Thank You.Some additional thoughts on Trends in Messaging Infrastructure:Having raised some items about the potential complexities and side-effets of messaging, I do feel that Messaging based applications will be growing exponentially in the enterprise and internet based applications(and websites). Integration of applications, tools, services, is a clear trend and direction that will make messaging more and more critical in order to build a seamless and robust experience for the end-user. Messaging based frameworks and patterns will keep maturing(or so I hope) in order to make the overall management of message based applications robust and effective to manage.
Call Web Services with AJAX
The Maven Advantage: Review: "A Developer's Notebook"
The Maven framework enables project teams to organize, configure, and collaborate effectively.
"A developer's Notebook" is an excellent resource to understand multiple perspecitves of Maven.
Along with insights on how to develop and organize projects using Maven, the book skillfully discusses the current status of the Maven project(Maven 1 and Maven 2), Key differences and relationships beetween Ant and Maven(yes, they do not compete but collaborate), the short and longterm benefits of using Maven, details on how over 30 plugins tie together with Maven(such as Cruisecontrol, XDoc, Multiproject, Checkstyle, Findbugs, File-Activity, Site, Test, Artifact, Developer-Activity, Clover, and many more).
And there-in lies the power of Maven. The ability to bind multiple plug-ins to create a comprehensive, repeatable, and reusable team and project collaboration environment.
What I really enjoyed in reading this book, is the writing style and the format of the book. It is precise, yet insightful. The authors openly discuss things that should and should not be done to use the benefits of Maven. Multiple cases elaborate how to perform and extend goals with Maven. If you are looking for a practical guide to get upto speed or excel in Maven projects, this is a must read.
AJAX: Its everywhere
If I had to pick one technology(techniques to be more accurate) that sparkled in 2005, it would be AJAX. Earlier this year, when I started to hear the buzzwords about AJAX, my first reactions were quite unique.
We had used many of the concepts, effects and features that came to be known as AJAX. It was just that the usage was quite unorganized, almost forced, as Architects, designers, and developers alike; agreed that the techniques were not the most elegent.
So what are the advantages to the industry, now that the term AJAX is coined.
Here is my top 5 list of the advantages of the AJAX momentum:
1. The biggest advantage of the AJAX momentum is frameworks that support and extend Rich UI applications. Some existing frameworks in the market include:
The second class of frameworks include a combination of Client and Server implementation. These includes Ajax.NET, SAJAX and DWR (Direct Web Remoting).
2. User interface for Web Based applications will never be the same. Expect to see flexible and extensive user interfaces for both Internet, and more importantly Extranet Applications.
3. Support from the Browser makers: With such a strong momentum, browsers will focus on providing even better support for Rich UI clients.
4. Innovation: Expect the next wave of web based applications to include some powerful features. Try typing any word on http://www.become.com/ and check the hints offered by the application.
5. Enterprise application development: This is such as big boost for enterprse applications to make the browser as the predominant application Interface medium. Thank you AJAX... We needed you...
Rules of Creative thinking
Here are some key tips that can help in developing that "out of the box" thinking, and generating new ideas:
- Remove all boundaries:
Start by removing all boundries from a Solution, and think of A Ideal solution. It might not work, but will give some learning on what direction to take next.
- Work in Spurts:
Put some dedicated time to a problem, and focus just on that. Spen 60-90 minutes and generate as many ideas as possible. Then Categorize those ideas into structured categories.
- Give me a break:
Sometimes a problem entagles you with such force, that the solution seems impossible. At this point, just call it a day. Next morning, the solution will not seem that difficult.
- Inspiration by nature:
This is a key one. Corelate the problem at hand with natural processes. They offer some most simple, yet most powerful lessons. The flow of water, breathing patterns, the need to sleep, the strength of trees,... Are we taking process innovation?
Stay tuned to get some innovative work that uses these elements...
Web Services: Applied for Practical Success...
Web Services are everywhere. They have achieved the success that many of its predecesors could not achieve. So how do we define success...? Seamless Integration? A bit!, Sucessful projects? A few!!; Interoperability? Maye!!!
At this point, success is acceptence of the technology in the mainstream. Yes, web services are here to stay...
So what is needed to get from "A bit", "A few" and "Maybe" to Successful projects, that Interoperate and Work in a Secured, fast, and maintainable manner.
In this post I discuss some critical elements that drive successful Web Services implementations:
1. The More the better: Services need to be Coarse Grained, and pass large amount of data between Clients and Services, rather than make multiple requests for data. Tip: Only pass data that is needed.
2. Data types passed: Services should pass Non-object data(such as Lists, ResultSets), to keep clean interoperability. Object passing is not only more work on both ends, but it is also tightly coupled. This is a practical need for web services to succeed. Tip: Pass XML data.
3. Async communication: For robust implementations, assume a non-reliable service between clients and Services. Use a message based implementation for interacting with Web Services. This will lead to long term success. Tip: This is specially applicable to legacy code integration. Build adapters to integrate with legacy applications in a messaging framework.
4. Log'em: While implementing services, always keep a log of the clients that access the service. The extent of the logging will depend on business needs, but some level of logging is mandatory.
5. Secure them: Build security at a message level, so requests can be identified (Digital Certificates), and messages are safe in transit(XML Encryption)
Some of these tips make the application less Object Oriented, but are critical to success of Web services applications.
Architecture Frameworks, how they relate to each other, and which one to use
· Extreme Programming:
Managing change, fast, effectively... but wait!!· SEI/CMM:
Well planned processes, knowledge flows so well... at what cost?· Zachman Framework:
WYSIWYG for all participants... well almost!· Model-driven architecture: Design and build separately... can it be done?· Rational Unified Process: Develop in Stages, each role knows its roles and deliverables... do they!!
These frameworks are all well known and each come with their advantages and issues. So which one should you use?
There is no one correct answer. If there was the others would have vanished by now. So here are some tips to help you drive successful projects
1. The reality is that you will use some combination of these frameworks for your projects.
2. The best idea is to make one framework as your primary basis, but take good practices from the other frameworks.
3. Different projects will have different needs, so some Frameworks will be less effective than others.
4. Keep the developers involved in the Architecture decisions, so the architecture principles are applied in the project!
5. Learn from Experience: Use the framework for a small application, to see if it translates well to the Organization's reality.
6. Diagrams are good, but nothing substitues the written text. Ensure that desciptions accompan y the design artifacts.
7. To some extent these frameworks address some different aspects of Software Architecture and development. CMM is repeatable process driven. RUP focuses on stages of Iterative software development. XP models good practices for Iterative projects. Zachman focuses on all project stages(concept to delivery) and artifacts applicable for different roles(Management, Business, Architect, developer). MDD Approaches modeling that separates the specification of system functionality from the specification of its implementation on a specific technology platformApplications suited for the various frameworks(Q&A format)
1. I have an Application that is being developed by a Outsourcing Vendor. The Application has 3 phases, and will be built in 10 months. The Outsourcing vendor is based out of California, and has development facilities in California, India and China. Which framework is best suited for my Application? My first reaction will be that the Outsourcing Vendor already has a framework that they are using. The most applicable framework for this application is CMM, with some elements of RUP and Zachman. But Why CMM?
because the actual owers have the least amount of control over the day-to-day operations of the application. So the least they will require is a process that is well documented, so issues can be addressed early. Secondly
, the application will take 9 months to build. Its enough time to forget most of the decisions that are made during inception.Caution:
Count some buffer for the overhead of building and reviewing the tons of documentation produced.Tip:
Carefully manage how much documentation you require, and how mature a process the Vendor has. I have seen many instances where vendors have a great CMM story on paper, but most of the artifacts they build are "Fluff".
2. I am building a website for my organization. They need to get something up very quickly, but want to extend the site to be a world-class site. So what should I use for this? Aha!! XP is your Nirvana.
Get up to speed quickly. Build a set of key diagrams on white-board and paper, to support that World-class site (JUST ON PAPER FOR NOW :-)). Mkae sure you have that top-class architect(with some additional help from someone). Build for change. Caution:
Be prepared to rebuild the first couple of Iterations of the project, and learn from the initial mistakes, to develop a modular, loosely coupled infrastructure that supports Change, Reusabilty and Iterative development.
3. We need to build a Workflow application that will change the way the organization does business. Today we have multiple applications that work independently, but don't interact with each other. Our employees are not the happiest users. Our customers are patient!! Help ? Use the 3 letter Acronym(RUP)
or its matured brother (UP). Why? Firstly, the Plan, Prototype, Build(Iteratively) and Transition Cycles are most appropriate for this style of application. Secondly, RUP delivers a excellent framework of best practices for teams needing the right balance of control(of processes) and speed(of project development).
What about the other frameworks? Well, Zachman and MDA in my experience are "helper" framework(s) which give certain useful aspects for the project team. Zachman has some excellent concepts for the Scope and business stages of the application. These are visibly missing from RUP.
MDD concepts are critical in building Specifications and Products. They are also applied in building loosely coupled and extensible Applications.
In Summary, each Architecture Framework has strengths and weaknesses, and address different aspects of Architecture. Typically, use one framework as the basis for the project, and use applicable artifacts from the other frameworks.