jump to navigation

Student Contributions March 9, 2012

Posted by Marquette MS Computing in Software Engineering.
add a comment

These comments on trends in software engineering were created by students in the Professional Seminar,  an integral part of the Master of Science in Computing program at Marquette University. In this seminar students analyze technical and professional writings  on current topics and publish their opinions. Visit marquette.edu/computing to find out more about the program.

Five Trends That Every Software Engineer Ought to Know February 21, 2012

Posted by downeyjm in Software Engineering.
add a comment

Software engineering is a relatively new field in engineering and thus it is constantly evolving.  This is a good thing as it means the processes and techniques used to create software are getting better, more reliable, and more robust every day.  With that these are five trends that I see having a significant impact on software engineering going forward.  They deal with a variety of different aspects from mobility to user interface to software processes and even to the legal and ethical issues involved with software.

Real Analytics

Real analytics is the processing of data in order to gain a better understanding of how what the vast amount of information businesses have is telling them.  This greatly affects the database theory in that the companies need to be able to store and access all their information and it affects modeling and analysis as they need to be able to sort through all the data.  The analysis needs to be able to provide them with any insights and/or dashboards to help the business make better decisions for the future so they are not just looking through the rearview mirror into the past.

Social Computing

Social computing is connecting people through technology mainly the internet.  This has a wide range of effects on software engineering starting with software design.  This is important because the networks and social sites need to be scalable as more and more people are using them.  The next is the human computer interface.  This is extremely important because of the fact social computing involves at least two people trying to communicate with each and the better that interface is the better ones ability to communicate is (and visa-versa).  This has some major societal impact as well.  This can especially be seen with younger people as more and more they communicate through these types of outlets rather than in person.  It also begs the question as to how much security is needed and what kind of ethical issues are there considering many people have lots of information about themselves on these types of platforms.

Applied Mobility

There is an “App for that” has become a household phrase and it’s not going to go away any time soon.  The ability for businesses to give their customers and workers the capability of accessing and performing tasks on their mobile devices is necessary in today’s world.  These apps have a great effect on software design as one will want to make the app portable in order to work on as many different platforms as it can with as little change as possible.  The next aspect is it needs to have a quality user interface in order to make it easier on the user.  This is especially important when using a smartphone with the much smaller screens then a computer would have. 

Capability Clouds

The cloud has many effects on software engineering but probably the most important has to do with the legal and ethical effects.  It presents a lot of issues in this regard because it usually involves someone or some business storing potentially valuable and private information with someone else.  The one providing the service has the responsibility to ensure that that data is kept safe and secure.  Even if a security breach doesn’t occur there is still the potential that the company could sell some information (not all or even most but some) to outside companies looking to gain some information (i.e. email addresses, phone numbers, preferences, etc.).

Software Ecosystems

Software ecosystems is just software product lines except that instead of the product lines being restricted to one company they are shared amongst a number of companies.  This could have a great impact on project management from the standpoint of being able to manage how the libraries are shared between companies and making sure no one recreates the wheel by creating a piece of software that had already been made by another company.  It also has the impact on software design because extra care needs to be taken so that each company follows the same standards so their software features/modules/pieces play nice together.  Then there are the legal issues involved with proprietary rights to the software and the product.

Five trends that every software engineer ought to know December 19, 2011

Posted by jeffrey.koch in Software Engineering.
add a comment

Software Engineering is the youngest discipline of Engineering and is still in its infancy. The age of the discipline has caused great changes and advances in the past 50 years. To be a successful Software Engineer one must continue to see what is currently considered best practices in Software Engineering and what is trending in the industry. Here are five trends that I believe are helping shape the future of Software Engineering:

Agile Software Programming

Agile software programming works on the premise of decreasing the time between development and release. It is in starch contrast to the waterfall method where every step of software development must be completed before the next phase of development is completed. Agile software development is rapid and can be utilized when software needs to be flexible and change quickly. For the agile method to work the development team will break the problem into small pieces and work to release small incremental changes.

The agile process needs collaboration between all facets of software development: requirement collection, requirement analysis, object design, implementation, and testing. The shorter time between requirement collection and release is thought to help reduce the cost of introducing fixing bugs because they are found at a faster pace than with more traditional software development paradigms.

DevOps

DevOps is the anchor between development, quality assurance, and technology operations. Having a group focused on combining all of these areas into a sole position allows for a company to have a more seamless development cycle. The theory behind the benefits is that the added communication between each group will help see problems between each group’s priorities and manage the releases of new software.

A shop that has a DevOps team utilizes a better transition from development to operations. If a shop utilizes agile it can just hand off the new prototype to operations while still having the “wall of confusion”. If a DevOps department is part of the organization the wall of confusion is not as apparent because the departments have a team that can scale that wall.

A shop that utilizes agile programming will benefit most from a DevOps team because it will be able to hash out the changes coming in releases. The more integrated the DevOps team is with the Operations and Development side the better the team will be able to manage their tasks.

Mobile Computing

The advent of powerful computing devices that are able to connect to the internet almost everywhere the user is has dramatically changed the landscape of software engineering. In the past most software was used as a monolithic program that runs on the person’s computer that utilizes x86 architecture. Mobile computing introduces many different hardware architecture types and changes in how the user interacts with the program. The output in most mobile application is also the input for the program. This change in user input makes the engineer develop the software.

The other leading issue that is needed to be discussed when it comes to Mobile Computing is the security threats that is introduced. Data is being sent over radio waves instead of cable. This makes the data more susceptible to intrusion and used for malice by the unwanted listener.  Securing the data transmitted over the mobile device needs to be at the forefront of design when developing mobile applications.

Real Analytics

There is a developing trend that is built upon the analysis of data, Real Analytics.  This process promotes the use of data mining to answer business questions of not only what happened in the past but what will and can happen in the future. The ability to utilize the data you have on your customers and help provide details on what can happen in the future is very crucial to the business operation. When tools are built to help answer these questions it will benefit the organization, because they will be able to focus time and energy in areas that could promote growth and avoid areas that are pit falls. In the past analytics relied heavily on past actions and not what was going to happen in the future. By building data structures that allow you to assess your data and build rules of it will enhance an organizations value.

The real diamond is to develop real-time analytics that are able to be accessed anytime with a good visualization. This can be used in audits, board meetings, and planning meetings. The engineer must understand what questions he wants to solve with the analytics and what questions are able to be solved with the data given.

Model Driven Software Engineering

Model Driven Engineering (MDE) is adding another level of abstraction in computer programming. This level of abstractions allows for the ability to develop code by modeling. Modeling is a crucial part in Object Oriented Software design, so if executable code can be developed from modeling an entire step will be removed from the process of building software.  The downfall for Model Drive Software Engineering is that there is an added cost to developing software with this level of abstraction. If one wanted to develop code that was the most efficient you would write it directly in machine language. This would give you complete control of how the system runs the code. With every level of abstractions adds overhead that will add unnecessary memory usage and speed slowdowns. Another pitfall is the problem of keeping the model and the source-code in sync, if a developer makes a change in the source the model will no longer represent what the software is accomplishing. Once MDE can make changes from Model to Source and Source to Model the advantage of it will be exponential.

5 trends that any aspiring Software Engineer should know about December 19, 2011

Posted by kbrendelmu in Software Engineering.
add a comment

Below are 5 Trends that any aspiring Software Engineer should know about:

Real Analytics

Company executives are more and more looking for real time analytics of complex business needs. They are often times looking for these analytics to be delivered and compiled quickly if not automatically. This is because the insights from all the data collected can be used to drive companies in certain directions or allow them to make important business decisions. Software engineers will need to stay current in this area and be planning on how to quickly bring analytics data to the user.

Social Computing

Social Computing is becoming the way for many organizations. I.T. departments are going to need to embrace adopting to things like document collaboration. Microsoft’s SharePoint is good example of an application that fits into Social Computing.  In addition companies are using social media sites to gain another voice to their customers and listen to their customers ideas and complaints directly. It is also important for organizations to develop guidelines and policies to protect themselves from information they may not want publicly available becoming so. Software engineers need to think when developing software to look to include some social computing functionality because that is what big business is looking for.

User Engagement

User Engagement is very important for the software development lifecycle. According to the DeLoitte 2011 Trends article business users today are typically connected to 8 systems every day. When the end user is switching between programs to accomplish their job anything done to reduce mouse clicks or access the needed information quicker can greatly improve their efficiency.  Software Engineers need to consider making the application Intuitive so that the user doesn’t need special training to figure out how to perform the basic functions. Software Engineers also need to learn what they end users common functions are and look into Interoperability between applications. Engineers also should consider portability because it allows for users to get access to functionality from their mobile devices.

Applied Mobility

Companies are realizing that today mobile computing is becoming commonplace with individuals. Users access much more information in 2011 then they ever have in the past with their mobile devices such as smartphones. As a result companies are seeing new marketing opportunities, and business opportunities that were not available to them before. Software developers need to plan for incorporating mobile applications, mobile websites or access to company information via mobile devices to stay competitive in today’s market.

Capatibility Clouds

Cloud computing has been a buzzword in the I.T. communities for a few years now. Concepts such as Software as a Service and virtualization are becoming more prevalent. Cloud computing gives organizations the ability to access unlimited computing power and storage. They can use cloud services permanently or for short-term projects. The key benefits are of course the ability to get tasks done quicker, cheaper or both. In addition the flexibility that cloud computing adds to data access can be used to improve user efficiency. Software Engineers need to explore opportunities to incorporate cloud functionality into their software where applicable. It is also important to look at the risks involved with cloud computing. Once you start storing your data in the cloud it is being stored on someone else’s servers, servers that you don’t control the security settings for. Cloud computing may not be the best spot to store critical company secrets or financial data.

Five trends that every software engineer should know December 19, 2011

Posted by bkrugman in Software Engineering.
add a comment

During the semester we looked at a variety of methodologies and trends that affect software engineering. While I am focusing on the trends that I feel are extremely important to software engineering the methodologies that we covered interaction and involvement within all of the trends that we looked at this semester. Software engineering is moving at a fast pace away from having separate roles within an IT team and combing those role to create more rounded engineers.

Visualization/Reporting:
Visualization of data points might be something that is more valuable to end users, but I believe that a software engineer should be bear in mind how the data from their application can be used and how it should be used. Part of the tasks of a software engineer is to not just focus on what needs to be delivered for a project to be successful, but to also think about how pieces and data that is generated from the project can help to steer and drive the business. Thinking about how the data will be used and reported on should play a large impact on the software engineer especially when he/she is performing data modeling, user validation, and any other aspect that has to do with ensuring that all of the data that is being consumed by the software is valid and beneficial.

Real Analytics:
The importance of a software engineer considering how the data will be used to perform any analytical analysis is another area that I think software engineers occasionally forget to consider. What makes this important is because analytics can be used for not only improving the overall business, but also improving the software development process. As a project is moving through each area within the life cycle project management is compiling data on how the project is going, what the burn rate is of time, is the software engineering team reaching there goals and other areas like that. While the software engineer might not have direct control over the data that is being compiled they need to think about what they can do to improve the results. This could be something as simple as working with deployment staff to make the deployment process smoother. Another thing could be to ensure strong documentation so new and current members can understand the path that the project is moving and be able to ramp up faster. Even though analytics can be used by the business to perform all sorts of analysis I think that software engineers need to take into considering what type of analytics might be applied during the software development process as well as ensuring the data integrity so the business is able to produce results that will meet there needs.

User Engagement:
Probably one of the most important trends that I think a software engineer needs to take into consideration and think about. A piece of software can be build as cheap as possible with as many features as someone wants, but if the user’s needs are not met the software is considered a failure within the business. This is why involving the user base through the entire software development process is extremely important and software engineers need to remember to do this constantly. It does not matter what methodology the software team is using user engagement is important in all of them. Even though some might not be as flexible if the user needs something changes having the software engineer getting the constant feedback will help them to produce a product that will be considered a success, because the user is able to have input. This is something that I think sometimes lacks in software engineering, because there needs to be some limits in what a user is able to change or want but by having constant user interaction the software engineer and team is able to manage not only the project but also the users expectations.

Cyber Intelligence:
If your data is not secured then it is able to be exposed by an ever-growing threat. As a software engineer you should always put securing application and business data at the top of your list for things to be considered during designing, building, testing and maintenance. However, building a system to not just secure the application and business data but to also allow for detection of potential threats and resolution of those threats needs to be considered. As a software engineer you might not always be involved in development practices. It is other practices like analysis of data, determining root causes of breaches and bugs, and working with network teams to develop new security protocols that can provide a software engineer to gain experience and develop a new way to think about new standards that a business should implement to protect them from potential outside threats.

CIO as a Revolutionary
As the IT department is starting to gain more and more ground within business. I think that the concept of a CIO as the person that pushes for business changes is something that is and will continue to affect software engineers. What is nice about this trend is in the past the IT department has been considered a necessity that has not always had direct input into the direction of businesses. However, since technology is becoming an integral part of everyday life businesses are starting to look more to the IT department to help with envisioning and deploying ways to reach a wider audience. This is where having a CIO behave as a revolutionary and push to change bad business and development practices for a more standardized and established approach can help to change a businesses entire culture. This is a trend that effects software engineering in more of an indirect way, but it is a trend that all software engineers should be willing to embrace and support.

Five Trends That Every Software Engineer Ought to Know December 18, 2011

Posted by mohammedsaati in Software Engineering.
add a comment

Five Trends That Every Software Engineer Ought to Know

Introduction

Through time, software engineers and developers have face and still facing technological advancements that keeps them wandering. What is the next trend that is going to put me on the map?

For this time there are many going trends that everyone has to give an attention to be considered as a contender to our ever growing market competition. These trends are:

  • Cloud computing.
  • Distributed file systems. GFS, Hadoop.
  • Agile Development.
  • Social Computing.
  • Mobile Computing.

Cloud Computing

What is the cloud? You keep hearing about everywhere with no valid point of what it is. You probably know it but not knowing that you actually know it. Wherever there is PowerPoint presentation and they show a diagram of some service and the internet is in that diagram, there is a symbol that always resembles the internet. It is the cloud.

Now that you can visualize it lets say that Cloud Computing means using the internet as your source of computing. That is done by achieving three main needs:

  1. Dynamism.
  2. Abstraction.
  3. Resource Sharing.

Dynamism

What we mean hear is that you probably are going to start small. So, you’d think that buying one server and 5 PC’s is going to be enough for your organization. What if it turns out you need more than that? You are probably going to get more resources. What if down the road you see that you don’t need that much? Are you going to sell some?

Hear where cloud computing comes into play. It is dynamic. You can increase your resources and increase them virtually for a price that is not as much as it would cost for physical resources.

Abstraction

You don’t need to worry about operating systems, apps, security or any other issues. You only focus on the product you are working on and development.

This is an ease of mind to all developers and users who need a hundred percent guarantee of resource availability.

Resource Sharing

Companies might find themselves using their systems at some time of the month. Other times systems are using low load of CPU or probably nothing noticeable at all.

In the accounting point of view this is a waste of a resource. Cloud computing shares resources so you don’t have to pay the high prices of physical systems and you pay for what you use.

Side Notes

Most enterprises use cloud computing for the purpose of publishing services. As a software engineer, it’s imperative to utilize such technology in any product that is in development.

Distributed file systems. GFS, Hadoop

It is the technology of storing high volume of data into commodity stations for the function of high speed retrieval of data and reliable storing.

GFS or Google File System is a technology that Google uses for storing files. Its main characteristics are storing the data in chunks (3 to be exact). These chunks are available redundantly for security and safety reasons. Other characteristic is a very high speed when recalling the data. Using any commodity computer is also an add effect.

Hadoop is also another open source from Apache instance that utilizes the same concept.

All vendors are competing over their ability to manage and process high volume of data. We are living in a time where data is being increased exponentially and our systems now can handle around a thousand times what it could 10 years ago. Using this architecture is a very sufficient way of handling this issue. As a software engineer, there is no doubt that exploring this concept is going to beneficial for software development in general.

Agile Development

Agile is an iterative and incremental (evolutionary) approach to software development which is performed in a highly collaborative manner with ‘just enough’ ceremony. Its focus is on minimizing risk by delivering new functionality in short timeframes, often measured in weeks. It is a “style” of working not a process or methodology.

There is usually a disagreement in enterprises when Agile is sought to be used. The high pace and no general conception of project timeline is what keep the project in the hands of the team of development. Nevertheless, Agile Development has proven its success in many situations.

As a developer, the need of being able to participate and embrace this method is highly practical for faster market delivery, adaptation to requirements change, problems and solving.

Social Computing

The social media are now the quintessential base of interaction in the world of internet. Everyone is using then on the daily bases. This article reports that 175 million people login to Facebook every day. To companies this is a foreseeable market that is sought. The companies who have integrated this aspect in their products have already gained their positive earnings as people share everything digitally by the word of mouth only.

Including this media as a feature for customers is sure to make customers happy and engulfed in an experience they are happy to try and invest in.

Mobile Computing

Now days everyone is holding a cellphone and being able to use whatever service is on the market is going to be judged upon or compared to other products by this factor.

One of the authors talked about Android. That is in fact is a big issue when a service is provided that it has to be available in the most recent and popular system in the market.

As this table shows, it is going to be imperative to be able to use it on one of the systems that are available and popular by users in the market.

Market Share:

mohammed.saati@gmail.com

Visualizations

Using the right schema of colors is very important to market the product. Not only that, but also finding the right design of the user interface is important as much.

Using touch screens is being one of the highest trends this year. So for a service to be touch-able service is going to score some points in the user market.

Five trends every software engineer ought to know December 18, 2011

Posted by pvidosa in Software Engineering.
add a comment

The readings this semester have allowed me to learn more about areas of software engineering that I knew little about or didn’t even know existed.  Below are five trends that I think will have a great impact on software engineering in the next few years.

Model-Driven Engineering

Model-driven engineering is a tool that could be extremely powerful for software development.  It would allow for development at a higher level.  It would eliminate writing code line-by-line by allowing the user to build it graphically instead.  This would still require someone with specific knowledge in the field, but they wouldn’t need to professional software developers.  There are legal implications when using model-driven engineering.  The software developed would be more difficult to test and there could be major quality issues that don’t end up being found before release.  This would be a huge liability for the software developer because depending on the application, it could be a risk to someone’s life.  However, the benefits are too great to ignore.  Applications could be built much quicker since you would be using pre-existing components.

Agile Development

A much more commonly used technique for software development is agile development.  Agile is an iterative cycle that looks to produce small pieces of functionality at the end of each iteration.  The result is that at the end of each cycle, there is a functioning application that could be released.  During each iteration, all the necessary work is done to make sure this bit of functionality is release ready.  This includes test, development and documentation.  It has become popular because of the back-and-forth communication that needs to exist between the developer and the customer.  The customer’s feedback drives development and their needs steer the direction the application takes.  Customers do not have to wait years before using the application and the business doesn’t have to wait that long to receive feedback.

Applied Mobility

The mobile application market has just started to take off and it is easy to see that it will be huge.  The competition in the marketplace is so great that tech giants such as Microsoft are having difficulties staying in it.  ProAce saw Android exploding in 2011 and they were right.  Sales of Android phones are greatly outpacing iPhone sales and Windows Phone 7 is nowhere in sight.  Android will likely continue to grow faster than the others, but Microsoft may be able to steal some of RIM’s market share.  I see more and more businesses putting more of a focus on their mobile applications to appeal to the younger crowd that uses smart phones more than their laptop or desktop.

Cloud Computing

Cloud computing is still in its infancy, but the possibilities for it are constantly growing.    I think the private cloud concept is interesting because of the goal for more data to be accessible anywhere.  Companies are pushing the cloud and giving users free access to it which will only cause it to grow even quicker.  Users want to be able to access their data from anywhere and this is a great solution.  The SideKick was an example of a mobile phone being completely dependent on the cloud.  As SideKick users saw, there could be some terrible consequences if it isn’t managed properly.  On the other end, businesses are looking at cloud computing to ease burdens on their IT department.  Microsoft seems to be making a huge push with Windows Azure and SkyDrive.  These tools could make it much cheaper for businesses to host and run their applications with high performance and reliability.

End User Programming

End user programming is something that is likely to become even more common.  Currently, most people that use computers don’t know anything about computer programming.  Most users simply browse the web at home and use a computer at work for various tasks.  As more individuals start doing more with computers, they will want to automate mundane and repetitive tasks that are quite time consuming.  This is where end user programming comes in.  It will allow the average user to automate complex tasks so that more focus can be put on the results and the quality of the results.  This can also benefit a business by helping improve productivity of the each employee.  The technology for this already exists, but the problem is making it easy to use and reliable.

Five trend that every software engineer ought to know December 17, 2011

Posted by rzmuedu in Software Engineering.
add a comment

Real Analytics

Information plays a critical role in the success of business. As businesses already saw the importance of information automation, the next step is real analytics of information. The information gathered by automation is huge. Without good analysis, the useful information for business growth is buried with noise and only real analytics can solve this. In order to do that, software programming faces the challenge to develop more sophisticated and more efficient algorithms to dig through large amount of information and extract useful data. This may also require redesign of software architecture. It also poses a challenge in managing large amount of information.

Social Computing

Teamwork is important in business. Therefore so is networking.  Social computing is the product of the development of internet and networking. This is sword has two sides of blades. It boosts communication and may be distraction to productivity. To better manage this trend, it requires the business to develop new processes and hierarchies to accommodate the rapid change and individual voice. For software programming, how to embed those new processes to better serve the business is the main task to conquer.

User engagement

No matter how good of a product, if no one appreciates it, it has no value. User engagement is one key to develop product that are attractive to user. It must be intuitive, integrated, portable, and proactively designed. As for software programming, it means users involvement or mindset starts from the very beginning. It will has its presents through the entire development lifecycle from design to implementation to testing and to release.

Applied Mobility

Mobile computing is another rising area in business. Mobile solutions provide extend coverage to existing products by placing a mobile veneer of existing offering. It covers transactional, analytical and social computing capabilities. This is a new challenge to software programming as it doesn’t fit in the traditional environment. It involves new design from operating system to application. Different design of simpler but still powerful UI. Distributed computing and more use of the powerful cloud are all new things to software programming.

Capability Clouds

The cloud is powerful. It uses the distributed computing concept to create large processing ability and provides service to different level of end users. The service can be as small as application and as large as operating system. It also greatly reduces the cost for new and small businesses. However, there are many risks in applying clouds in a business world. How to prevent different users’ information from leaking to other user? How to grant and monitor correct accessing rights? The powerful cloud brought many challenges to software programming. The design is no longer the same since end user only needs an interface and all the computing is performed at the cloud. Legal challenge is the most difficult to solve as it is so critic to business to protect their IP.

Five trends that every software engineer ought to know December 17, 2011

Posted by 3561martinr in Software Engineering.
add a comment

The following are several trends which software engineers should be familiar with to ensure their success and to remain relevant in the rapidly changing field of computer technology.

Big Data

An important trend covered in the Deloitte paper was that of real analytics. They mentioned that data volumes double every 14 months. For the software engineer, the problem is not how to come up with more data. The problem is how to find something useful in those big data sets using a reasonable amount of time and memory. To address these issues, software engineers need to have knowledge of parallel algorithms, data reduction techniques, and efficient data representations. Investing time learning about algorithms and techniques in these areas or implementing them would be useful if not just plain fun. Gaining familiarity with big data algorithm packages such as Apache Mahout, or Netezza through experimentation or just reading up on them could be beneficial should the opportunity arise where a big data set must be dealt with.

Mobility

Another key trend in software is that of mobility. This is evident by the popularity of devices such as smart phones, tablet computers, eReaders, motor vehicle systems, appliances, medical equipment and more. Users demand mobility so developers need to understand the fundamental challenges in designing for these types of devices. These limitations include limited memory, storage, displays, power, connectivity issues, and security. Even when developing non-mobile applications, designers should consider ways to facilitate an easy extension to the mobile market. One approach is to use design patterns which allow the easy addition of a mobile device view. Another consideration is for an organization to offer resource intensive procedures as a remote service to users with thin client devices.

Security

Security is not a new trend in software, but rather an evolving one. One of the most important aspects of security is that, like quality, it needs to be built into the design. This is difficult given the sheer number of the threats and that new threats arrive daily. Even so, designers need be educated on past, present and future security issues for the type of application to be developed. This knowledge should be used by requirements engineers, architects, designers, developers, and testers to evaluate designs and consider the security implications of all development decisions in an effort to limit vulnerabilities and mitigate risk.

Agile Development

Another trend which has been around for a few years is the use of agile development methods. Agile development is an iterative approach in which small teams complete a series of software life cycle executions each lasting just a few weeks. The result of each iteration is a working and fully tested executable software artifact. This gives the customer an opportunity to test the software at the end of each cycle to give feedback about what is correct, incorrect, missing, or misunderstood in terms of the their wants and needs.

One impact of the agile incremental process is the reduced likelihood of project failure. If there is a problem with the original requirements or if the customer’s needs suddenly change, the issues get dealt with early in the process and fixing them can be done in a matter of days or weeks. With other development methods, it may be months before issues are discovered at which point fixing them can be a monumental and expensive process.

Another impact of agile practices on software engineering is a much greater degree of transparency. Not just between the customer and the team, but within the team itself. Daily scrum meetings prevent hidden problems from sabotaging the project. Paired programming lowers the possibility of developers doing the wrong thing and promotes the sharing of knowledge among the team. Problems in areas like architecture of program design are more likely to be exposed early on allowing adequate time to address the problems.

Software Product Lines

Feature oriented software design and software product lines approaches may have a significant impact on software engineering. The paradigm forces software professionals to think in terms of designing sets of related systems as opposed to individual applications. This is a similar approach taken in many manufacturing businesses. When examining a domain, working on requirements engineering, and establishing an architecture and design for an application, developers should attempt to identify distinct units of functionality which may be used in multiple areas. If such features are identified, the development of feature sets and Software Product Lines (SPL) should be considered. By creating common components that multiple applications can use, different teams can share in the expense of their development which could reduce their overall cost and enable greater interoperability and the integration of many different devices. Furthermore, using the common platform created by these components will promote the combined use of systems in ways that otherwise may not have been possible. Look for opportunities to implement the FOSD and SPL approaches to keep costs down, and improve time-to-market while remaining competitive in your chosen market.

Five Principle Trends That Have Huge Impact In Software Engineering December 17, 2011

Posted by sayemmarquette in Software Engineering.
add a comment

There are several trends that has impact on software engineering. But, out of these trends I think impact of these five trends can bring a huge change in the world of software engineering technology. These trends are:

  • User engagement
  • Applied mobility
  • Pay attention to quality
  • Reliability
  • Real Analytics

User Engagement

User engagement is not something business executives naturally think about – and is decidedly absent from surveys depicting IT spend priorities. Yet it lies at the heart of how businesses can turn newly-connected consumers into new revenue channels, and how they can empower employees to better connect dots and improve efficiency and effectiveness. Continuous improvement can start from the end-user, the literal point of business impact. Enabling technologies are required for excellence in user engagement and they are easily available. Web x.0 tools, platforms and standards have reached a maturity to allow for bold investments. But the real impact rests in defining value, engaging users and enjoying the innovator’s whitespace which results. This part deals with the system integration from the software engineering topics.

Applied Mobility

The rise of mobile computing is staggering in sheer scale (5 billion subscribers by December 2010) and in its breadth of adoption – crossing age groups, economic classes and geographies1. Consumer interest in smartphones, tablets and untraditional connected devices such as set-top boxes, telematics, video games and embedded appliances is growing faster than with any other product segment, with a projected growth of 36% in the coming year2. Connectivity is nearly ubiquitous with today’s mobile computing infrastructure and will only improve with the widespread roll-out of 4G, LTE and WiMAX in primary markets, and the impending launch of 3G in India in 20113. As importantly, the mobile application (app) movement is fully underway, as traditional telephone service takes a back seat to messaging, email, media, social sites, games and productivity tools. As new devices find their way into the hands of business stakeholders, organizations are realizing how powerful a mobile presence at the edge of their enterprise can be. The underlying network, form factor, user interface (UI) and raw device computing power are necessary enablers, but what really matters is harnessing these features into rich yet simple and intuitive apps to solve real business problems. These solutions can be as simple as placing a mobile veneer over existing offerings and business processes – that is, conducting business as usual, but through channels untethered from physical locations. Think of nurses accessing electronic health records from their tablets instead of a stationary hub or nursing station; or of banks allowing customers to deposit checks anywhere by using their mobile phone cameras, resulting in customer convenience with the added benefit of off-loading processing tasks to the customer. These new mobile solutions serve the full spectrum of transactional, analytical and social computing capabilities. Accordingly, they may depart from traditional app design and deployment concepts. Focused in scope and simple in execution, if only from the user’s perspective, these apps have more in common with “applets” than with conventional multi-purpose feature-rich enterprise applications. This is precisely what makes them so powerful – they are elegant solutions to well-defi ned problems, and designed for operations on-the-go. The enterprise arms race has begun in these spaces and more – with big disruptions ahead for organizations that trail their competition. The changes may be even more dramatic. For example, companies are already rethinking business processes and enabling new business models that would not have been possible without mobile technology. Evolutions in location-based services, social networks, mobile payment processing, low-cost device add-ons and integration with enterprise systems has led to the potential for employees, customers and suppliers to consume and produce sophisticated information, goods and services from anywhere. And with the extension of mobile solutions to sensors and actuators in physical goods and equipment, otherwise known as asset intelligence or “the internet of things,” there is the potential for almost anything to become part of the mobile solution footprint. This will lead to entirely new business models like Zipcar’s disruption of car rental – and even ownership – models, or to the connected consumer driving purchase decisions based on immediate access to product alternatives, price comparisons, reviews, inventory levels and direct-purchase options. The trend is toward a future where everything will be digital and available anywhere at any time, and mobile devices will be the medium of consumption. Tapping into this trend presents the opportunity for organizations to define real and lasting value in applied mobility solutions. With the volume of smartphone shipments poised to overtake PC shipments by 201210 – and with connected, intelligent assets becoming prevalent, leading organizations have begun to aggressively establish their brands and services in the mobile world. According to a recent Deloitte study, more than half of Fortune 50 companies have a publically-available, customer-facing application or mobile-enabled Web page11. This growth will continue – notably as location-based services converge with cloud and social computing technologies, and as new consumer behaviors and expectations are established. Even more signifi cant is the potential for business enablement, specifi cally in how employees and partners interact. One mobility guru describes a not-so-distant future of continuous services and connected devices that fundamentally change the way we interact with each other – and with our corporate entities12. As we begin to separate from static, immobile computers and envision a world where business is increasingly conducted outside of cubicles and call centers, different business opportunities are born. Applied mobility is about rethinking business with an untethered mindset, innovating how the enterprise operates at the edge.

Pay attention to Quality

Software quality measurement is about quantifying to what extent a software or system possesses desirable characteristics. This can be performed through qualitative or quantitative means or a mix of both. In both cases, for each desirable characteristic, there are a set of measurable attributes the existence of which in a piece of software or system tend to be correlated and associated to this characteristic. For example, an attribute associated with portability is the number of target-dependent statements in a program. More precisely, using the Quality Function Deployment approach, these measurable attributes are the “Hows” that needs to be enforced to enable the “whats” in the Software Quality definition above.

The structure, classification and terminology of attributes and metrics applicable to software quality management have been derived or extracted from the ISO 9126-3 and the subsequent ISO 25000:2005 quality models. The main focus is on internal structural quality. Subcategories have been created to handle specific areas like business application architecture and technical characteristics such as data access and manipulation or the notion of transactions.

The dependence tree between software quality characteristics and their measurable attributes is represented in the diagram on the right, where each of the 5 characteristics that matter for the user (right) or owner of the business system depends on measurable attributes (left):

Application Architecture Practices

Coding Practices

Application Complexity

Documentation

Portability

Technical & Functional Volume

Reliability

Software permeates our daily life. There is probably no other human-made material which is more omnipresent than software in our modern society. It has become a crucial part of many aspects of society: home appliances, telecommunications, automobiles, airplanes, shopping, auditing, web teaching, personal entertainment, and so on. In particular, science and technology demand high-quality software for making improvements and breakthroughs. The size and complexity of software systems have grown dramatically during the past few decades, and the trend will certainly continue in the future. The data from industry show that the size of the software for Software reliability engineering is centered on a key attribute, software reliability, which is defined as the probability of failure-free software operation for a specified period of time in a specified environment. Among other attributes of software quality such as functionality, usability, capability, and maintainability, etc., software reliability is generally accepted as the major factor in software quality since it quantifies software failures, which can make a powerful system inoperative. Software reliability engineering (SRE) is therefore defined as the quantitative study of the operational behavior of software-based systems with respect to user requirements concerning reliability. As a proven technique, SRE has been adopted either as standard or as best current practice by more than 50 organizations in their software projects and report, including AT&T, Lucent, IBM, NASA, Microsoft, and many others in Europe, Asia, and North America. However, this number is still relatively small compared to the large amount of software producers in the world. Reliability falls in the category of software quality.

Real Analytics

Real-time analytics is the use of or the capacity to use, all available enterprise data and resources when they are needed. It consists of dynamic analysis and reporting, based on data entered into a system less than one minute before the actual time of use. Real-time analytics is also known as real-time data analytics, real-time data integration, and real-time intelligence. Complexity is growing, providing organizations with more data to manage, more decisions to make and less overall certainty. Some business problems are like puzzles, with pieces dispersed across internal and external players, captured in structured and unstructured forms. Competitive advantage will come from winning the race for clarity and precision, and from building the institutional skills to quickly solve the next puzzle that crosses your executives’ desks. Other business problems are mysteries, where the clues may or may not be within your grasp. These require empowered leaders who understand the business issue, who can work with specialized resources to model the problem and who have the analysis tools to recognize and act on patterns that might lead to the solution. Puzzles and mysteries are the purview of real analytics. Both start with a clear understanding of the business problem and a commitment to make the answer actionable once it is clear. Though the magic that happens in between is anything but simple, these two steps are the biggest factors to achieve effective results. Look in the mirror, state your intent for making analytics real, and start digging up your crunchiest questions. This topic helps in understanding interpersonal communication.

Five trends every software engineer should pay attention to! December 17, 2011

Posted by 8237mcraew in Software Engineering.
add a comment

Mobile Computing

In today’s global community the level of technical acumen has increased drastically over the last few years.  Even in some of the most impoverished places, people and even children are connecting to the internet and mobile devices.  A number of articles we read this semester addressed the whirlwind that is mobile computing.  I believe mobile computing to be the single most drastic impact on software engineering.  The explosion of mobile computing has impacts across so many aspects of Software Engineering.  Of course that aspects most affected are:

  1. User Interaction
  2. Analysis of Technical Requirements
  3. Software Verification and Validation
  4. Security and Information Management

Mobile devices operate across a wide variety of OS and chipsets, from IPhone to Android.  Yet, because of the nature of our mobile devices the expectation is instant and pain free integration across multiple adjacent platforms.  Not only does the business user expect to be able work from home, but the expectation is also to access “Big Data” from her or his mobile device.  In a survey conducted recently by Dresner Advisory services, illustrated how over 68% of people surveyed felt that mobile computing is critical or at least very important[3].  This is over a 16% increase from the previous year.

The gauntlet has been thrown down for mobile software designers to not only adequately identify what needs to be developed, but to ensure it works (the first time).  Due to, in some cases, hefty pricing and stiff competition, here is very little consumer patience for “buggy” mobile devices.  This places a heavy premium on high quality software verification, validation, and requirement analysis.

Additionally, Security and Information Management is becoming a greater concern.  As more and more consumers are connected and access sensitive information across mobile broadband networks, they expose themselves to greater threats of identity and financial theft .  Mobile security is a professional market that will provide great opportunities for years to come.  Lookout’s web based security services estimated that over one million dollars were stolen from Android phone users in 2011

Cloud Computing

With its “Almost-Enterprise Applications” cloud computing offers it’s consumers Software as a Service (SaaS), Platform as a Service (PaaS), and Infrastructure as a Service” (IaaS).  The flexibility and scope of the cloud allows consumers to leverage high powered services while minimizing the cost of maintaining servers and/or  backup servers reducing the cost of software transition.  This could have an immediate and widespread impact with regard to database management, systems integration, security, ethical, and in some cases legal concerns.

Due to the vast nature of the cloud, it offers the reality of a tailor made platform for “Big Data”.   Real analytics is discussed in detail by Deloitte [5].  Business owners are eager to utilize the vast data processing and warehousing capability of the cloud to shift Business Intelligence from being feeders for hindsight or at best near current business planning to predictive model building.  With the increase database capabilities, comes an even greater need for management of that data so that analysts do not become overwhelmed.

With all the capabilities that the cloud offers, there is a price.  Successful system integration is key for all cloud users, and so will need to become a priority for cloud application developers. Although it is improving, a lack of cloud wide standard protocols and an abundance of vendors have made it necessary for consumers to choose carefully in order to ensure products they purchase will be compatible with their legacy systems as well as their business partner’s.  Software designers and programmers must keep this in mind as they develop cloud friendly applications.

Security is also a concern for the cloud, as it is only as secure as its network.  Anything on a public cloud is at risk for data intrusion, although that risk maybe small. Because of this exposure certain industries are directly impacted ethically and legally, with little current legal guidance at this time. HIPPA constraints can make cloud functionality difficult for medical professionals, as well as other industries that deal with sensitive information.  The thought of your SSN floating around the cloud cannot be a pleasant thought for too many people. Again security in the cloud environment will be a critical piece for software engineers.

With it’s ever expanding growth and increased functionality across its capabilities the cloud is easily one of their greater impacts on software engineering and will continue to be for the foreseeable future.

Cyber Intelligence

One of the more significant trends impacting software engineering is the necessity for cyber intelligence.  With increased utilization of mobile and cloud applications, both personally and professionally, more and more sensitive information is being transmitted over networks.  Breach detection and active network security is a must going forward.

Security threats have continued to evolve with technology, and cyber intelligence must do the same.  Effective security requires a dedicated and holistic approach to information management. As discussed by Deloitte cyber security must focus on the following:

  1. Cyber intelligence: more sophisticated and full set of threat management tactics.
  2.  Cyber analytics: pattern detection across systems and networks and external threat analysis.
  3. Cyber forensics: tracking attacks back to their point of origin is moving beyond root cause.
  4. Cyber logistics: protecting against compromises in the value chain.

DevOps/Agile/ITIL Methodologies

The surge of the competing DevOps/ITIL/Agile methodologies is another significant difference maker in the software engineering community.  These three processes have taken the IT field by storm.  All three share similar characteristics, and all three have left a big impact .

DevOps can be characterized by the following methodologies:

  1. Use of agile and other development processes and methodologies
  2. Demand for an increased rate of production releases from application and business unit stakeholders
  3. Wide availability of virtualized and cloud infrastructure from internal and external providers
  4. Increased usage of data center automation and configuration management tools [6]

In comparison Agile holds to the following tenets:

  1. Small group. When no more than ten to fifteen people are on the project team, it is possible to maintain high-bandwidth, one-to-one communication. But this starts to become difficult when the team size exceeds twenty people. With smaller teams, no specialization of roles (analyst, designer, coder, tester), with handover of artifacts, is necessary.
  2. Co-location. Again, this allows high-bandwidth communication and synchronous communication between people.
  3. Customer availability. When the project team has direct access to the customer, it becomes easier for course corrections to be made periodically, thus rendering a better product at the end of the project. Better yet, your team has direct and continuous access to a good customer representative empowered to make decisions about the needs to be satisfied by the software under development.
  4. Business application. Agile development works better for business software projects in which interactive types of applications are being built. It works less well for other kinds of projects: for example, an embedded real-time system.
  5. New development. New software projects, often called “green field” projects, are better suited to agile methods than maintenance projects.
  6. RAD programming environment. Agility requires a rapid application development environment that allows fast turnaround from construction of code to testing and collective code ownership; ideally, development teams do daily builds and monthly delivery.
  7. Short lifecycle. Projects should not exceed a few months and ideally have a rapid internal loop (one day).
  8. Common culture. Vocabulary and an implicit process are shared, and individual developer practices rapidly align with each other.[7]

Finally, ITIL is a process driven function of the service lifecycle of information technology.

1. ITIL Service Strategy

2. ITIL Service Design

3. ITIL Service Transition

4. ITIL Service Operation

5. ITIL Continual Service Improvement

Together the triumvirate of DevOps, Agile, and ITIL has engaged the software engineering company in a positive way.  They all recognize good software development require involvement from all invested parties throughout the lifecycle of the product development.

System Ecosystem

The Software Ecosystem approach will impact programming fundamentals with its push for smaller teams working independently.  The Software Ecosystem advertises small teams, simple (“The three API rule”[1]), all with an eye towards quick turnaround on product development. Designs will emphasize and customer desirability and ease.  Instead of devoting all their time on just their own projects, workloads will often be spread across different teams, leading to more scrutiny and influence from other ”invested parties.”  I think the emphasis on simplicity and integrated workloads is a plus for the software design community as a whole.

Five Trends that Every Software Engineer Needs to Know December 16, 2011

Posted by davevankampen in Software Engineering.
add a comment

Software Product Lines
Software product lines probably bear the most potential for interesting legal issues coming up of all the topics discussed. Software product lines are all about developing a consistent look, feel, purpose, mission, etc. for a company or organization’s software offerings.
A good example of a software product line is the Apple Company’s products. They have a very consistent look and feel about them. They have a scheduled deployment method, where it grows and evolves as a group.
The software engineering fundamental that applies to software product lines is that of project management. Software product lines are about managing a product across multiple products. This is the only way you will be able to even get close to having an SPL. I listed this in my fundamentals of software engineering.
In addition, Deloitte mentions the importance of user engagement as a disruptive method within software engineering. Users, in general, prefer consistency. Once again, the brand consistency of the Apple and Mac lines deserves reference at this point. Most users do not really like change. They like improvement, and evolution, but not change. You can very effectively manage your user’s experience and engagement level with good software product line management.

DevOps (Emerging Process model and ITIL)
DevOps stands for “Development and operations.” It signifies the merging of the two business practices. Traditionally, these departments operate in a very “siloed” fashion. However, the DevOps movement is a push to integrate. It ensures that the software development people keep in mind the needs of the operations and deployment group. That is, it makes the development group a little more customer aware, while giving a voice to the operations people, and a clearer and easier channel for them to communicate through.
The DevOps topic really applies to almost every software engineering fundamental. There is really nothing about it that does not scream “best practice.” Specifically, however, I would say that it applies most to Software Integration, Maintainability, and quality. Like software product lines (discussed later), its about making the same job easier. It is about bridging the gap during the integration and deployment stage. So, I would say this definitely applies to the topics discussed this semester.

Feature Oriented Programming
One important feature of good software engineering that FOP and FOSD (feature oriented software development) meets is that of modularity and maintainability (an important element from my list of what defines good software engineering). FOP is all about analyzing the domain that the software product will be deployed in, and making the software modular enough to be used in multiple projects. Feature oriented programming has a lot of similarities with Object Oriented programming (OOP) which is also a very big and smart push in software engineering these days.
I think the aspect of software engineering that applies most to FOP is software maintainability. Designing for features is something that is (or at least could be) common to every single project out there today that is built using software. It just takes a new way of looking at it. Therefore, if you start looking at it that way, those features or aspects can be ported from one project to another in a much more human-understandable way. In addition, a product design in a feature-based way will be much easier to hand off or pass from one developer to another, since feature-based thinking comes a lot more naturally to people.

Software Ecosystems
A software ecosystem is a very interesting emerging topic in software engineering. Software ecosystems are all about integrating existing elements when you begin a project, and not having to develop everything from the ground up every time. A big feature of software ecosystems (as it was with software product lines) is the intra-organizational aspect of things.
Software ecosystems are all about taking software product lines one step further. It is about integrating software systems across divisions, departments, organizations, and even corporations. It takes different (working) and successful elements from their projects and makes them interact and interface in new ways to create bigger and better systems.
That being said, I feel that Project Management is the most important element when it comes to creating a solid software ecosystem. And not just project management, but business management at every level. It will take every party’s buy in for something like this to work, as it is a serious financial as well as legal investment. It is possible that a software ecosystem can be developed within a single organization, but they will work best when competing parties decide to work together on at least this aspect of it, and move forward from there.

End User Programming and End User Software Engineering
End user programming, of all the topics covered below, I feel has the potential for the greatest impact on the practice of software engineering. At first blush, it seems like it an example of the programmer being lazy. However, developing a program that uses EUP creatively, effectively, and without introducing many possible bugs is very difficult. When though about in relation to the topics in Deloitte’s paper, and those I mentioned in the initial “What is Software Engineering?” discussion post, I think the topics of safety, quality, and testing come to mind first and foremost.
These are all centralized on the topic of quality. Allowing the end user to do some programming means your program itself has to be extremely configurable and adaptable. And, the more adaptable a program is, the more it has to “be ready” for the user to do (maliciously, or accidentally). With this in mind, it is up to a good software engineer to test the program thoroughly, both on their own and by getting an independent party acting as the user to step in and poke around. They must exercise every aspect of the system as a user would to make sure they are no holes.

Five Trends to Understand and Better Your Software Engineering December 16, 2011

Posted by mattpassini in Software Engineering.
add a comment

Knowing where to put the semicolons and dereferencers is a prerequisite for software engineering.  However, knowing how to relate the entire gamut of software engineering to emerging trends will put you, your code, and your business ahead of the pack.  While new tools, methods, ideals, and management styles can ease the process, one must remember that the most valuable asset to engineering is the talent of the human resources.

The Big Three – Cloud Computing, Mobile Devices, and Social Networking

Although I consider the big three to be three separate trends, they are so interrelated and dependent upon each other that I feel they must be discussed together.  To start, cloud computing has been around since the dawn of networks.  Specifically, when the public internet was created, it did not take long for data to be stored on public facing servers.  Essentially, this was the start of cloud computing.  Like every technology, it has advanced and evolved immensely since that time.  Of course we continue to store data, such as email, documents, music, contacts, et cetera on the cloud.  However, the newest trend is to store processing power in the cloud.  The efficient sharing and utilization of hardware infrastructure between companies now allows for the entire information technology process to reside online.  It is essential for software engineers to understand not only how to write a program that utilizes data on the cloud, but how to design a system that can take advantage of the scalable and distributed nature of cloud computing.  However, one must not forget the large privacy and security issues that has slightly stunted cloud computing’s growth into many market segments.

Like cloud computing, mobile device use has been around for quite some time, although, it has only recently hit the era of exponential capability growth.  Mobile device manufacturers tried everything to decrease the size of devices and are just now realizing that it is not the smallness of the device, but the usefulness.  While the argument of native versus online apps is far too idiosyncratic to generalize, the greater concern is that users are able to effectively use your product on the go.  Ubiquitous and universal access to your system is no longer just a luxury, it is a necessity.  When engineering a system, one must consider how exactly users are going to require mobile and remote access.  It may call for the elegance and speed of a native app, or it may just be a mobile friendly version of a web based app.  Taking advantage of cloud computing is a foregone conclusion when engineering for mobile computing.

There is no doubt that social networking has also been around far before its modern day definition, yet, online social networking has fast become one of the only online activities for many users.  The companies and engineers who had the foresight to beat the pack with integrating social networking into products have reaped rewards far beyond their expectations.  Word of mouth is back, and any product that is not taking full advantage of the online word of mouth networking is losing out on invaluable chances.  Executives and marketing heads are desperately attempting to retrofit traditional ideas into the online social networking world.  Software engineers who are able to integrate networking into their products will succeed with unprecedented results.  The ability to properly integrate software with cloud computing, mobile devices, and social networking will be a highly sought skill few engineers have today.

Agile Development Featuring Scrum Methodology

Any engineer who has been a part of a failed waterfall approach, and has then been a part of a successful scrum project knows that the feeling is akin to switching from a Geo Metro to a Rolls Royce.  Quite frankly, the product owner feels the same way.  Agile development, specifically the scrum methodology, allows for large complex projects to be broken down into manageable compartmentalized features, and then solved systematically and iteratively.  A single scrum team is generally made up of less than 10 developers, with its own scrum master, or team lead.  The team works in sprints, which are generally a few weeks long and result in an actual working product.  Each sprint is broken down into tasks, prioritized, and then assigned.  Quick daily meetings allow for the entire team to understand any difficulties and cut them off before they become issues.  If a member falls behind in work, another member can easily help with a specific task.  The team lead keeps track of the hours allotted for each task, and how far each member is on each task.  This allows for a daily report of how far ahead or behind the team is.  Developers like working in this environment due to its fluid nature and the ability to track progress daily.  The product owners love the methodology because it provides a working product at the end of each sprint, or the ability to reexamine the scope early on if deadlines are not being met.

The Software Ecosystem

While specific trends, such as cloud computing, mobile devices, and social networks deserve their own segments, they all reside in what is becoming the software ecosystem.  Not too long ago, major software companies was quite secluded in that ideas, APIs, SDKs, and platforms were not shared with any other market players.  Each organization had its own unique infrastructure and internal ecosystem that was not to be spread or mixed with others.  Fast forward to today, the most successful companies are those that provide and share the most with the software ecosystem.  Looking at the big three noted above, it is hard to excel in any of those categories without taking place in the software ecosystem and using both hardware and software infrastructure provided by, at times, competing companies.   It is essential for software engineers to understand how to properly incorporate the larger software ecosystem into products.  However, if one is looking to truly revolutionize a product or market segment, one must not look to simply utilize the software ecosystem, one must create a large product others are then forced to use.   In other words, the most successful software does not just use the ecosystem, but provides a platform for which other software must then incorporate in order to compete.   Do not play the game, be the game.

Five Recent Trends that Every Software Engineer Ought To Know December 16, 2011

Posted by polyakd in Software Engineering.
add a comment

This semester’s seminar in computing has been a survey of trends effecting the field of software engineering.  While compiling my thoughts about the items discussed throughout the semester and the 2011 trends in Deloitte report for my final paper I recognize the following five elements as most important:

  1. Development Operations
  2. Software Product Lines
  3. Model-Driven Engineering
  4. Agile Development
  5. Applied Mobility
Development Operations
The overall goal of development operations is to align the goals of development teams, technology operations, and quality assurance.  Development Operations impact overall software design and project management to ensure project success throughout project lifecycle.  Of primary importance within an organization is to break down the walls between development and operations.  Too often problems occur because of communications barriers between the groups that hinders overall success of a project.  Both development and operations need to share a common goal; they need to be aligned in a way that is beneficial for the business.  When development and operations exist in a business as separate entities problems arise.
Software Product Lines

Software product lines are a very important trend in business management.  For a corporation it is important to develop a line of software components that can be extended into many products, expanding and ensuring software reusability.  As a new Software Engineer for GE Healthcare in the Magnetic Resonance division (MR) I can say that that product lines make tremendous development and business sense.  The team I work with develops the base software packages used by software development teams in the other imaging modalities.  From an overall business standpoint it is cheaper and more efficient to have one team develop central frameworks to be used and integrated by other teams working into products across all company imaging modalities.  This trend has a huge impact on overall software design because generic components can be reused and integrated into every system.  This also impacts overall verification and validation because the component integrated has been tested to perform in accordance to its specifications.

Model-Driven Engineering

In the future I believe Model-Driven engineering will continue to have a huge impact in software engineering.  Model-Driven engineering aids in practical development because it takes into account the domain the software will be used and allows engineers to tailor the modeling to the software’s specific domain.   This requires more initial resources (e.g., time, and money), but speeds up development and increases overall quality in the long run.  Model-Driven engineering in itself is a set of tools to help development.  As a BioComputer engineer I can see the value of Model-Driven engineering especially in embedded systems.  Model-Driven tools can help with overall embedded programming and help ensure quality.
Agile Development

Agile development is becoming an increasingly more common software development methodology.  However, what is interesting to me is the acceptance of agile development for large teams, large complex projects in large companies.  When interviewing with GE Healthcare I was please to learn of their use of agile development in their projects.  Agile development is just not a methodology I seen a company of nearly 300,000 individuals adapting.  However, it works, and can work very well for projects, teams, and businesses of any size.  As the paper, Architected Agile Solutions for Software-Reliant Systems points out, “There are no single one-size-fits-all process or product models that can be applied to the wide variety of systems needing to be addressed now and in the future” (http://csse.usc.edu/csse/TECHRPTS/2010/usc-csse-2010-516/usc-csse-2010-516.pdf).  The increasingly popular agile development trend requires a set of tools and systems that help with the process, and impacts software engineering through software design, management, and the software process.

Applied Mobility
The second to last trend in the 2011 Deloitte report is applied mobility.  This is a clear trend, and the role of mobile computing will only increase over the years.  In regards to mobility, it is necessary from a business standpoint to support either a mobile website, application, or both to you customers to increase overall usability and integration into todays mobile society.  Mobile computing requires many software techniques, including: programming fundamentals, software design, testing, human-computer interaction, and software process.

Five trends that every software engineer ought to know December 15, 2011

Posted by shuliuls in Software Engineering.
add a comment

Five trends that every software engineer ought to know—Shu Liu

End User Programming

Firstly, I think end user is the ultimate beneficiary of product and service. In general, end users have their own specific requirements or habits for products and services thus the end user programming is required and practical. In my opinion, end user programming is a concept and technology for end users to programming so they can get what they really need.

End user programming will have impact on programming tools because in most cases, end users are not professional programmers and they are not familiar with programming skills and end user programming needs specific tools for end users to add simple scripting programming languages to extend and adapt an existing application. Thus the cost of the tools is a significant challenge in end user programming. But on the other hand, a good tool allows many small experiments and becomes part of a style of working that is exploratory, iterative, and highly productive.

Model driven software engineering

I think MDE is a considerable approach for developers. The basic principle of MDE is–everything is a model, compared to the basic principle of object orientation–everything is an object. MDE is an open and integrative approach that embraces many other technologies. The goal MDE is to improve productivity. In the current complex development environment, with a growing diversity of systems and platforms, newly build software applications can’t be compatible with all existing and future systems.

MDE has several impacts on project management because it can help to increase productivity by reducing the software artifacts’ sensitivity for changes in personnel, requirements, development platforms and deployment platforms.

Software Product Lines

A software product line (SPL) is a set of software-intensive systems that share a common, managed set of features satisfying the specific needs of a particular market segment or mission and that are developed from a common set of core assets in a prescribed way.

Software product lines have important impact on implementation because it can help organizations overcome the problems caused by resource shortages. Organizations of all types and sizes have discovered that a product line strategy, when skillfully implemented, can produce many benefits—and ultimately give the organizations a competitive edge.

Agile development

Many of the individual principles and practices that are promoted by agile development have been around for years, even decades. As opposed to implementing these best practices piecemeal, agile methodologies have “packaged” various customer, management, and in some cases, engineering practices and principles together in a way that helps guide teams through the process of rapidly planning and delivering working, tested software. Each of the agile methodologies combines both old and new ideas into refinements that are certainly greater than the sums of their parts.

Agile development has good impact on design patterns because it has several advantages, such as: increased team efficiency, lower development costs, faster time to market, better quality software, systems better suited to customer needs, and repeatable results.

Capability Clouds

The hottest wave in the world of information technology now is the potential growth of cloud computing. The cloud computing is a new form to visit data from anywhere of the world. The main advantage of such a technology is that it frees individuals from their desktop and allows them to access their data anywhere and anytime.

In my opinion, capability clouds will have a major impact on the mobile world is due to the popularity of mobile applications on different devices. With the emergence of the Smartphone, the mobile operators are being gradually cut out of the value added services space with most of the revenues shifting to rest of the ecosystem. Mobile cloud computing provides an opportunity to leverage their network infrastructure assets and their consumer relationships to open up new revenue streams.

Five Business Intelligence Trends that Every Software Engineer Ought to Know December 15, 2011

Posted by kirbyr in Software Engineering.
add a comment

So what does business intelligence have to do with software engineering?  It is important to keep your user’s needs in mind when designing software.  The end-user of your software products is the business community.  A topic on the mind of many business users is business intelligence, which includes reporting and analytics.  Below, I discuss five current trends in business intelligence that you need to know.

Unstructured Data

Look at big Internet companies like Facebook or Amazon if you are interested in how to use and store unstructured data.  What are they doing with all of the Facebook posts and online book reviews and comments?  Storing them and using the information to improve their businesses.  You can bet that Amazon analyzes the content of book reviews to improve book recommendations.  Soon your company will want to do this too.

Unstructured data brings its own challenges, first in storage and then in retrieval.  New technologies such as Google File Systems or Hadoop are filling the gap in the marketplace for storage solutions for unstructured data.  But once you have the data stored, how do you access it effectively?  This is a question that software engineers must consider in order to effectively use unstructured data in the future.

Visualization

Your business users love visualizations!  They will jump at the chance to incorporate improved visualizations such as charts or maps into their reports.  To really spice things up, add an interactive component, such as dynamic pivot tables or charts.   (If you are interested in this, check out the free Excel 2010 Power Pivot add-on.)

Visualizations come with a cost, though.  They often require extensive knowledge of the source data, plus expert knowledge of the reporting tool.  Software engineers can bridge this gap by incorporating end-user programming solutions into their products.  For example, provide end-users with a GUI tool wizard to help them design their graphic.  End-user programming is a great way to make visualization tools accessible to the business community.

Real Analytics

Business users are looking for insights from the data that businesses collect.  They want to analyze huge volumes of information to find new patterns that will inform business decisions.  And did I mention they want this done quickly?  Business users are no longer content to wait for such analysis, much less for a static report.

Software engineers will need to be innovative and creative to meet the increased demands of real analytics.  You will need to keep up with advances in data storage, data mining algorithms and techniques, and the needs of your business users.

Cloud Computing

Storing information on the cloud offers many advantages that will interest business users.  The cost for storage can be cheaper, plus there are no maintenance costs for your own organization.  Access may be easier for remote or traveling users, as most cloud solutions are offered over the Internet.  But cloud computing also has its downsides.  The biggest is security and privacy, and this is an important concern to consider.  When considering the issue of cloud computing, think about the following questions.  How secure is data stored on the cloud?  Who can access that data?  Has your vendor had security incidents?  How were the incidents resolved?

As a software engineer, you may need to use source data stored on a cloud computing application.  It is vital to know the risks and benefits of the cloud so you can use the technology appropriately.

Almost-Enterprise Applications

Like it or not, business users will circumvent IT and purchase software solutions on their own, or download products for free off of the Internet.  Imagine an enterprising business user hearing about the cloud, or a new analytics tool, and purchasing this service after a little investigation.  Does this sound like a familiar scenario?

Almost-enterprise applications are a big risk for the IT department and organization. IT needs to monitor the usage of almost-enterprise solutions carefully, to ensure that such products are used safely by the business community.  This can’t happen unless IT knows what applications business users are interested in.  So get out there and talk to your business users, or spend some time investigating applications on the Internet. You might be surprised at the results you find.


Five latest trends that every software engineer ought to know December 15, 2011

Posted by Sapna Sumanth in Software Engineering.
add a comment

It’s fascinating to know and learn about how new trends in software engineering is emerging. The following are the 5 trends that I feel is very important that every software engineer ought to know.

  1. DevOps
  2. Agile Development Methodology
  3. Project Management
  4. Software Development Process
  5. Cloud Computing/Mobile Computing

1. Devops

DevOps is a huge shift in the current industry. According to Wikipedia.org, DevOps “is a set of processes, methods and systems for communication, collaboration and integration between departments for Development (Applications/Software Engineering), Technology Operations and Quality Assurance (QA).”

DevOps is basically about people, particularly developers and operations. DevOps is a way of working. The idea behind DevOps is that, if Dev & Ops work together from the early stages of the project, then the boundaries between the teams are reduced and also obtain a one-team feel. It’s about the culture of trust and a feeling of fellowship among different teams in an organization. Through DevOps, every part of the development process becomes visible to everyone, including operations, involved in the project. Hence if there are any changes introduced, everyone gets the visibility of the change and if there are risks associated, it allows everyone to collaborate efficiently.

DevOps also emphasizes the use Automation, which minimizes the human errors. For example, automating deployment, eliminating human errors that could occur in manual deployments. Manual deployments can get repetitive, expensive and also demanding (E.g. time consuming, exhilarating, involves late night builds etc.) Hence automating the deployments, allows the people involved in manual deployments to concentrate on other higher value activities.

It’s good to follow DevOps in any organization irrespective of their development practice as DevOps encourages good communication between development and operations team, which would result in smooth deployment & hence better service to the customer.

2. Agile Development Methodology

Agile is a time-boxed software development methodology that focuses on delivering quality software using iterative incremental approach. “Agile is a culture and
 not a process”

In recent years, many organizations have adopted Agile development methods and have been successful in delivering many quality products to the customers. Agile methods can accommodate frequently changing requirements as opposed to traditional methods; they reduce development time, they produce quality products and thus providing high customer satisfaction. Examples to Agile methods include feature driven development, extreme programming, test driven development, dynamic system driven development, lean software development, crystal development etc. Agile Manifesto (Agile Alliance 2001) set out the central elements of agility. “We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to values:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

That is, while there is value in the items on the right , we have the items on the left more.” [agilealliance.org]

3. Project Management

“Scrum is an iterative, incremental framework for project management often seen in agile software development, a type of software engineering”

As a process framework, scrum is used to manage complex projects. The framework consists of scrum teams and associated roles, meetings, artifacts & rules.

The term sprint refers to a time-box, during which shippable/releasable product is developed. The Sprint period typically varies between 2 to 4 weeks which may be referred to as a cycle. This way the product is developed in an iterative and incremental manner.

At the beginning of each sprint, the work to be performed during that sprint is planned in a meeting called Sprint Planning. There will be daily scrum/stand-up meetings, to create a plan for the work to be done for that day. At the end of the sprint, there will be Sprint Review meeting in order to review the work that was completed and not completed. Finally there will be sprint Retrospective meeting, during which main focus would be on learning the mistakes from the previous sprint and making appropriate improvements to it.

When it comes to Artifacts, we have Product Backlog, which contains a list of all the tasks that must be accomplished through out the project. And then we have Sprint Backlog, which contains a list of all the tasks that should be done, during a particular sprint. A burn down chart, which is updated on a daily basis, is used to indicate the progress of the sprint by showing the remaining work to be done in a particular sprint.

Speaking of Roles, we have Scrum master, who is responsible for handling the entire scrum process. The Product backlog is maintained by the Product Owner, who is responsible for creating user stories, assigning priority and business value for each user story, in the product backlog.

4. Software Development Process

I would like to take this opportunity to introduce the concept of Test Driven Development. Test Driven Development (TDD) is a design technique that drives the development process through testing.

Key Drivers to adopt TDD:

  1. TDD produces high quality code. Developers test the functionality themselves by writing the test first and then the code. Once the test is passed it allows them to refactor the code. Refactoring cleans up the existing code without changing its external behavior. It aids in improving the non-functional attributes of the software.
  2. Developers must focus on clearly understanding the requirements first, before writing the code rather than writing the code & then doing unit testing. Clear understanding of requirements helps developers make changes with confidence.
  3. High scope for test automation, which aids in retesting the system every time a new feature is added and making sure the existing functionality is not broken & the current test, passes. Automation tools can also be used for code refactoring.
  4. Testing time reduces due to the use of automation, as compared to manually testing, although this is still required for testing non-functional requirements.
  5. By using a version control system, it reduces debugging time if a previously passed test fails unexpectedly, by reverting the code to the previous version.
  6. Tests return in the form of user stories, use cases etc. can replace writing separate requirements documents as they themselves serve as requirements document. This reduces the time & effort in producing such documents and helps in easy maintenance.

I believe there is a strong correlation between product quality and TDD, because TDD tends to implement smaller, simpler solutions, with less lines of code overall, thereby yielding better code quality.

 5. Cloud Computing

 The term cloud computing has become a buzzword in the recent days.

“Cloud computing is a computing paradigm in which tasks are assigned to a combination of connections, software and services accessed over a network. This network of servers and connections is collectively known as “the cloud.” Computing at the scale of the cloud allows users to access supercomputer-level power. Using a thin client or other access point, like an iPhone, BlackBerry or laptop, users can reach into the cloud for resources, as they need them. For this reason, cloud computing has also been described as “on-demand computing”. ”

Cloud may mean different things to different people. Some may feel that it is a way of describing IT “Outsourcing”; or as any computing service provided over the Internet or a similar network; or any bought-in computer service you use which sits outside your firewall.

Cloud computing in simple terms means a virtual hard drive that’s accessible by a network of computers. For Example, when more and more people start accessing a particular website that is hosted on a we server, the service may slow down when traffic is more, also it costs more to keep the service running, requires a lot of time to set it up in the first place and finally the service has to be maintained always even when the traffic is less. On the other hand, with cloud computing, when more computing power is required it is achieved instantly through the cloud and when it is not required, it can be released back to the cloud.

Mobile Computing

Mobile computing devices are becoming smaller and more powerful than their predecessors. The mobile computing industry has witnessed a rapid growth in the recent years due to the high demand for mobile computing devices.

It refers to the use of any kind of a computing device, which is usually small and portable, in a moving environment. Examples include, hand held devices like laptops, mobile phones, PDA’s etc. One of the important requirements is having wireless network in order to support mobility and handoff from one network to the other, based on the pedestrian or vehicular speed. It aims to provide network infrastructure and terminal capability to perform all desktop like computing functionalities even when the terminal is moving, at any place or time.

-Sapna Sumanth

Five trends that every software engineer ought to know December 14, 2011

Posted by marlingod in Software Engineering.
add a comment

            Social Computing:

According to Deloitte report business IT report: “Social computing-not just media, collaboration or social networking-it  is a new fundamentals for enterprise for IT”. For example Companies are using collaboration suite(such as share point) to increase the efficiency of multi-disciplines team. Also companies are trying to find to use the Voice of Internet like social network (Facebook, twitter) and blog to gather data about customers and better ways to reach them. One of the leading tool is SAP Developer Network SDN. “In addition to promoting customer satisfaction levels and engaging with its ecosystem of developers and implementers, SAP has used this platform to understand product issues, identify features for future releases and gain a clearer view of adoption patterns than traditional research could ever provide.” Deloitte on Technology

            Cloud Computing:

Cloud Computing has sudden become a very popular term, even though it has exist for couple years now. According to Wiki “Cloud computing provides computation, software, data access, and storage services that do not require end-user knowledge of the physical location and configuration of the system that delivers the services”. It is mainly focused on the Software As A Service (SAAS). The SAAS has increased significantly in recent years: According to a Gartner Group estimate, SaaS sales in 2010 have reached $10B, and are projected to increase to $12.1b in 2011, up 20.7% from 2010. Gartner Group estimates that SaaS revenue will be more than double its 2010 numbers by 2015 and reach a projected $21.3b. This evolution of the SAAS has revived other area of the Business application such ERP. According to Deloitte, SAP recently a 34% surge in licensing revenue at the end of 2010. “ERP can be enabler of tomorrow’s innovations, not a fading footnote of yesterday’s legacy”

 

            Big Analytics

The crunchy questions haunting the business require a combination of hindsight, foresight and insight. This is the essence of real analytics: delivering business value through the continuous build-out of core information disciplines. Real analytics is focused on a more holistic, forward-looking approach, positioning information as an asset to support effective business decision and action. Real Analytics can add knowledge, fact-based predictions and business prescriptions – but only if applied to the right problems, and only if the resulting insight is pushed into action. Companies should be able house both ERP and BI/DW to enhance the their insight and foresight ERP. Providers have invested in adding information platforms to their solution sets, including performance management and some advanced analytics tools. These are largely integrated into the core process automation solutions. Leading organizations have adopted a combination of performance improvement, information management and advanced analytics to meet the needs of the business. A combination of improvement in storage, processing and network performance, as well as advanced new options for dealing with complex calculations on large data sets Real analytics represents a combination of information management, performance improvement and advanced analytics.

 

User engagements

Today  workers are usually dependent on an average of six systems to do their jobs and little tolerance for difficulty with them. This requires creating a seamless, controlled experience for employees to perform business tasks on their second and third screens.  Usability becomes a cornerstone of design, represented by

  • Intuitiveness. Simple, easy-to-understand, following consumer-design conventions for layout and flow.
  •  Interoperability: Tasks and business processes usually require transactions performed across many systems
  •  Related to interoperability, the ability to correlate and expose relationships in information

 

User engagement can enable productivity gains, but that’s not the only goal. Effectiveness and empowerment are even more important, allowing stakeholders to make better use of an organization’s information assets.

Semantic web

Berners Lee,(1998). The semantic web will allow not only the human-human communication but also interaction between machines. Semantics web describes relation between thing and the properties if things. There will be no barriers between application and machines should be able to communicate.  The semantics should be able to help solve one big concern companies are facing today: Data volume. Data Volumes is exploding doubling every 14 months (Deloitte on Technology). Company are facing with the unique need of analyzing the data in order to achieve profitable grow( better hindsight, foresight and insight), satisfy the requirement of the of regulators and the public. A lot of mathematical and statistical tools and skills will be needed.

 

Five technology trends that every software engineer ought to know December 13, 2011

Posted by 9672nayyarm in Software Engineering.
add a comment

For a software engineer it is extremely important to keep himself/herself up to date with the emerging technologies, software development methodologies and trends. The field of software engineering is vast and it is not always easy for an individual to learn every new technology and live a normal live simultaneously. Therefore, it is important to be aware of the current technology trends and pick the ones for research and exploration that may have most impact on software engineering in the years to come.

In this blog I have picked the top 5 technologies trends of present time that I feel every software engineer must be aware of and explore, these are:

Technologies around big data (Hadoop, Hive, MapReduce)

Data growth is exponential, today we are creating data at much higher speed than we used to 10 years ago. In the last 10 years we have generated other non-conventional data such as emails, text documents, pictures, videos, text messages, context-aware data, computer logs, social networking, internet data (web analytics), data from industrial sensors and satellites etc.  According to Gartner, business and technologist are realizing that there is more potential value in evaluating other types of data, some that currently exists in the enterprise but companies never analyzed it or looked for patterns and some data from sources like social media and mobile devices.

MapReduce, Hadoop and Hive are exciting new paradigms for designing and developing distributed and parallel applications to handle large volume of datasets. These are emerging technologies to support big data, there are lots of opportunities to build big data solutions using these technologies. There is a need to understand their potential value and explore how to design big data solutions and making the best use of Hadoop, Hive and MapReduce.

Cloud based technologies

Cloud computing is continuously growing and becoming a new computing paradigm of great interest to software engineers and at the same time posing technological challenges to them. In the years to come we anticipate more formal software engineering processes to evolve around this paradigm specifically addressing issues like security, privacy, scalability, collaboration, performance, reliability and availability.

For a software engineer it is important to be knowledgeable about the trends and technologies around cloud based solutions. Mobile cloud, cloud-to-cloud integration, security and privacy solutions for mobile cloud or cloud in general are some of the areas where significant research opportunities are available.

Software Product Lines (SPL)

Software product lines (SPL) is a software engineering technique to develop product lines of similar software systems based on reuse of the software architecture and of the software components. The concept of developing software products from reusable parts is not new but because of the recent advance in SPL field the technique is becoming popular and has proved improvement in developing faster, cheaper and quality software product lines.

As SPL are emerging as a viable and important development paradigm I would emphasis software engineers to exploit the research opportunities around it.

Agile Methods &  Concepts

Agile development methodologies are becoming more and more matured and it is almost essential for every software engineer to be well aware of all of these methodologies. Agile concepts are also being used in trends like DevOps, cloud computing and mobile computing. Some of the agile methodologies that a software engineer should know are,

Mobile Computing

Today information is available almost everywhere and accessible at any time. Businesses and consumers now increasingly rely on mobile devices like smartphones and tablets. Location-based services, social networks, mobile payment processing, integration with enterprise systems, and lots of consumer based applications have made it possible for customers, suppliers and corporate employees to get their needed services and goods from anywhere at any time.  The use of sensor technology in mobile devices is another hot trend that may have a huge impact on our lives in the years to come.

Mobile computing is hot and will remain hot in the years to come, there will be lot of opportunities in researching and developing sensor based solutions, also a lot needs to be done to ensure the security and privacy around mobile solutions, I would emphasis that a software engineer must be at least aware of the technologies and tools being used in mobile computing.

Five latest trends in software engineering that every software engineer ought to know December 13, 2011

Posted by janettheresjohn in Software Engineering.
add a comment

The following are the five latest trends in software engineering that every software engineer ought to know.

Agile Software development

Systems are becoming increasingly reliant on software due to needs for rapid fielding of interoperability, net-centricity, and rapid adaptation to change. The need for rapid adaptation and releases led to increased interest in agile methods of software development.

Agile methods break tasks into small increments with minimal planning and do not directly involve long-term planning. Iterations are short time frames (time boxes) that typically last from one to four weeks. Each iteration involves a team working through a full software development cycle, including planning, requirements analysis, design, coding, unit testing, and acceptance testing when a working product is demonstrated to stakeholders. This minimizes overall risk and allows the project to adapt to changes quickly. Stakeholders produce documentation as required. Iteration might not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of iteration. Multiple iterations might be required to release a product or new features.

Team is usually cross-functional and self-organizing and members take responsibility for tasks that deliver the functionality iteration requires. They decide individually how to meet iteration’s requirements.

Agile methods emphasize face-to-face communication over written documents when the team is all in the same location. Team size is typically small (5-9 people) to simplify team communication and team collaboration. Larger development efforts can be delivered by multiple teams working toward a common goal or on different parts of an effort. This might require a coordination of priorities across teams.

In team meetings team members report to each other what they did the previous day, what they intend to do today, and what their roadblocks are. This face-to-face communication exposes problems as they arise. Agile development emphasizes working software as the primary measure of progress. This, combined with the preference for face-to-face communication, produces less written documentation than other methods. The agile method encourages stakeholders to prioritize “wants” with other iteration outcomes, based exclusively on business value perceived at the beginning of the iteration (also known as value-driven).

Project Management

Approaches like Scrum and XP accelerate project cycles require developers to interact with their managers more frequently but for shorter periods as daily contact is the norm in most agile processes. Many developers might feel that it is micromanagement and so project managers should try to help solving any obstacles quickly and not complain if a task takes too long without knowing the reason for it. Also since we take small portions of requirements at a time to work on there could be possible chance of development that could take longer time than expected causing a delay in delivery or release dates. Project managers should be able to convince upper management that the process would get completed on time even-though it looks like in Agile methodology project will go on and on forever.

Real Analytics

Many organizations began to see information automation outweigh business process automation as their highest priority area. Analytics offer improved visibility to drive operational efficiencies, as well as a platform for growth by addressing heart-of the-business questions that could guide decisions, yield new insights and help predict the future of business. Leading organizations are launching broad initiatives with executive-level sponsorship, ready and eager to achieve their vision via real analytics. Due to exploding data volumes and regulators demands deeper insight into risks, exposure and public responsiveness are much needed.

By investing in a balance of information management, performance management and advanced analytics, organizations can make small steps, smartly made to capture measurable results. Real analytics can provide knowledge, fact-based predictions and business prescriptions if applied to the right problems, and if the suggestions based on results are pushed into action.

Information Management (DB Theory)

Tools for establishing trusted foundational data are essential which include master data management for maintaining data correlation, consistency of semantic meaning, providing matching services to identify and link identical entities and enabling bidirectional updates across systems of record. Data quality is also a concern, requiring tools to monitor, analyze, report and scrub.

Applied Mobility

In today’s age of technology what really matter is harnessing available networks, form factor, user interface and raw device computing power to create rich yet simple and intuitive apps to solve real business problems. These solutions can be as simple as placing a mobile layer over existing offerings and business processes which conducts business as usual, but through channels independent of physical locations. These new mobile solutions serve the full spectrum of transactional, analytical and social computing capabilities that are having different design and deployment concepts which is more focused in scope and simple in execution from user perspective compared to multipurpose feature-rich enterprise applications.

The Mobile applications are essentially powerful that they are elegant solutions to well-defined problems, and designed for operations on-the-go. Companies are rethinking business processes and enabling new business models that would not have been possible without mobile technology. Evolutions in location-based services, social networks, mobile payment processing, low-cost device add-ons and integration with enterprise systems has led to the potential for employees, customers and suppliers to consume and produce sophisticated information, goods and services from anywhere. And with the extension of mobile solutions to sensors and actuators in physical goods and equipment, otherwise known as asset intelligence there is the potential for almost anything to become part of the mobile solution footprint.

Security and Ethics

Password protection, encryption, controlling device administrative rights (system settings, permissions to directly install applications) and managing entitlements to back-end services must be implemented to provide a secure data access path to prevent unauthorized access from unknown and known sources.

Capability Clouds

Capability clouds move beyond the building blocks of capacity to deliver finished services that directly address business objectives and enterprise goals. Instead of dealing with machine images or database instances, the discussion shifts to the analytics cloud, the testing cloud or the sales cloud and help to focus on a more important set of values. Also with the advent of capability clouds helps focusing on accelerating time-to-results, adding new functionality or changing business processes and business models rather than cost of ownership and efficiency issues. It is relatively easy for a business unit leader to buy a software-as-a-service tool for point solutions such as workforce planning or compensation management; the main requirement is simply a corporate credit card.
There have been three main drivers of cloud adoption thus far: a preference for operating expense over capital expense; speed to solution; and flexible, scalable access to specialized resources – be they technology, software or people. The capability cloud can add opportunities for agility and innovation in how business processes even business models are acquired composed and revised. For an example the analytics cloud may go beyond just delivering analytics databases, models and tools and offer PHD-level statisticians applying the art of the science where you only pay for the level of service that is needed.

Information (DB Theory) Management

In the case of global company’s local data storage, privacy and protection regulations are critical concerns solutions need to be determined to store data physically at local restricted locations and should be made accessible to the sources depending on type of business involved across the globe. There should be information semantics, context and correlation among data present in enterprise and the cloud offering.

Social Computing

Everyone has started going online for their daily needs and hence we are leaving the trails our opinion, behavior and choices. The data of traces created when mined would provide business with a good source of insight on market positioning, consumer sentiment and employee productivity. By performing analytical operation on the data organizations can better understand their customer needs, preferences, their employee’s experiences and problems that require immediate co-corporate attention. With the help of Social computing Businesses are able to take a results oriented and business-led approach, focusing on specific issues and communities, soliciting membership and creating platforms for content, collaboration and transactional support.

Software Process

Social computing systems should be able to access the existing mobile functions such as e-mail, messages, knowledge and content management solutions and access to transactional applications and information systems. Combination of data, service, event-based integration and mechanisms for interacting with externally hosted platforms capabilities needs to be made a part of Software process.

Information Management (DB Theory)

There is a potential risk for the security and privacy when someone is constantly monitoring and tracking the change of habits and interests. There should be better and secure management of personal data so that it won’t be accessible by anti-social people or hacking communities.

Ethics

Systems are capable of understanding a person’s taste and requirements. That doesn’t mean that he should be provided with only that things that he could see based on his past behavior. He should be able to access things that are available to anyone not something that is given to him by some one based on his past behavior and choice.

Five Trends that Every Software Engineer Ought To Know December 12, 2011

Posted by daleklein in Software Engineering.
add a comment

After looking over numerous articles over the last four months here are five trends or practices that software engineers should keep their eyes on as we move forward into 2012.

Cloud computing is nothing new but continues to grow in popularity.  The thing to be aware of is Enterprise software beginning to migrate to the cloud.  More serious platforms should begin making a move in this direction.  You will probably see an option of cloud base or on-premise deployment for application platforms.  I just hope someone can create some better security solutions.

Again a product of the cloud along with third-party services is service level agreements (SLA).  If you have a good SLA it help the interaction between IT vendors and service providers.  Oddly enough, if you have not heard of ITIL v3 check it out.  Service level agreements are part of its make-up.  This is the primary interface with your customer as opposed to the user that is serviced by the service desk.

Regardless what trend you are looking at it tends to translate into a sea of data for many business organizations.  According to TDWI Research, in a report the released in late 2009, thirty-four percent of their participants in a big data study were predicting data warehouse storage volumes of 10 or more terabytes of data.  Probably look for a focus on Business Intelligence to help make sense of all the data.  Mostly these should be through new adoptions of current technologies and a move to leverage mobile computing platforms more.

If you haven’t heard of DevOps check it out.  DevOps helps to tear down the wall and overcome the communication deficiencies that exist between the two factions by developing cooperation and agreeing on clear and concise goals before the project gets rolling.  Specifically we are talking about development and operation teams.  The DevOps philosophy ensures that an individual’s decisions are part of a unified business process.  The key difference between development and operations is the mind set of how they perceive the world with regards to their respective roles within the company.  One thrives on change and the other sees change as a detriment to stability and reliability.

Have you ever heard of a Software Ecosystem?  A software product line usually evolves and receives a broader adoption within an organization.  There is no reason for the software product line to stop once it has reached the outer boundaries of an organization.  When you make the product line architecture and its’ shared components available external to the organization you then transition from a software product line into a software ecosystem. Software product line companies increasingly expand their platform outside their organizational boundaries, in effect transitioning to a software ecosystem approach.  Whatever keeps the money train on track.